Здравствуйте!
Скажите пожалуйста, есть ли способы программно сделать следующее!
Как из модели детали(сборки), узнать создан ли на него чертеж и если создан, то узнать имя файла чертежа?
Программно - получить от Сборки, Детали список "внешних файлов". В этом списке будут и чертежи...
Без программирования - через меню: Файл->Информация о документе->Внешние ссылки->Файлы чертежей...
Цитата: p3452 от 19.03.21, 12:12:02...
Без программирования - через меню: Файл->Информация о документе->Внешние ссылки->Файлы чертежей...
Это для какой версии К актуально? 8-) У себя в 15.2 не вижу подобного. :cl:
Цитата: IgorT от 19.03.21, 13:00:25Это для какой версии К актуально?
В v18 это уже было, за более ранние - не скажу.
Цитата: IgorT от 19.03.21, 13:00:25Это для какой версии К актуально? 8-) У себя в 15.2 не вижу подобного. :cl:
Да нет, есть.
Инфо о документе.png
Это-то есть... Не могу найти где же тут ссылка на оформленный по модели чертёж?
Цитата: p3452 от 19.03.21, 12:12:02Программно - получить от Сборки, Детали список "внешних файлов". В этом списке будут и чертежи...
Добрый день, большое спасибо!
Цитата: p3452 от 19.03.21, 12:12:02В этом списке будут и чертежи...
Смежный вопрос! В данном списке, показаны почти все типы документов кроме Спецификации (если мы говорим о модели сборки)
Не подскажете, возможно ли, программно, находясь в сборке, узнать имя файла СП, если она создана?
Да где же они там? :cl:
Не нахожу у себя в 15-ой версии....
Цитата: AlinaM от 22.03.21, 17:00:06Не подскажете, возможно ли, программно, находясь в сборке, узнать имя файла СП, если она создана?
- SpecificationDescriptions.Count > 0 - есть спецификация
- SpecificationDocumentName - Имя подключенного файла документа спецификации (!?)
Возможно, более опытные подскажут точнее!
Цитата: p3452 от 22.03.21, 21:08:52SpecificationDocumentName
метод возвращает пустое значение, хотя
SpecificationDescriptions.Count > 0
Добрый день.
Может список подключенных к объекту документов IProductDataManager::ObjectAttachedDocuments?
Цитата: Slaviation от 23.03.21, 13:23:45IProductDataManager
осталось только узнать, как получить объект
IProductDataManager :w:
От IKompasDocument.
Господа! Покажите, пожалуйста, где-же в модели находятся ссылки на оформленные с неё чертежи. Для К15.2
Не получается найти :%:
Благодаря подсказке опытных:
/// C#: Список подключенных документов Сборки
string availAttachFile(IKompasDocument pDoci)
{
if (pDoci == null) return "ER: pDoci == null";
IKompasDocument3D doci3D = kompasApp.ActiveDocument as IKompasDocument3D;
if (doci3D == null) return "ER: doci3D == null";
IPart7 part7 = doci3D.TopPart;
if (part7 == null) return "ER: part7 == null";
IProductDataManager productDataMenager = pDoci as IProductDataManager;
if (productDataMenager == null) return "ER: productDataMenager == null";
dynamic arrAttachDoc = productDataMenager.ObjectAttachedDocuments[(IPropertyKeeper)part7];
string st = "";
int nom = 0;
if (arrAttachDoc != null)
foreach (var tDoc in arrAttachDoc)
st = st+ (++nom).ToString()+ " : ["+ tDoc.ToString()+ "]\n";
//MessageBox.Show("Список подключенных документов:\n"+ st);
return st;
}
Цитата: p3452 от 24.03.21, 05:58:21Благодаря подсказке опытных:
Большое спасибо!
Подскажите, пожалуйста, решаема ли обратная задача!
Т.е., можно ли удалить ссылки на чертежи из модели?
Да это возможно, если этот вопрос еще актуален, могу написать, как это сделать.
Цитата: Slaviation от 23.03.21, 13:23:45Может список подключенных к объекту документов
Очень хочется увидеть это в столбце Тотала и по ним отсортировать/искать. Как вывести и возможно заменить из изменения атрибутов?
Может доработаете плагин свой?
Цитата: Михаил88 от 21.06.21, 13:11:46Да это возможно, если этот вопрос еще актуален, могу написать, как это сделать.
Интересно посмотреть
Как можно удалить и добавить чертежи и спецификации к 3Д модели?
Цитата: KrissKross от 09.09.21, 18:09:53Интересно посмотреть
Как можно удалить и добавить чертежи и спецификации к 3Д модели?
Интерфейс IProductDataManager (Менеджер Дерева СЧИ). Метод DeleteProductObject - Удалить объект из дерева СЧИ по идентификатору.
Благодарю
но пару уточняющих вопросов
Во первых что это за такое Дерево СЧИ
Во вторых загадочный Интерфейс IProductDataManager - работает и для чертежей и для спецификаций
и получается вообще для любых файлов - т.е. сбылась мечта идиота - мы можем прикреплять к файлу ссылки на произвольные документы
Желательно привести код - по добавлению и удалению - чертежей и спецификаций
с наскока не понятно, много входных параметров неизвестного происхождения
P.S.
Сейчас проверил в ручную в самом Компасе
во первых добавление связанных чертежей и спецификаций происходит разными командами
и при этом нельзя добавлять произвольные файлы, кроме cdw и spw
Я это использовал только для удаления привязанных чертежей и спецификаций. Которые можно посмотреть в Управление связанными чертежами и спецификациями. В некоторых случаях очень сильно помогает ускорить работу компаса.
удаление связаных СП и чертежей.rar
Благодарю!
Цитата: p3452 от 24.03.21, 05:58:21Благодаря подсказке опытных:
/// C#: Список подключенных документов Сборки
string availAttachFile(IKompasDocument pDoci)
{
if (pDoci == null) return "ER: pDoci == null";
IKompasDocument3D doci3D = kompasApp.ActiveDocument as IKompasDocument3D;
if (doci3D == null) return "ER: doci3D == null";
IPart7 part7 = doci3D.TopPart;
if (part7 == null) return "ER: part7 == null";
IProductDataManager productDataMenager = pDoci as IProductDataManager;
if (productDataMenager == null) return "ER: productDataMenager == null";
dynamic arrAttachDoc = productDataMenager.ObjectAttachedDocuments[(IPropertyKeeper)part7];
string st = "";
int nom = 0;
if (arrAttachDoc != null)
foreach (var tDoc in arrAttachDoc)
st = st+ (++nom).ToString()+ " : ["+ tDoc.ToString()+ "]\n";
//MessageBox.Show("Список подключенных документов:\n"+ st);
return st;
}
Подскажите пожалуйста как получить доступ к интерфейсу IProductDataManager?
У меня к проекту поключены следующие библиотеки: Interop.Kompas6API5.dll, Interop.Kompas6Constants.dll, Interop.Kompas6Constants3D, Interop.KompasAPI7. Но в них нет описания для IProductDataManager. Компилятор не знает что это такое.
Скажите какую библиотеку нужно подключить, чтобы появилось описание интерфейса IProductDataManager?
Отбой, я просто использовал старую версию библиотеки Interop.KompasAPI7... :embarrassed:
Добрый день.
# -*- coding: utf-8 -*-
#~ Есть сборка с присоединенным к ней чертежом.
#~ В сборке есть деталь с присоединенным чертежом.
#~ Тест определяет чертежи, присоединенные и к сборке и к вставке детали.
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT
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
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument
# Документы, присоединенные к сборке
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
product_data_manager = kompas_api7_module.IProductDataManager(kompas_document_3d)
product_objects = product_data_manager.ProductObjects(kompas6_constants.ksPOTEmbodimentsObject)
attached_documents = product_data_manager.ObjectAttachedDocuments(product_objects)
print(attached_documents)
# Документы, присоединенные к вставке детали
part7 = kompas_document_3d.TopPart.PartsEx(kompas6_constants_3d.ksAllParts)[0]
property_keeper = kompas_api7_module.IPropertyKeeper(part7)
attached_documents = product_data_manager.ObjectAttachedDocuments(property_keeper)
print(attached_documents)
Здравствуйте.
А как все-таки присоединить документ-чертеж к модели детали или сборки?
По предоставленному коду в посте #23 уважаемого Михаила88 (спасибо вам за него) отвязал ошибочный чертеж от детали.
А как теперь привязать нужный?
В iProductDataManager наряду с DeleteProductObject, используемого в упомянутом коде, есть также AddProductObject.
В SDK сказано, что метод добавляет объект дерева СЧИ по идентификатору и имеет такой синтаксис:
LPDISPATCH AddProductObject( IPropertyKeeper * Parent, BSTR Name, ksProductObjectTypeEnum ObjectType );
Я попробовал такую команду:
iProductDataManager.AddProductObject(IPropertyKeeper,"C:\\путь\\до\\чертежа\\Чертеж.cdw",1)
В ответ однако не получил, True, а получил что-то типо:
<win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.IPropertyKeeper instance at 0x2076879937984>
Но ничего не добавилось и iProductDataManager.ObjectAttachedDocuments(iPropertyKeeper) выдает пустой tuple: ('',)
Подскажите, пожалуйста, это именно тот метод, который может привязать чертеж к модели, и если да, то что правильно пишется в качестве параметров в скобках?
Цитата: KrissKross от 09.09.21, 19:48:14получается вообще для любых файлов - т.е. сбылась мечта идиота - мы можем прикреплять к файлу ссылки на произвольные документы
По секрету скажу, в любой фаил любого формата можно вставить сколько хочешь файлов и они там будут. Но не связанных и ссылки на них не сделать.
Цитата: Slaviation от 22.11.21, 07:21:14Добрый день.
# -*- coding: utf-8 -*-
#~ Есть сборка с присоединенным к ней чертежом.
#~ В сборке есть деталь с присоединенным чертежом.
#~ Тест определяет чертежи, присоединенные и к сборке и к вставке детали.
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT
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
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument
# Документы, присоединенные к сборке
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
product_data_manager = kompas_api7_module.IProductDataManager(kompas_document_3d)
product_objects = product_data_manager.ProductObjects(kompas6_constants.ksPOTEmbodimentsObject)
attached_documents = product_data_manager.ObjectAttachedDocuments(product_objects)
print(attached_documents)
# Документы, присоединенные к вставке детали
part7 = kompas_document_3d.TopPart.PartsEx(kompas6_constants_3d.ksAllParts)[0]
property_keeper = kompas_api7_module.IPropertyKeeper(part7)
attached_documents = product_data_manager.ObjectAttachedDocuments(property_keeper)
print(attached_documents)
спасибо, а как лучше сделать если нужно копнуть глубже чем топ уровень?
Код C# для добавления чертежа к 3Д модели
string drawing = @"H:\Test\Чертеж.cdw";
IPropertyKeeper propertyKeeper = part7 as IPropertyKeeper;
IProductDataManager productDataManager = document3d as IProductDataManager;
productDataManager.set_ObjectAttachedDocuments(propertyKeeper, drawing);
уточнение для Python
метод называется немного по другому - SetObjectAttachedDocuments
и да в справке описание данного метода НЕТ
может данная возможность на бета-тестировании или просто забыли внести описание
Огромная благодарность Михаил88 за содействие
Цитата: KrissKross от 02.03.22, 19:45:29Код C# для добавления чертежа к 3Д модели
string drawing = @"H:\Test\Чертеж.cdw";
IPropertyKeeper propertyKeeper = part7 as IPropertyKeeper;
IProductDataManager productDataManager = document3d as IProductDataManager;
productDataManager.set_ObjectAttachedDocuments(propertyKeeper, drawing);
уточнение для Python
метод называется немного по другому - SetObjectAttachedDocuments
и да в справке описание данного метода НЕТ
может данная возможность на бета-тестировании или просто забыли внести описание
Огромная благодарность Михаил88 за содействие
- В четырех строчках кода, три разных интерфейса!?
- В Справке описание метода, есть (ObjectAttachedDocuments).
- Для C# метод такой же как и для Python (ObjectAttachedDocuments).
- Для Ваших переменных код будет такой:
productDataMenager.ObjectAttachedDocuments[propertyKeeper] = drawing;
Цитата: p3452 от 03.03.22, 11:41:07- Для C# метод такой же как и для Python (ObjectAttachedDocuments).
на python так не работает
надо так
# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache
# Подключим описание интерфейсов 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)
iPart7 = kompas_document_3d.TopPart
iPropertyKeeper = kompas_api7_module.IPropertyKeeper(iPart7)
iProductDataManager = kompas_api7_module.IProductDataManager(kompas_document)
iProductDataManager.SetObjectAttachedDocuments(iPropertyKeeper, ('C:\\Users\\User\\Desktop\\Чертеж.cdw',
'C:\\Users\\User\\Desktop\\Чертеж111.cdw',))
можно привязывать 1 или несколько документов. В данном примере привязка 2 чертежей (просто пример)
to p3452
подтверждаю, код - работает
productDataMenager.ObjectAttachedDocuments[propertyKeeper] = drawing;
чтобы до конца понять новый интерфейс IProductDataManager
может кто прояснит в общем и в частностях
Как расшифровывается - дерево СЧИ?
и объяснит все свойства интерфейса, а то гляжу в книгу и вижу фигу
Geometry - Список подключенных документов
MetaProductInfo - Метаданные дерева СЧИ
...
ReferenceDataInfo - Справочные данные свойства
С уважением!
Цитата: KrissKross от 03.03.22, 14:19:34Как расшифровывается - дерево СЧИ?
Может быть менеджер дерева составных частей изделия
Цитата: KrissKross от 03.03.22, 14:19:34и объяснит все свойства интерфейса, а то гляжу в книгу и вижу фигу
Geometry - Список подключенных документов
MetaProductInfo - Метаданные дерева СЧИ
...
ReferenceDataInfo - Справочные данные свойства
нужно просто взять и поэкспериментировать с методами и свойствами этого интерфейса. Я каких то подробных описаний не находил.
Цитата: KrissKross от 03.03.22, 14:19:34Как расшифровывается - дерево СЧИ?
Тоже хотелось бы знать... - нет расшифровки ни в документации ни в Справке!?
Цитата: Михаил88 от 03.03.22, 14:41:50Может быть менеджер дерева составных частей изделия
Это точно?
- Это опять к вопросу об адекватности Интерфейса Компас-а, т.к. согласно этому самому "интерфейсу" у Компаса есть всего ЧЕТЫРЕ вида "дерева":
- История построения (называется "Дерево")
- Структурное представление (называется "Дерево: структура")
- Исполнение (называется "Дерево: исполнения")
- Зоны (называется "Дерево: зоны")
???
Здравствуйте!
Запускаю макрос (на основе из поста №23) в Компас 21 (21.0.6):
# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache
# Подключим описание интерфейсов 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)
iPart7 = kompas_document_3d.TopPart
iPropertyKeeper = kompas_api7_module.IPropertyKeeper(iPart7)
iProductDataManager = kompas_api7_module.IProductDataManager(kompas_document)
ObjectAttachedDocuments1 = iProductDataManager.ObjectAttachedDocuments(iPropertyKeeper)
print(ObjectAttachedDocuments1)
UniqueMetaObjectKey = iPropertyKeeper.UniqueMetaObjectKey
print(UniqueMetaObjectKey)
print(iProductDataManager.DeleteProductObject(UniqueMetaObjectKey))
ObjectAttachedDocuments2 = iProductDataManager.ObjectAttachedDocuments(iPropertyKeeper)
print(ObjectAttachedDocuments2)
1. В строке
ObjectAttachedDocuments1 = iProductDataManager.ObjectAttachedDocuments(iPropertyKeeper)
получаю пустой список, хотя привязанные документы есть.
2. Попробовал получать iPropertyKeeper от kompas_document_3d
iPropertyKeeper = kompas_api7_module.IPropertyKeeper(kompas_document_3d)
Список есть! Но в нем кроме привязанных документов еще вижу строку с именем файла самой модели (первым в списке). Хорошо, пусть будет так.
3. Далее
print(iProductDataManager.DeleteProductObject(UniqueMetaObjectKey))
возвращает true. Отлично, изменения прошли!
4. Смотрю список
ObjectAttachedDocuments2 = iProductDataManager.ObjectAttachedDocuments(iPropertyKeeper)
А он не пустой! Строка с именем файла модели исчезла, а все реально привязанные документы на месте и видны в компасе.
Вопрос: как правильно получать список привязанных файлов и удалять на них ссылки в КОМПАС 21? в 20 версии все прекрасно работает.
PS: до привязки файлов к модели еще не добрался, но предполагаю, что код от 20 версии тоже работать не будет