PyKompasMacro

Автор Slaviation, 20.04.18, 09:14:28

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

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

Вират Лакх

Спасибо. С первыми строчками в общих чертах ясно. После того, как эти файлы создались, можно же наверно по-другому записать, типа как-то так? kompas6_constants = этот_созданный_файл.constants

А как эта строка получилась?
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
Dispatch("Kompas.Application.5") - ?
_oleobj_ - ?
kompas6_api5_module.KompasObject.CLSID - ?
и т.д.

в PyKompasMacro введете try для отсутствующих констант?

Slaviation

Это место можно писать намного короче: kompas_api_object = Dispatch("Kompas.Application.5")

А мудреная запись с QueryInterface лишь для того, чтобы дополнительно проверить получение именно интерфейса KompasObject.из модуля kompas6_api5_module.

Таким способом можно получить ЛЮБОЙ интерфейс, описанный в модуле kompas6_api5_module напрямую, а не добираясь до него через лабиринт, берущий начало от головного интерфейса.
+ Благодарностей: 2

ТрындецЪ

Цитата: Slaviation от 23.10.18, 12:32:13
Таким способом можно получить ЛЮБОЙ интерфейс, описанный в модуле kompas6_api5_module напрямую, а не добираясь до него через лабиринт, берущий начало от головного интерфейса.
А как работать в Python c экспортными функциями, которые описаны в SDK?

Вират Лакх

Прошу прощения за вопросы не в тему, но, думаю, многим будет полезно знать эту кухню.
Еще немного мастер-класса, если можно:
1) Так что насчет уже созданных файлов вида 2CAF168C-7961-4B90-9DA2-701419BEEFE3x0x1x0.py? Можно как-то готовые использовать?
2) Что вообще такое Dispatch?
3) Откуда я узнаю, что надо написать строку "Kompas.Application.5", "Kompas.Application.7" или "Materials.BOSimpleProvider"?
4) Вот это выдает замудренная строка, и оно работает.
<win32com.gen_py.0422828C-F174-495E-AC5D-D31014DBBE87x0x1x0.KompasObject instance at 0x44646792>
А вот kompas_api_object = Dispatch("Kompas.Application.5") выдает
<COMObject Kompas.Application.5>
и оно не работает, например, не канает kompas_object.ActiveDocument3D()
5) Не понял про получение любого интерфейса. Каким таким? Например, тот же ActiveDocument3D как напрямую получить?

Slaviation

1.
gencache.EnsureModule не создает модуль <guid>.py попусту, при каждом вызове, а лишь если его еще нет или он есть, но уже не соответствует зарегистрированной с этим guid библиотеке типов, т. е. не актуальный (к примеру разработчики добавили новые интерфейсы или изменили существующие).

2.
Функция win32com. Тут документация в помощь.

3.
http://rsdn.org/article/com/COMvs.xml

4.
Тоже работает, если вызов ActiveDocument3D сделать как свойство, без скобок.
kompas_object = Dispatch("Kompas.Application.5")
ks_document_3d = kompas_object.ActiveDocument3D
print(ks_document_3d.fileName)

5.
ЦитироватьТаким способом можно получить ЛЮБОЙ интерфейс, описанный в модуле kompas6_api5_module напрямую, а не добираясь до него через лабиринт, берущий начало от головного интерфейса.
Коллеги, тут я сам набредил, этот перл прошу не принимать во внимание :)
Ответ на вопрос зачем делать такой мудреный способ получения kompas_object с использованием QueryInterface, похоже в п.4.



+ Благодарностей: 2

Slaviation

ЦитироватьА как работать в Python c экспортными функциями, которые описаны в SDK?
Не знаю возможно ли это в принципе.

Вират Лакх

Цитата: Slaviation от 24.10.18, 07:08:19
4. Тоже работает, если вызов ActiveDocument3D сделать как свойство, без скобок.
kompas_object = Dispatch("Kompas.Application.5")
ks_document_3d = kompas_object.ActiveDocument3D
print(ks_document_3d.fileName)
Ну и, надеюсь, последняя пара вопросов.
I) Без скобок - как свойство, а со скобками - как что?
II) Можно ли попроще (чем та замудреная запись) трансформировать kompas_object = Dispatch("Kompas.Application.5") в "нормальный" kompas_object, чтобы ActiveDocument3D не как свойство осталась работать со скобками?
p.s.
ЦитироватьА мудреная запись с QueryInterface лишь для того, чтобы дополнительно проверить получение именно интерфейса KompasObject из модуля kompas6_api5_module.
А разве может попасться какой-то левый?

Slaviation

ЦитироватьБез скобок - как свойство, а со скобками - как что?
Метод, принимающий список аргументов, даже если их нет.

ЦитироватьМожно ли попроще
Не знаю :(

+ Благодарностей: 1

Вират Лакх

03.12.18, 07:35:50 #48 Последнее редактирование: 03.12.18, 07:48:57 от Вират Лакх
Теперь я знаю, как проще записать подключение к компасу из питона:

from win32com.client import gencache, Dispatch
KompasAPI5 = gencache.EnsureModule('{0422828C-F174-495E-AC5D-D31014DBBE87}', 0, 1, 0)
KompasAPI7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
KompasConst = gencache.EnsureModule('{75C9F5D0-B5B8-4526-8681-9903C567D2ED}', 0, 1, 0).constants
KompasConst3D = gencache.EnsureModule('{2CAF168C-7961-4B90-9DA2-701419BEEFE3}', 0, 1, 0).constants
KompasObject = Dispatch('Kompas.Application.5', None, KompasAPI5.KompasObject.CLSID)
Application = Dispatch('Kompas.Application.7') # или KompasObject.ksGetApplication7()

Можно заменить KompasAPI5.KompasObject.CLSID на '{E36BC97C-39D6-4402-9C25-C7008A217E02}', чтобы не зависеть от KompasAPI5
+ Благодарностей: 2

Slaviation

Коллеги, добрый день.
Прошу пользователей КОМПАС-3D V15.x поделиться файлами SDK\Include\ksConstants.h и ksConstants3D или LDefin2D.pas и LDefin3D.pas.
Спасибо.

Файлы во вложении.
+ Благодарностей: 1

Slaviation

05.03.19, 08:24:21 #51 Последнее редактирование: 05.03.19, 13:26:35 от Slaviation
Коллеги, добрый день.
Вопрос в топике https://forum.ascon.ru/index.php/topic,32155.0.html сподвиг добавить в очередную версию PyKompasMacro следующее:

1.2.17.34 от 05.03.2019
Создание технических требований в чертежах КОМПАС-3D.

1.2.16.33 от 05.03.2019
Добавлена поддержка создания форматированного текста в ячейках основной надписи. Для этого в файле conf / PyKompasMacro.ini нужно установить параметр FormattedTextInStamp = 1.

+ Благодарностей: 2

ALEXEY ZATEEV

скажите, а умеет ли pyKompasmacro записывать сплайн-кривые?

Slaviation

Цитироватьскажите, а умеет ли pyKompasmacro записывать сплайн-кривые?
Может.

Slaviation

1.2.20.38 от 18.04.2019
Создание массивов компонентов в документах КОМПАС-Сборка.
+ Благодарностей: 1

Slaviation

1.2.21.40 от 22.05.2019
Сохранение документов в формате pdf.
+ Благодарностей: 1

Solovey1873@mail.ru

12.07.19, 16:58:51 #56 Последнее редактирование: 12.07.19, 18:45:27 от Solovey1873@mail.ru
Как запустить макрос если его добавить в пользовательскую панель инструментов(тут на форуме програма) Подскажите как запустить макрос без вашей проги. Спс

Slaviation

1.2.22.42 от 19.07.2019
Добавлена возможность перетаскивания панели PyKompasMacro при нажатой правой клавише мыши.
+ Благодарностей: 2

Slaviation

1.4.27.54 от 15.01.2020
Добавлено сохранение позиции и прозрачность панели PyKompasMacro.

pampam

В описаниях версий нашёл, что программа умеет:
"Добавление в КОМПАС-Сборку компонентов, локальных деталей, деталей-заготовок."
Может ли программа перемещать и поворачивать Компас-Детали в КОМПАС-Сборке?