Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Биржа прикладных разработок => Тема начата: psiv от 27.11.16, 20:55:47

Название: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 27.11.16, 20:55:47
Буду бесконечно благодарен за написание на Delphi XE7 двух процедур - для задания значений системных и дополнительных свойств макроэлемента из массива и получения их в массив.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 28.11.16, 18:01:20
Для упрощения:
1. Количество и перечень свойств постоянны:
     из системных свойств:
     - Наименование;
     - Обозначение;
     дополнительные свойства:
     - ФункцОбозначение;
     - ПозицОбозначение;
     - ТипСИА;
     - ТипСигнала;
     - Характеристика;
     - Параметр;
2. Тип значений свойств - String.

Подробные коментарии приветствуются.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 05.08.17, 22:23:43
 Подниму тему со своей просьбой - может кто-нибудь попробует мне помочь...  ::)
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: Маратович от 06.08.17, 15:03:35
Это вам в Автокад надо, там у блоков (макроэлементов) можно атрибуты задавать, получится как 2 пальца об асфальт.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 06.08.17, 15:06:14
Знаю. Мне в Компасе нужно...
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: Маратович от 06.08.17, 15:32:49
В Компасе отсутствует это по определению.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 06.08.17, 15:49:10
Ну, почему же... Вот здесь http://forum.ascon.ru/index.php?topic=25273.new;topicseen#new обсуждалось, но для меня это слишком сложно. Мне бы готовую рабочую процедуру с одним-двумя свойствами с понятной структурой, чтобы самостоятельно добавлять нужные мне свойства.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: Golovanev от 06.08.17, 17:21:28
Цитата: Маратович от 06.08.17, 15:03:35
Это вам в Автокад надо, там у блоков (макроэлементов) можно атрибуты задавать, получится как 2 пальца об асфальт.

Хорошо подумали? Или может надо сначала запустить Help в КОМПАСЕ и поискать там темы о атрибутах....

Например "Общие сведения об атрибутах".

Все в КОМПАСЕ есть в том что касается атрибутов - и в избытке....

Выделяем макрообъект или просто объект, далее ПКМ и Атрибуты...

Потом по этим атрибутам можно искать и вручную и программно естественно.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 06.08.17, 19:53:21
ЦитироватьВсе в КОМПАСЕ есть в том что касается атрибутов
Ну, не совсем все (по сравнению с Акадом), мне лично не хватает возможности делать атрибуты видимыми, но речь не о них.
Столько опытных пользователей и программистов, а помочь некому... :`(
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: Golovanev от 06.08.17, 20:02:01
Если про атрибуты, то
SDK\Samples\Pascal\Delphi\step8

Вашу задачу вполне можно решить с атрибутами. Сохранять их программно к макро, читать и так далее... в своем приложении.
Это будет проще. Ссылка на пример указанный выше все вам даст.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: Маратович от 06.08.17, 20:13:28
примерно так
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 06.08.17, 20:38:56
Цитата: Golovanev от 06.08.17, 20:02:01
Вашу задачу вполне можно решить с атрибутами.
Спасибо, присмотрюсь.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 06.08.17, 20:39:44
Цитата: Маратович от 06.08.17, 20:13:28
примерно так
Спасибо, я это все знаю. Разговор о Компасе.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 04.11.17, 09:15:31
Цитата: Golovanev от 06.08.17, 20:02:01
Вашу задачу вполне можно решить с атрибутами.
Попробовал атрибуты. Не совсем то, что хотелось...
Все таки, нужны свойства - штатными средствами Компаса можно будет создавать различные отчеты. Да и в панели свойств сразу будет видна нужная инфо по выделенному макроэлементу.
Помогите, пожалуйста. :shu:
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: Маратович от 04.11.17, 10:07:45
Цитата: psiv от 04.11.17, 09:15:31
Попробовал атрибуты. Не совсем то, что хотелось...
Все таки, нужны свойства - штатными средствами Компаса можно будет создавать различные отчеты. Да и в панели свойств сразу будет видна нужная инфо по выделенному макроэлементу.
Помогите, пожалуйста. :shu:
Как вариант обратится к представителям Компас, они с радостью создадут программу для вас. У нас начальство так делало для связки 1С с Компасом.
А вообще странно, вы столько времени мучаетесь над одним атрибутом, а что дальше будет ?
За это время я целую программу для этого в свет выпустил https://youtu.be/JTSJD9-VP28 (https://youtu.be/JTSJD9-VP28)
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 04.11.17, 12:11:07
Спасибо за совет.
Искренне рад за вас!
Так может быть возьметесь написать для меня то, что я прошу?
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: Маратович от 04.11.17, 12:22:15
Цитата: psiv от 04.11.17, 12:11:07
Искренне рад за вас!
Так может быть возьметесь написать для меня то, что я прошу?
И Вам спасибо.
Под Компас писать не буду, давно уже зубы пообламывал, много раз делал попытки, но там всё специально замудрили чтобы обращались только к разработчикам (нет логики в доступе). Да и как ранее я писал, то что Вам нужно там нет (по крайней мере всех нужных возможностей).
P.S. Сейчас мы используем связку Компас - Автокад.  В Автокаде делаем 3Д, расчеты, автоматизацию, а потом если надо перекидываем виды в Компас, образмериваем и делаем спецификацию.
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 15.09.18, 07:40:13
 Подниму тему со своей просьбой - может теперь кто-нибудь попробует мне помочь..
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: Sabahs от 15.09.18, 10:48:47
Нужно не тему подымать, а что то делать, Вы не показали, что Вам нужно, что Вы сделали, что не получилось.
PS. Тоже макроэлемент сборки - https://www.youtube.com/watch?v=g9YSyPkPjBY&feature=youtu.be (https://www.youtube.com/watch?v=g9YSyPkPjBY&feature=youtu.be).
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 15.09.18, 14:06:42
Спасибо, Борис Николаевич, за ответ.
В этой теме, верятно, эти подробности обсуждать не совсем уместно...

Мне нужно после создания макроэлемента назначить ему основные и дополнительные свойства.
Количество и перечень свойств постоянны:
     из системных свойств:
     - Наименование;
     - Обозначение;
     из дополнительных свойств:
     - ФункцОбозначение;
     - ПозицОбозначение;
     - ТипСИА;
     - ТипСигнала;
     - Характеристика;
     - Параметр;
Тип значений свойств - String.
Значеня брать из массива (предварительно будут получены из "SIA.xls" или диалога).

Я умею создавать макроэлемент. До создания свойств даже не знаю, как подступиться...
"По совету старших товарищей" (С) пробовал заполнять атрибуты макроэлемента, но мне не понравилось, писал выше.
Красивое видео, шикарные возможности...
Мне же нужна простая работающая процедура для добавления пары свойств макроэлементу при его создании в 2Д чертеже.
Да хотя бы одно, для образца, например, системное свойство "Наименование" (идентификатор 5).
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: ТрындецЪ от 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 )
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: psiv от 17.09.18, 19:12:13
Спасибо большое, Игорь!
Буду пробовать применить Ваш код в Делфи...
Название: Re: Написать процедуры для задания и получения свойств макроэлемента
Отправлено: lavgirb от 06.12.23, 09:12:19
Цитата: ТрындецЪ от 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 )
Получается, что можно менять свойства одномоментно у группы объектов? Правильно понял?