Компас-Макро, Python, проблема с ksGetObjParam

Автор Андрей В.В., 27.11.07, 22:59:54

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

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

Андрей В.В.

Здравствуйте!

Установил Компас-Макро, начал разбираться с Python.
Пишу скрипт, который будет перебирать объекты
определенного типа в чертеже, получать их параметры
и т.д.
Хочу получить параметры определенных объектов (прямоугольников).
При выполнении строки:
type_obj = iDocument2D.ksGetObjParam(obj, 0, -1)
возникает ошибка: "ValueError: argument is not a COM object"
Подскажите, что я неправильно делаю?

import Kompas6API5 as KAPI
from win32com.client import Dispatch
import LDefin2D
import LDefin3D

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)

iDocument2D = iKompasObject.Document2D()
iDocument2D.ksOpenDocument("d:/drawning.cdw", False)
iksIterator = iKompasObject.GetIterator()
if iksIterator.ksCreateIterator(35, 0) == True:
   obj = iksIterator.ksMoveIterator("F")
   while iDocument2D.ksExistObj(obj) == 1:
      type_obj = iDocument2D.ksGetObjParam(obj, 0, -1)
      obj = iksIterator.ksMoveIterator("N")
   iksIterator.ksDeleteIterator()

Андрей В.В.


Slaviation

import Kompas6API5 as KAPI
from win32com.client import Dispatch
import LDefin2D
import LDefin3D

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)

iDocument2D = iKompasObject.ActiveDocument2D()

iksIterator = iKompasObject.GetIterator()
if iksIterator.ksCreateIterator(35, 0) == True:

   # Если все-таки нужно определять параметры найденных прямоугольников, то
   iObjParam = KAPI.ksRectangleParam(iKompasObject.GetParamStruct(LDefin2D.ko_RectangleParam))
   #

   obj = iksIterator.ksMoveIterator("F")
   while iDocument2D.ksExistObj(obj) == 1:
      type_obj = iDocument2D.ksGetObjParam(obj, iObjParam, -1)
      # или type_obj = iDocument2D.ksGetObjParam(obj, Null, -1) но не ноль (0), если параметры определять не нужно
      obj = iksIterator.ksMoveIterator("N")
   iksIterator.ksDeleteIterator()

Андрей В.В.


kons3d

Интересует платная  разработка приложения для Компаса для простановки размеров (длины всех отрезков) в эскизе или хотя бы намек на возможное решение проблемы. Заранее благодарен.

Slaviation

Цитироватьвозможное решение проблемы. Заранее благодарен.
В этом приложении нужно выполнить подписку на событие создания графических объектов.
В обработчике события отфильтровывать отрезки и создавать на них размеры.
Примеры подписки на различные типы событий есть в примерах SDK КОМПАС (класс BaseEvent)
К слову, КОМПАС-Макро работает похожим образом, только в обработчике, вместо создания размеров создает код создания только что созданного объекта.