# -*- coding: utf-8 -*-
#|44

import pythoncom
from win32com.client import Dispatch, gencache


#  Подключим константы API Компас
const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
const_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = KAPI.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))

#  Подключим описание интерфейсов API7
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication = KAPI7.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(KAPI7.IApplication.CLSID, pythoncom.IID_IDispatch))


#  Получим активный документ
iKompasDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iKompasDocument)
iDocument3D = iKompasObject.ActiveDocument3D()

#создадим эскиз
iPart7 = iKompasDocument3D.TopPart
iModelContainer = KAPI7.IModelContainer(iPart7)
iSketchs = iModelContainer.Sketchs
iSketch = iSketchs.Add()
iPlane = iPart7.DefaultObject(const_3d.o3d_planeXOY)
iSketch.Plane = iPlane
iSketch.Update()

print(iSketch.Reference)

#создадим окружность в эскизе
iDocument2D = iSketch.BeginEdit()
iDocument2D = iKompasObject.ActiveDocument2D()
obj = iDocument2D.ksCircle(0, 0, 30, 1)
iSketch.EndEdit()

#создаем цилиндр выдавливанием
iExtrusions = iModelContainer.Extrusions
iExtrusion = iExtrusions.Add(const_3d.o3d_bossExtrusion)
iExtrusion.SetSideParameters(1, 0, 20, 0, 0, None) #1 - в прямом направлении, 0 - на глубину, 100 - глубина, 0 - угол наклона, 0 - признак уклона внутрь, None - указатель на объект, задающий глубину
iExtrusion.Sketch = iSketch
iExtrusion.Update()