Доброго времени суток! Задали в институте написать макрос на Питоне и параметризовать его, чтобы пользователь мог сам данные вводить. С вводом данным и построением детали вращением проблем не возникло. Но мне необходимы также отверстия. Вот здесь то он и начинает ругаться.
Код:
# -*- coding: cp1251 -*-
#|14
import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH
iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject
iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)
MH.iApplication = iApplication
iDocument3D = iKompasObject.ActiveDocument3D()
iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)
X0=0.0
Y0=0.0
D1=80.0
D2=30.0
D3=20.0
D4=77.0
D5=2.0
D6=40.0
D7=60.0
D8=38.0
D9=42.0
D10=60.0
H1=14.0
H2=29.0
H3=10.0
H4=25.0
H5=2.0
n=4
m=10.0
angl=360.0
r=0
r=iKompasObject.ksReadDouble ('Желаете ли Вы изменить исходные данные? 1-Да, 0-Нет', 1, 0, 10, r ) [1]
if r==1:
X0 = iKompasObject.ksReadDouble( 'X0=', 98, 0, 200, X0 )[1]
Y0 = iKompasObject.ksReadDouble( 'Y0=', 175, 0, 500, Y0 )[1]
D1 = iKompasObject.ksReadDouble( 'D1=', 80, 40, 240, D1 )[1]
D2 = iKompasObject.ksReadDouble( 'D2=', 30, 10, 190, D2 )[1]
if D2>=D1:
iKompasObject.ksMessage('Ошибка!Значение D2 должно быть меньше D1!')
D2 = iKompasObject.ksReadDouble( 'D2=', 30, 10, 190, D2 )[1]
D3 = iKompasObject.ksReadDouble( 'D3=', 20, 1, 180, D3 )[1]
if D3>=D2:
iKompasObject.ksMessage('Ошибка!Значение D3 должно быть меньше D2!')
D3 = iKompasObject.ksReadDouble( 'D3=', 20, 1, 180, D3 )[1]
D4 = iKompasObject.ksReadDouble( 'D4=', 77, 35, 235, D4 )[1]
D5 = iKompasObject.ksReadDouble( 'D5=', 2, 1, 6, D5 )[1]
D6 = iKompasObject.ksReadDouble( 'D6=', 40, 20, 120, D6 )[1]
if D6<=D2:
iKompasObject.ksMessage('Ошибка!Значение D2 должно быть меньше D6!')
D6 = iKompasObject.ksReadDouble( 'D6=', 40, 20, 120, D6 )[1]
D7 = iKompasObject.ksReadDouble( 'D7=', 60, 20, 220, D7 )[1]
if D7<=D6:
iKompasObject.ksMessage('Ошибка!Значение D6 должно быть меньше D7!')
D7 = iKompasObject.ksReadDouble( 'D7=', 60, 20, 120, D7 )[1]
D8 = iKompasObject.ksReadDouble( 'D8=', 38, 15, 195, D8 )[1]
if D8<=D2 and D8>=D6:
iKompasObject.ksMessage('Ошибка!Значение D8 должно быть меньше D6 и больше D2!')
D8 = iKompasObject.ksReadDouble( 'D8=', 38, 20, 120, D8 )[1]
D9 = iKompasObject.ksReadDouble( 'D9=', 42, 20, 115, D9 )[1]
if D9<=D6 and D9>=D7:
iKompasObject.ksMessage('Ошибка!Значение D9 должно быть меньше D7 и больше D6!')
D9 = iKompasObject.ksReadDouble( 'D9=', 42, 20, 120, D9 )[1]
D10 = iKompasObject.ksReadDouble( 'D10=', 60, 20, 220, D10 )[1]
if D10<=D9:
iKompasObject.ksMessage('Ошибка!Значение D9 должно быть меньше D10!')
D10 = iKompasObject.ksReadDouble( 'D10=', 60, 20, 120, D10 )[1]
H1 = iKompasObject.ksReadDouble( 'H1=', 14, 10, 100, H1 )[1]
H2 = iKompasObject.ksReadDouble( 'H2=', 29, 15, 200, H2 )[1]
if H2<=H1:
iKompasObject.ksMessage('Ошибка!Значение H1 должно быть меньше H2!')
H2 = iKompasObject.ksReadDouble( 'H2=', 29, 15, 200, H2 )[1]
H3 = iKompasObject.ksReadDouble( 'H3=', 10, 5, 80, H3 )[1]
if H1<=H3:
iKompasObject.ksMessage('Ошибка!Значение H3 должно быть меньше H1!')
H3 = iKompasObject.ksReadDouble( 'H3=', 10, 5, 80, H3 )[1]
H4 = iKompasObject.ksReadDouble( 'H4=', 25, 10, 150, H4 )[1]
if H2<=H4 and H4<=H1:
iKompasObject.ksMessage('Ошибка!Значение H4 не должно быть больше H2 и меньше H1!')
H4 = iKompasObject.ksReadDouble( 'H4=', 25, 10, 150, H4 )[1]
n = iKompasObject.ksReadDouble( 'n=', 4, 0, 15, n )[1]
m = iKompasObject.ksReadDouble( 'm=', 10, 5, 50, m )[1]
angl = iKompasObject.ksReadDouble( 'Угол=', 360, 0, 360, angl )[1]
H5=(H2-H4)/2
iKompasObject.ksMessage('Ваша деталь!')
iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iSketch = iPart.NewEntity(LDefin3D.o3d_sketch)
iDefinition = iSketch.GetDefinition()
iPlane = iPart.GetDefaultEntity(LDefin3D.o3d_planeXOZ)
iDefinition.SetPlane(iPlane)
iSketch.Create()
iDocument2D = iDefinition.BeginEdit()
iAxisLineParam = KAPI.ksAxisLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_AxisLineParam))
iAxisLineParam.Init()
iMathPointParam = KAPI.ksMathPointParam(iAxisLineParam.GetBegPoint())
iMathPointParam.x = X0
iMathPointParam.y = Y0
iMathPointParam = KAPI.ksMathPointParam(iAxisLineParam.GetEndPoint())
iMathPointParam.x = X0+H2+10
iMathPointParam.y = Y0