Скорректировать код (Точки в центре отверстий в эскизе)

Автор jeanevesse, 27.11.19, 09:12:06

« предыдущая - следующая »

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

jeanevesse

Добрый день. Помогите подкорректировать код.
# -*- coding: utf-8 -*-
#|Точки в центре

import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import LDefin3D
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()

TopPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
SlcMan = iDocument3D.GetSelectionMng()
Count = SlcMan.GetCount()
n=0
Face0 = SlcMan.GetObjectByIndex(0)
FaceDef = Face0.GetDefinition()
Edges = FaceDef.EdgeCollection()
EdgesCount = Edges.GetCount()
print (EdgesCount)
Sketch = TopPart.NewEntity(LDefin3D.o3d_sketch)
SketchDef = Sketch.GetDefinition()
SketchDef.SetPlane(Face0)
Sketch.Create()
ksDocument2D = SketchDef.BeginEdit()
Iterator = iKompasObject.GetIterator ()
CircleParam = iKompasObject.GetParamStruct(LDefin2D.ko_CircleParam)
for n in range (0, EdgesCount, 1):
   EdgeDef = Edges.GetByIndex (n)
   if EdgeDef.IsCircle ():
      Edge = EdgeDef.GetEntity ()
      SketchDef.AddProjectionOf(Edge)
Iterator.ksCreateIterator(2, 0)

if Iterator:
   Circle = Iterator.ksMoveIterator ('F')
   while Circle:
      Circle = Iterator.ksMoveIterator ('N')
      CircleParam.Init()
      ksDocument2D.ksGetObjParam (Circle, CircleParam, -1)
      ksDocument2D.ksPoint (CircleParam.xc, CircleParam.yc, 0)
      ksDocument2D.ksDeleteObj (Circle)

SketchDef.EndEdit()

Ошибка   
AttributeError: 'NoneType' object has no attribute 'GetDefinition' в этой строке "FaceDef = Face0.GetDefinition()"      

ТрындецЪ

# -*- coding: utf-8 -*-
#|Точки в центре

import pythoncom
from win32com.client import Dispatch, gencache

#  Подключим описание интерфейсов 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))

#  Подключим описание интерфейсов 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))

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

TopPart = iDocument3D.GetPart(-1)
SlcMan = iDocument3D.GetSelectionMng()

Face0 = SlcMan.GetObjectByIndex(0)
FaceDef = Face0.GetDefinition()
Edges = FaceDef.EdgeCollection()
EdgesCount = Edges.GetCount()
print (EdgesCount)
Sketch = TopPart.NewEntity(5)
SketchDef = Sketch.GetDefinition()
SketchDef.SetPlane(Face0)
Sketch.Create()
ksDocument2D = SketchDef.BeginEdit()

CircleParam = kompas_object.GetParamStruct(20) #ko_CircleParam)
for n in range (0, EdgesCount, 1):
   EdgeDef = Edges.GetByIndex (n)
   if EdgeDef.IsCircle ():
      Edge = EdgeDef.GetEntity ()
      SketchDef.AddProjectionOf(Edge)

Iterator = kompas_object.GetIterator ()
Iterator.ksCreateIterator(2, 0)

if Iterator:
   Circle = Iterator.ksMoveIterator ('F')
   while Circle:
      Circle = Iterator.ksMoveIterator ('N')
      CircleParam.Init()
      ksDocument2D.ksGetObjParam (Circle, CircleParam, -1)
      ksDocument2D.ksPoint (CircleParam.xc, CircleParam.yc, 0)
      ksDocument2D.ksDeleteObj (Circle)

SketchDef.EndEdit()
kompas_document_3d.RebuildDocument()

jeanevesse

Цитата: ТрындецЪ от 27.11.19, 14:04:39# -*- coding: utf-8 -*-
#|Точки в центре

import pythoncom
from win32com.client import Dispatch, gencache

#  Подключим описание интерфейсов 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))

#  Подключим описание интерфейсов 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))

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

TopPart = iDocument3D.GetPart(-1)
SlcMan = iDocument3D.GetSelectionMng()

Face0 = SlcMan.GetObjectByIndex(0)
FaceDef = Face0.GetDefinition()
Edges = FaceDef.EdgeCollection()
EdgesCount = Edges.GetCount()
print (EdgesCount)
Sketch = TopPart.NewEntity(5)
SketchDef = Sketch.GetDefinition()
SketchDef.SetPlane(Face0)
Sketch.Create()
ksDocument2D = SketchDef.BeginEdit()

CircleParam = kompas_object.GetParamStruct(20) #ko_CircleParam)
for n in range (0, EdgesCount, 1):
   EdgeDef = Edges.GetByIndex (n)
   if EdgeDef.IsCircle ():
      Edge = EdgeDef.GetEntity ()
      SketchDef.AddProjectionOf(Edge)

Iterator = kompas_object.GetIterator ()
Iterator.ksCreateIterator(2, 0)

if Iterator:
   Circle = Iterator.ksMoveIterator ('F')
   while Circle:
      Circle = Iterator.ksMoveIterator ('N')
      CircleParam.Init()
      ksDocument2D.ksGetObjParam (Circle, CircleParam, -1)
      ksDocument2D.ksPoint (CircleParam.xc, CircleParam.yc, 0)
      ksDocument2D.ksDeleteObj (Circle)

SketchDef.EndEdit()
kompas_document_3d.RebuildDocument()

Ошибка всё та же. Может что-то не подключено у меня

ТрындецЪ

Цитата: jeanevesse от 27.11.19, 16:08:33Ошибка всё та же. Может что-то не подключено у меня
Надо плоскую грань выделить перед запуском макроса.

jeanevesse

Цитата: ТрындецЪ от 28.11.19, 08:03:51Надо плоскую грань выделить перед запуском макроса.

Спасибо, все работает!