Буду бесконечно благодарен за написание на Delphi XE7 двух процедур - для задания значений системных и дополнительных свойств макроэлемента из массива и получения их в массив.
Для упрощения:
1. Количество и перечень свойств постоянны:
из системных свойств:
- Наименование;
- Обозначение;
дополнительные свойства:
- ФункцОбозначение;
- ПозицОбозначение;
- ТипСИА;
- ТипСигнала;
- Характеристика;
- Параметр;
2. Тип значений свойств - String.
Подробные коментарии приветствуются.
Подниму тему со своей просьбой - может кто-нибудь попробует мне помочь... ::)
Это вам в Автокад надо, там у блоков (макроэлементов) можно атрибуты задавать, получится как 2 пальца об асфальт.
Знаю. Мне в Компасе нужно...
В Компасе отсутствует это по определению.
Ну, почему же... Вот здесь http://forum.ascon.ru/index.php?topic=25273.new;topicseen#new обсуждалось, но для меня это слишком сложно. Мне бы готовую рабочую процедуру с одним-двумя свойствами с понятной структурой, чтобы самостоятельно добавлять нужные мне свойства.
Цитата: Маратович от 06.08.17, 15:03:35
Это вам в Автокад надо, там у блоков (макроэлементов) можно атрибуты задавать, получится как 2 пальца об асфальт.
Хорошо подумали? Или может надо сначала запустить Help в КОМПАСЕ и поискать там темы о атрибутах....
Например "Общие сведения об атрибутах".
Все в КОМПАСЕ есть в том что касается атрибутов - и в избытке....
Выделяем макрообъект или просто объект, далее ПКМ и Атрибуты...
Потом по этим атрибутам можно искать и вручную и программно естественно.
ЦитироватьВсе в КОМПАСЕ есть в том что касается атрибутов
Ну, не совсем все (по сравнению с Акадом), мне лично не хватает возможности делать атрибуты видимыми, но речь не о них.
Столько опытных пользователей и программистов, а помочь некому... :`(
Если про атрибуты, то
SDK\Samples\Pascal\Delphi\step8
Вашу задачу вполне можно решить с атрибутами. Сохранять их программно к макро, читать и так далее... в своем приложении.
Это будет проще. Ссылка на пример указанный выше все вам даст.
примерно так
Цитата: Golovanev от 06.08.17, 20:02:01
Вашу задачу вполне можно решить с атрибутами.
Спасибо, присмотрюсь.
Цитата: Маратович от 06.08.17, 20:13:28
примерно так
Спасибо, я это все знаю. Разговор о Компасе.
Цитата: Golovanev от 06.08.17, 20:02:01
Вашу задачу вполне можно решить с атрибутами.
Попробовал атрибуты. Не совсем то, что хотелось...
Все таки, нужны свойства - штатными средствами Компаса можно будет создавать различные отчеты. Да и в панели свойств сразу будет видна нужная инфо по выделенному макроэлементу.
Помогите, пожалуйста. :shu:
Цитата: psiv от 04.11.17, 09:15:31
Попробовал атрибуты. Не совсем то, что хотелось...
Все таки, нужны свойства - штатными средствами Компаса можно будет создавать различные отчеты. Да и в панели свойств сразу будет видна нужная инфо по выделенному макроэлементу.
Помогите, пожалуйста. :shu:
Как вариант обратится к представителям Компас, они с радостью создадут программу для вас. У нас начальство так делало для связки 1С с Компасом.
А вообще странно, вы столько времени мучаетесь над одним атрибутом, а что дальше будет ?
За это время я целую программу для этого в свет выпустил https://youtu.be/JTSJD9-VP28 (https://youtu.be/JTSJD9-VP28)
Спасибо за совет.
Искренне рад за вас!
Так может быть возьметесь написать для меня то, что я прошу?
Цитата: psiv от 04.11.17, 12:11:07
Искренне рад за вас!
Так может быть возьметесь написать для меня то, что я прошу?
И Вам спасибо.
Под Компас писать не буду, давно уже зубы пообламывал, много раз делал попытки, но там всё специально замудрили чтобы обращались только к разработчикам (нет логики в доступе). Да и как ранее я писал, то что Вам нужно там нет (по крайней мере всех нужных возможностей).
P.S. Сейчас мы используем связку Компас - Автокад. В Автокаде делаем 3Д, расчеты, автоматизацию, а потом если надо перекидываем виды в Компас, образмериваем и делаем спецификацию.
Подниму тему со своей просьбой - может теперь кто-нибудь попробует мне помочь..
Нужно не тему подымать, а что то делать, Вы не показали, что Вам нужно, что Вы сделали, что не получилось.
PS. Тоже макроэлемент сборки - https://www.youtube.com/watch?v=g9YSyPkPjBY&feature=youtu.be (https://www.youtube.com/watch?v=g9YSyPkPjBY&feature=youtu.be).
Спасибо, Борис Николаевич, за ответ.
В этой теме, верятно, эти подробности обсуждать не совсем уместно...
Мне нужно после создания макроэлемента назначить ему основные и дополнительные свойства.
Количество и перечень свойств постоянны:
из системных свойств:
- Наименование;
- Обозначение;
из дополнительных свойств:
- ФункцОбозначение;
- ПозицОбозначение;
- ТипСИА;
- ТипСигнала;
- Характеристика;
- Параметр;
Тип значений свойств - String.
Значеня брать из массива (предварительно будут получены из "SIA.xls" или диалога).
Я умею создавать макроэлемент. До создания свойств даже не знаю, как подступиться...
"По совету старших товарищей" (С) пробовал заполнять атрибуты макроэлемента, но мне не понравилось, писал выше.
Красивое видео, шикарные возможности...
Мне же нужна простая работающая процедура для добавления пары свойств макроэлементу при его создании в 2Д чертеже.
Да хотя бы одно, для образца, например, системное свойство "Наименование" (идентификатор 5).
Код на Python
# -*- coding: utf-8 -*-
# Добавление нового свойства выделенному макроэлементу
import pythoncom
from win32com.client import Dispatch, gencache
id_prop = 295566205320.0 # ID свойства "Маркировка"
# Подключим описание интерфейсов API5
KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = KAPI.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))
# Подключим описание интерфейсов API7
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
api = KAPI7.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(KAPI7.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
const = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants
iApplication = api.Application
iDocument = iApplication.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)
iKompasDocument2D1 = KAPI7.IKompasDocument2D1(iKompasDocument2D)
SelectionManager = iKompasDocument2D1.SelectionManager
SelectedObjects = SelectionManager.SelectedObjects
# интерфейс Менеджера свойств
iPropertyMng = KAPI7.IPropertyMng(iApplication)
# путь к системной папке
Path_SYS = iKompasObject.ksSystemPath(0)
# интерфейс свойства из библиотеки
iProperty_lib = iPropertyMng.GetProperty(Path_SYS + "\properties.lpt", id_prop)
# добавим свойство в документ
iProperty = iPropertyMng.AddProperty(iDocument, iProperty_lib)
# интерфейс получения/редактирования значения свойств
iPropertyKeeper = KAPI7.IPropertyKeeper(SelectedObjects)
# установим значение в базовых единицах измерения (СИ)
iPropertyKeeper.SetPropertyValue( iProperty, u'Значение свойства', True )
Спасибо большое, Игорь!
Буду пробовать применить Ваш код в Делфи...
Цитата: ТрындецЪ от 17.09.18, 10:07:16Код на Python
# -*- coding: utf-8 -*-
# Добавление нового свойства выделенному макроэлементу
import pythoncom
from win32com.client import Dispatch, gencache
id_prop = 295566205320.0 # ID свойства "Маркировка"
# Подключим описание интерфейсов API5
KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = KAPI.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))
# Подключим описание интерфейсов API7
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
api = KAPI7.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(KAPI7.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
const = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants
iApplication = api.Application
iDocument = iApplication.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)
iKompasDocument2D1 = KAPI7.IKompasDocument2D1(iKompasDocument2D)
SelectionManager = iKompasDocument2D1.SelectionManager
SelectedObjects = SelectionManager.SelectedObjects
# интерфейс Менеджера свойств
iPropertyMng = KAPI7.IPropertyMng(iApplication)
# путь к системной папке
Path_SYS = iKompasObject.ksSystemPath(0)
# интерфейс свойства из библиотеки
iProperty_lib = iPropertyMng.GetProperty(Path_SYS + "\properties.lpt", id_prop)
# добавим свойство в документ
iProperty = iPropertyMng.AddProperty(iDocument, iProperty_lib)
# интерфейс получения/редактирования значения свойств
iPropertyKeeper = KAPI7.IPropertyKeeper(SelectedObjects)
# установим значение в базовых единицах измерения (СИ)
iPropertyKeeper.SetPropertyValue( iProperty, u'Значение свойства', True )
Получается, что можно менять свойства одномоментно у группы объектов? Правильно понял?