• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Как правильно создать эскиз в ЛСК?

Автор BD11, 03.06.14, 23:55:10

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

BD11

Доброго времени суток! У меня возникла проблема с написанием кода, который создает эскиз в ЛСК.

Если вручную создать ЛСК, выбрать «нужную» плоскость этой ЛСК (например XOY) и создать на ней эскиз, то начало координат этого эскиза будет совпадать с началом координат ЛСК. Я вручную создал ЛСК и эскиз на ее плоскости (XOY). В эскизе нарисовал окружность диаметром 10 мм с центром в точке (0:0). На рисунке ниже видно, что начало координат эскиза совпадают с началом координат ЛСК. Прошу обратить внимание на иконку эскиза в дереве построения, в углу иконки нарисована ЛСК.



Я хочу написать программу делающую те же действия, но столкнулся с проблемой — начало координат эскиза не совпадают с накалом координат ЛСК. Эскиз находиться на «нужной» плоскости, но уже в другом месте. Система координат эскиза находиться прямо над главной СК, а не совпадает с ЛСК. Обратите внимание на иконку эскиза в дереве построения, на ней уже не нарисована ЛСК.



Мой код:
// Запускаем Компас 3D
Type t;
t = Type.GetTypeFromProgID("KOMPAS.Application.5");
KompasObject Kompas = (KompasObject)Activator.CreateInstance(t);
t = Type.GetTypeFromProgID("KOMPAS.Application.7");
IKompasAPIObject iKompas = (IKompasAPIObject)Activator.CreateInstance(t);
Kompas.Visible = true;

// Создаем сборку
ksDocument3D Document3D = (ksDocument3D)Kompas.Document3D();
Document3D.Create(false, false);
Document3D = (ksDocument3D)Kompas.ActiveDocument3D();
IDocuments iDocuments = (IDocuments)iKompas.Application.Documents;
IKompasDocument3D iDocument3D = (IKompasDocument3D)iKompas.Application.ActiveDocument;

// Создадим ЛСК
IPart7 iPart = (IPart7)iDocument3D.TopPart;
IAuxiliaryGeomContainer iAuxiliaryGeomContainer = (IAuxiliaryGeomContainer)iPart;
ILocalCoordinateSystems iLocalCoordinateSystems = (ILocalCoordinateSystems)iAuxiliaryGeomContainer.LocalCoordinateSystems;
ILocalCoordinateSystem iLocalCoordinateSystem = iLocalCoordinateSystems.Add();
// Сместим ЛСК относительно СК
IPoint3D iPoint3D = (IPoint3D)iLocalCoordinateSystem;
iPoint3D.ParameterType = ksPoint3DTypeEnum.ksPParamCoord;
iPoint3D.X = 30;
iPoint3D.Y = 40;
iPoint3D.Z = 50;
// Повернем ЛСК относительно СК
iLocalCoordinateSystem.OrientationType = ksOrientationTypeEnum.ksEulerCorners;
ILocalCSEulerParam iLocalCSEulerParam = (ILocalCSEulerParam)iLocalCoordinateSystem.LocalCSParameters;
iLocalCSEulerParam.NutationAngle = 10;
iLocalCSEulerParam.PrecessionAngle = 15;
iLocalCSEulerParam.RotationAngle = 20;
// Переменуем созданную СК
iLocalCoordinateSystem.Name = "MyLCS";
iLocalCoordinateSystem.Update();

// Найдем "нужную" плоскость ЛСК и переименуем
IModelObject MyPlane = iLocalCoordinateSystem.DefaultObject[ksObj3dTypeEnum.o3d_planeXOY];
MyPlane.Name = "MyPlane";
MyPlane.Update();

// Создадим эскиз на "нужной" плоскости
ksPart Part = (ksPart)Document3D.GetPart((short)Part_Type.pTop_Part);
ksEntityCollection PartCollection = (ksEntityCollection)Part.EntityCollection((int)Obj3dType.o3d_unknown);
ksEntity Plane = (ksEntity)PartCollection.GetByName("MyPlane", true, false); // Нашел "нужную" плоскость
// Рисуем круг отверстия
ksEntity EntityDraw = (ksEntity)Part.NewEntity((short)ksObj3dTypeEnum.o3d_sketch);
ksSketchDefinition SketchDefinition = (ksSketchDefinition)EntityDraw.GetDefinition();
SketchDefinition.SetPlane(Plane); // Указал "нужную" плоскость
EntityDraw.Create();
ksDocument2D Document2D = (ksDocument2D)SketchDefinition.BeginEdit();
Document2D.ksCircle(0, 0, 5, 1);
SketchDefinition.EndEdit();



Что делаю не так?  :%:

Использовать свойство IKompasDocument3D.CreateObjectsInCurrentLocalCS:=True;
+ Благодарностей: 1

BD11

Sabahs, большое спасибо, работает как надо!

Vitalij Lysanov

   
   
   
Построение эскизов в ЛСК   
Эскиз, который записывается Макрорекордером, можно еще уточнить в части направления осей координат:   
ISketch   
    
AssociationObject - Точка привязки   
Angle - Угол поворота эскиза относительно проекции системы координат модели на плоскость эскиза (в градусах)   
CoordinateSystem - система координат эскиза   
DirectingObject - Направляющий объект для оси   
Fixed - Фиксация   
LeftHandedCS - Признак левосторонней системы координат   
Plane - Опорная плоскость   
Vector3D - Вектор, задающий направление оси   
    
    
    
AddSketch - Создать эскиз из уже имеющегося в заданной плоскости   
BeginEdit - Войти в режим редактирования эскиза   
BeginEditEx - Войти в режим редактирования эскиза   
DeleteWrongProjection - Удалить ошибочные проекции   
EndEdit - Выйти из режима редактирования эскиза   
GetLocation - Получить смещение системы координат эскиза относительно проекции системы координат модели на плоскость эскиза   
GetLoftPoint - Получить координаты точки в плоскости эскиза   
RotateAxis - Сменить направление оси на противоположное   
SetLocation - Установить смещение системы координат эскиза относительно проекции системы координат модели на плоскость эскиза   
SetLoftPoint - Установить координаты точки в плоскости эскиза   
WriteToFragment - Сохранить эскиз во фрагмент   
    
Такое обилие возможностей по управлению осями в эскизе (даже левостороннюю систему координат вспоминают), это не от хорошей жизни.   
    
Если взять отрезок вращающийся из центра, на краю отрезка строим по нормали плоскость.   
На плоскости – эскиз.   
И при вращении отрезка - такое рисует, лучше не смотреть.   
    
Эскиз на ЛСК рисует намного лучше:   
    
Более изведанный путь, это создать ЛСК и разместить эскиз на плоскости ЛСК, получим сразу три плоскости.   
    
На основе:   
https://forum.ascon.ru/index.php?topic=26313.msg193227#msg193227   


# -*- coding: utf-8 -*-
#|ЛСК Компас 3д


#   Продолжение  https://forum.ascon.ru/index.php?topic=26313.msg193227#msg193227



import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application


Documents = application.Documents
                                            #  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()



kompas_document_3d.CreateObjectsInCurrentLocalCS=True

#global im

##_____________________________________________________________
def imna():

    import datetime

    now = datetime.datetime.now()
    dd=str(now).replace(":","")
    dd=dd.replace(" ","")
    dd=dd.replace("-","")
    dd=dd.replace(".","")
    dd=dd[-8:]
    dd=dd[:5]

    return(dd)
##____________________________________________________________

im=int(imna()) # Исходное имя для ЛСК




##_____________________________________________________________
def V(x,y,z,   u1,u2,u3,  ex,ey,ed,dl,     napr, vid ):

    global im
    global iPart

    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    iAuxiliaryGeomContainer = iPart7._oleobj_.QueryInterface(kompas_api7_module.IAuxiliaryGeomContainer.CLSID, pythoncom.IID_IDispatch)
    iAuxiliaryGeomContainer = kompas_api7_module.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
    iLocalCoordinateSystems = iAuxiliaryGeomContainer.LocalCoordinateSystems
    iLocalCoordinateSystem = iLocalCoordinateSystems.Add()
    iPoint3D = iLocalCoordinateSystem._oleobj_.QueryInterface(kompas_api7_module.IPoint3D.CLSID, pythoncom.IID_IDispatch)
    iPoint3D = kompas_api7_module.IPoint3D(iPoint3D)
    iPoint3D.ParameterType = kompas6_constants_3d.ksPParamCoord
    iPoint3D.X = x
    iPoint3D.Y = y
    iPoint3D.Z = z
    iLocalCoordinateSystem.OrientationType = kompas6_constants_3d.ksEulerCorners
    iLocalCoordinateSystem.Update()

    iLocalCSParameters = iLocalCoordinateSystem.LocalCSParameters
    iLocalCSEulerParam = iLocalCSParameters._oleobj_.QueryInterface(kompas_api7_module.ILocalCSEulerParam.CLSID, pythoncom.IID_IDispatch)
    iLocalCSEulerParam = kompas_api7_module.ILocalCSEulerParam(iLocalCSEulerParam)
    iLocalCSEulerParam.NutationAngle = u1
    iLocalCSEulerParam.PrecessionAngle = u2
    iLocalCSEulerParam.RotationAngle = u3
  #  iLocalCoordinateSystem.Update()





    rr1=iLocalCoordinateSystem.DefaultObject(1)
    rr1.Name=str(im)
    im=im+1

    rr2=iLocalCoordinateSystem.DefaultObject(2)
    rr2.Name=str(im)
    im=im+1

    rr3=iLocalCoordinateSystem.DefaultObject(3)
    rr3.Name=str(im)
    im=im+1
    iLocalCoordinateSystem.Update()













#    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    iSketch = iPart.NewEntity(kompas6_constants_3d.o3d_sketch)

    iDefinition = iSketch.GetDefinition()


    #_______________________________________________________________________________________________________
    PartCollection=iPart.EntityCollection(0) # все объекты

    if napr==1:
        Plane = PartCollection.GetByName(str(im-1), True,True )
    if napr==2:
        Plane = PartCollection.GetByName(str(im-2), True,True )
    if napr==3:
        Plane = PartCollection.GetByName(str(im-3), True,True )

    iDefinition.SetPlane(Plane)

    iSketch.Create()



    iDocument2D = iDefinition.BeginEdit()
    kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
    iDocument2D = kompas_object.ActiveDocument2D()
    obj = iDocument2D.ksCircle(ex, ey, ed, 1 )
    iDefinition.EndEdit()

   # iLocalCoordinateSystem.Update()



    if vid==1:
      #  iPart7 = kompas_document_3d.TopPart
        iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
        obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossExtrusion)
        iDefinition = obj.GetDefinition()



        iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)

        #iCollection.SelectByPoint(-58, 40.907157022394, 54.31460351552)
        iEdge = iCollection.Last()

        iEdgeDefinition = iEdge.GetDefinition()
        iSketch = iEdgeDefinition.GetOwnerEntity()
        iDefinition.SetSketch(iSketch)
        iExtrusionParam = iDefinition.ExtrusionParam()
        iExtrusionParam.direction = kompas6_constants_3d.dtNormal
        iExtrusionParam.depthNormal = dl
        iExtrusionParam.depthReverse = 0
        iExtrusionParam.draftOutwardNormal = False
        iExtrusionParam.draftOutwardReverse = False
        iExtrusionParam.draftValueNormal = 0
        iExtrusionParam.draftValueReverse = 0
        iExtrusionParam.typeNormal = kompas6_constants_3d.etBlind
        iExtrusionParam.typeReverse = kompas6_constants_3d.etBlind
        iThinParam = iDefinition.ThinParam()
        iThinParam.thin = False
        obj.name = "Элемент выдавливания:1"
        iColorParam = obj.ColorParam()
        iColorParam.ambient = 0.5
        iColorParam.color = 9474192
        iColorParam.diffuse = 0.6
        iColorParam.emission = 0.5
        iColorParam.shininess = 0.8
        iColorParam.specularity = 0.8
        iColorParam.transparency = 1
        obj.Create()


##_____________________________________________________________


u1=0
u2=0


V(0,0,0,        0,      0,      -90,      0,0,       0.1,23,    2 ,    1  )    #   u3 z

V(0,0,0,        0,      0,       0,       0,0,       0.2,23,    2 ,    1  )    #   u3 z

V(0,0,0,        90,      0,     0,      0,0,       0.3,23,    2 ,    1  )    #   u3 z



for u1 in range (0,360,20):
    print(u1)
    sm=u1/10

    u1=u1-0.00001

    e_sm_x=12
    e_sm_y=2

    V(0,0,53,       u1,     0,        90,      12,   0,       2,13,    2 ,    1  )    #   u3 z
    V(0,0,53,       u1,     0,        90,      15.5, 2.5,       2,13,    2 ,    1  )    #   u3 z



    V(0,0,77,       90,     90-u1,     0,      12,   0,       2,23,    2 ,    1  )    #   u3 z
    V(0,0,77,       90,     90-u1,     0,      15.5, 2.5,       2,23,    2 ,    1  )    #   u3 z


    V(0,0,130,      90+u1,  90,       90,      12,   0,       2,33,    2 ,    1  )    #   u3 z
    V(0,0,130,      90+u1,  90,       90,      15.5, 2.5,       2,33,    2 ,    1  )    #   u3 z
# https://commons.wikimedia.org/wiki/File:Euler2a.gif?uselang=ru углы эйлера
# https://ru.wikipedia.org/wiki/%D0%A3%D0%B3%D0%BB%D1%8B_%D0%AD%D0%B9%D0%BB%D0%B5%D1%80%D0%B0




    
Рис   
Пример работы программы по заданию, приведенному ниже:   

for u1 in range (0,360,20):
    print(u1)
    sm=u1/10

    u1=u1-0.00001

    e_sm_x=12
    e_sm_y=2

    V(0,0,53,       u1,     0,        90,      12,   0,       2,13,    2 ,    1  )    #   u3 z
    V(0,0,53,       u1,     0,        90,      15.5, 2.5,       2,13,    2 ,    1  )    #   u3 z



    V(0,0,77,       90,     90-u1,     0,      12,   0,       2,23,    2 ,    1  )    #   u3 z
    V(0,0,77,       90,     90-u1,     0,      15.5, 2.5,       2,23,    2 ,    1  )    #   u3 z


    V(0,0,130,      90+u1,  90,       90,      12,   0,       2,33,    2 ,    1  )    #   u3 z
    V(0,0,130,      90+u1,  90,       90,      15.5, 2.5,       2,33,    2 ,    1  )    #   u3 z



Тут:     

0,0,130                       - это координаты
90+u1,  90,     90            - это углы
15.5, 2.5                     - смещение центра окружности в эскизе
2,33                          - диаметр и высота выдавливания
2                             -   выбор плоскости из 1-2-3
1                             -   будет выдавливание, иначе просто эскизы

    
Эскизы построили, дальше, как обычно – тела и поверхности по сечениям или по сети кривых.   
    
Даже с ЛСК был один сбой, когда угол был точно равен нулю, нарисовало в другую сторону.   
Для защиты можно рекомендовать к углам 0-90-180-270 градусов добавлять 0.0001 градус, тогда все устойчиво и предсказуемо.   
    
При ЛСК получается нечего тестировать на предмет неожиданностей в сборке, иначе нужен полный тест каждой детали на повороты в сборках.   
    
Селект   
    
Получилось работать при выдавливании без оператора выхода на точку эскиза.   
Создается эскиз, и он крайний в коллекции.   
Дальше оператор работает по краю коллекции, а там нужный эскиз.   
    
Это не просто на один оператор меньше, там требуют числа, которые в пространстве иногда трудно рассчитать.   
    
       


        iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
        obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossExtrusion)
        iDefinition = obj.GetDefinition()



        iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)

        #iCollection.SelectByPoint(-58, 40.907157022394, 54.31460351552)
        iEdge = iCollection.Last()

Пример кода без оператора выбора эскиза для выдавливания   
    
   
   
               

Vitalij Lysanov

   
   
   
   
   
   
   Коллекции
   Вместо коллекций в операции по сечениям можно применять конструкции:
m=[]
m.append(iSketch)
m.append(iSketch)
m.append(iSketch)
m.append(iSketch)
m.append(iSketch)

   
   При чтении:
for n in range(len(m)):                                           
     iSketches.Add(m[n])
   
   или
   
for mn in m:
     iSketches.Add(mn)
   
   
   Все строится и возможностей по управлению эскизами намного больше:
   
   
   Рис по заданию:
   
for u1 in range (0,86,5):
    print(u1)
    sm=u1/10

    u1=u1-0.00001

    V(2*math.sin(u1),u1,2*math.cos(u1),      u1,  0, 0,      15.5, 2.5,       2,33,    2 ,    0  )    

   
   
   
   
   
   
   Код:
   
# -*- coding: utf-8 -*-
#|ЛСК Компас 3д


#   Продолжение  https://forum.ascon.ru/index.php?topic=26313.msg193227#msg193227



import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application


Documents = application.Documents
                                            #  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()

m=[]

kompas_document_3d.CreateObjectsInCurrentLocalCS=True

#global im

##_____________________________________________________________
def imna():

    import datetime

    now = datetime.datetime.now()
    dd=str(now).replace(":","")
    dd=dd.replace(" ","")
    dd=dd.replace("-","")
    dd=dd.replace(".","")
    dd=dd[-8:]
    dd=dd[:5]

    return(dd)
##____________________________________________________________

im=int(imna()) # Исходное имя для ЛСК




##_____________________________________________________________
def V(x,y,z,   u1,u2,u3,  ex,ey,ed,dl,     napr, vid ):

    global im
    global iPart

    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    iAuxiliaryGeomContainer = iPart7._oleobj_.QueryInterface(kompas_api7_module.IAuxiliaryGeomContainer.CLSID, pythoncom.IID_IDispatch)
    iAuxiliaryGeomContainer = kompas_api7_module.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
    iLocalCoordinateSystems = iAuxiliaryGeomContainer.LocalCoordinateSystems
    iLocalCoordinateSystem = iLocalCoordinateSystems.Add()
    iPoint3D = iLocalCoordinateSystem._oleobj_.QueryInterface(kompas_api7_module.IPoint3D.CLSID, pythoncom.IID_IDispatch)
    iPoint3D = kompas_api7_module.IPoint3D(iPoint3D)
    iPoint3D.ParameterType = kompas6_constants_3d.ksPParamCoord
    iPoint3D.X = x
    iPoint3D.Y = y
    iPoint3D.Z = z
    iLocalCoordinateSystem.OrientationType = kompas6_constants_3d.ksEulerCorners
    iLocalCoordinateSystem.Update()

    iLocalCSParameters = iLocalCoordinateSystem.LocalCSParameters
    iLocalCSEulerParam = iLocalCSParameters._oleobj_.QueryInterface(kompas_api7_module.ILocalCSEulerParam.CLSID, pythoncom.IID_IDispatch)
    iLocalCSEulerParam = kompas_api7_module.ILocalCSEulerParam(iLocalCSEulerParam)
    iLocalCSEulerParam.NutationAngle = u1
    iLocalCSEulerParam.PrecessionAngle = u2
    iLocalCSEulerParam.RotationAngle = u3
  #  iLocalCoordinateSystem.Update()





    rr1=iLocalCoordinateSystem.DefaultObject(1)
    rr1.Name=str(im)
    im=im+1

    rr2=iLocalCoordinateSystem.DefaultObject(2)
    rr2.Name=str(im)
    im=im+1

    rr3=iLocalCoordinateSystem.DefaultObject(3)
    rr3.Name=str(im)
    im=im+1
    iLocalCoordinateSystem.Update()













#    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    iSketch = iPart.NewEntity(kompas6_constants_3d.o3d_sketch)

    iDefinition = iSketch.GetDefinition()


    #_______________________________________________________________________________________________________
    PartCollection=iPart.EntityCollection(0) # все объекты

    if napr==1:
        Plane = PartCollection.GetByName(str(im-1), True,True )
    if napr==2:
        Plane = PartCollection.GetByName(str(im-2), True,True )
    if napr==3:
        Plane = PartCollection.GetByName(str(im-3), True,True )

    iDefinition.SetPlane(Plane)

    iSketch.Create()


    iDocument2D = iDefinition.BeginEdit()
    kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
    iDocument2D = kompas_object.ActiveDocument2D()
    obj = iDocument2D.ksCircle(ex, ey, ed, 1 )
    iDefinition.EndEdit()
    m.append(iSketch)

   # iLocalCoordinateSystem.Update()



    if vid==1:
      #  iPart7 = kompas_document_3d.TopPart
        iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
        obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossExtrusion)
        iDefinition = obj.GetDefinition()



        iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)

        #iCollection.SelectByPoint(-58, 40.907157022394, 54.31460351552)
        iEdge = iCollection.Last()

        iEdgeDefinition = iEdge.GetDefinition()
        iSketch = iEdgeDefinition.GetOwnerEntity()
        iDefinition.SetSketch(iSketch)
        iExtrusionParam = iDefinition.ExtrusionParam()
        iExtrusionParam.direction = kompas6_constants_3d.dtNormal
        iExtrusionParam.depthNormal = dl
        iExtrusionParam.depthReverse = 0
        iExtrusionParam.draftOutwardNormal = False
        iExtrusionParam.draftOutwardReverse = False
        iExtrusionParam.draftValueNormal = 0
        iExtrusionParam.draftValueReverse = 0
        iExtrusionParam.typeNormal = kompas6_constants_3d.etBlind
        iExtrusionParam.typeReverse = kompas6_constants_3d.etBlind
        iThinParam = iDefinition.ThinParam()
        iThinParam.thin = False
        obj.name = "Элемент выдавливания:1"
        iColorParam = obj.ColorParam()
        iColorParam.ambient = 0.5
        iColorParam.color = 9474192
        iColorParam.diffuse = 0.6
        iColorParam.emission = 0.5
        iColorParam.shininess = 0.8
        iColorParam.specularity = 0.8
        iColorParam.transparency = 1
        obj.Create()


##_____________________________________________________________


u1=0
u2=0


import math

for u1 in range (0,86,5):
    print(u1)
    sm=u1/10

    u1=u1-0.00001

    V(2*math.sin(u1),u1,2*math.cos(u1),      u1,  0, 0,      15.5, 2.5,       2,33,    2 ,    0  )    #   u3 z

kolich=iPart.GetCountObj()

print(kolich)
# https://commons.wikimedia.org/wiki/File:Euler2a.gif?uselang=ru углы эйлера
# https://ru.wikipedia.org/wiki/%D0%A3%D0%B3%D0%BB%D1%8B_%D0%AD%D0%B9%D0%BB%D0%B5%D1%80%D0%B0











##________________________________________________________________
iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossLoft)
iDefinition = obj.GetDefinition()
iSketches = iDefinition.Sketchs()

for mn in m:
     iSketches.Add(mn)


obj.name = "Элемент по сечениям:5"
iColorParam = obj.ColorParam()
iColorParam.ambient = 0.5
iColorParam.color = 9474192
iColorParam.diffuse = 0.6
iColorParam.emission = 0.5
iColorParam.shininess = 0.8
iColorParam.specularity = 0.8
iColorParam.transparency = 1
obj.Create()