Помогите разобраться в получением данных о детали в python 3.9

Автор ResistanceJkee, 17.02.21, 20:05:38

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

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

ResistanceJkee

Здравствуйте! С компасом начал работать недавно (буквально пару дней назад) и стало интересно, каким образом можно получать при помощи питона данные из api компаса. Например, каким способом можно получить данные о материале детали? Прочитав справочник встроенный увидел свойство Surface3DType, оно есть в интерфейсе IMathSurface3D, но как достучаться до этого интерфейса я так и не понял.


ResistanceJkee

Цитата: Sabahs от 17.02.21, 20:08:00IPart7.Material - Материал компонента.
А можно поподробнее? Вот есть условный код, который я увидел на хабре
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
api = module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
Через api можно обратиться к Parents, Type, Application и Reference вроде, а как тогда обратиться к интерфейсу ipart7?


Aleksei

Цитата: ResistanceJkee от 17.02.21, 20:13:41А можно поподробнее? Вот есть условный код, который я увидел на хабре
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
api = module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
Через api можно обратиться к Parents, Type, Application и Reference вроде, а как тогда обратиться к интерфейсу ipart7?
Последовательно берете от полученного api интерфейс приложения, активный документ, деталь, свойство материала.
Если дополнить ваш код, примерно так.
import pythoncom
from win32com.client import Dispatch, gencache

module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
api = module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = module.IApplication(api)
application.Visible = True
try:
kompas_document_3d = module.IKompasDocument3D(application.ActiveDocument)
iPart7 = kompas_document_3d.TopPart
part_material = iPart7.Material
if part_material:
print(part_material)
else:
print('Нет данных о материале')
except:
print('Нет активного документа')

Deadida32


Цитата: Aleksei от 17.02.21, 23:35:04Последовательно берете от полученного api интерфейс приложения, активный документ, деталь, свойство материала.
Если дополнить ваш код, примерно так.
import pythoncom
from win32com.client import Dispatch, gencache

module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
api = module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = module.IApplication(api)
application.Visible = True
try:
kompas_document_3d = module.IKompasDocument3D(application.ActiveDocument)
iPart7 = kompas_document_3d.TopPart
part_material = iPart7.Material
if part_material:
print(part_material)
else:
print('Нет данных о материале')
except:
print('Нет активного документа')
Подскажи, пожалуйста, как получать данные высоты ширины, длины модели, диаметр отверстия, а то getgabarites bool возвращает

Вират Лакх

Цитата: Deadida32 от 06.03.21, 16:52:11Подскажи, пожалуйста, как получать данные высоты ширины, длины модели, диаметр отверстия, а то getgabarites bool возвращает
getgabarites - это получить габариты листа в задании на печать.
Если по-простому, то вам может пригодиться GetGabarit, который можно запросить у IBody или IPart. Но для объектов, расположенных в пространстве произвольно, не очень подходит.
Диаметр отверстия можно, например, получить от интерфейса математической кривой в трехмерном пространстве:
if ksEdgeDefinition.IsCircle():
    ksCurve3D = ksEdgeDefinition.GetCurve3D()
    ksCircle3dParam = ksCurve3D.GetCurveParam()
    diam = 2*ksCircle3dParam.radius
Смотря что является исходным объектом. Короче говоря, ищите по слову radius.
Возможно, вам подойдет "Радиус ортогонального сечения, проходящего через начало системы координат поверхности".