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 напрямую, а не добираясь до него через лабиринт, берущий начало от головного интерфейса.

ТрындецЪ

Цитата: 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.




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

ЦитироватьБез скобок - как свойство, а со скобками - как что?

Метод, принимающий список аргументов, даже если их нет.

ЦитироватьМожно ли попроще

Не знаю :(


Вират Лакх

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

Slaviation

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

Sabahs

Файлы во вложении.

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.


ALEXEY ZATEEV

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

Slaviation

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

Может.

Slaviation

1.2.20.38 от 18.04.2019
Создание массивов компонентов в документах КОМПАС-Сборка.

Slaviation

1.2.21.40 от 22.05.2019
Сохранение документов в формате pdf.

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 при нажатой правой клавише мыши.

Slaviation

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

pampam

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