Александр Ривилис, Спасибо за совет.Кстати, работает не без глюков и потом приходится кое-что править ручками - результат работы этого визарда у меня не компилировался, пока я не изменил/добал некоторые include'ы
1. в com_wrapper.h #define DISPID_NUMBER 0x01 соответствует propget, id(1), в idl могут ли данные id идти не по порядку или порядок обязателен?В смысле могут ли быть пропуски типа 1, 3, 5, 105, и т.д. ??? Могут. Более того есть зарезервированные AutoCAD'ом значения.
2. почему только два параметра присутствуют между BEGIN_OPMPROP_MAP() и END_OPMPROP_MAP() и зачем их там прописывать ?Вообще-то должно быть по одной записи на каждое свойство.
3 функции типа STDMETHOD(get_CenterPoint)/STDMETHOD(put_CenterPoint) необходимы для чтения и установки свойств но каким образом они присваиваются соответствующему свойству?Не понял вопроса. По OPMPROP_MAP они определяются, по номеру.
4. зачем нужны функции STDMETHOD(GetElementValue) и STDMETHOD(SetElementValue) могут ли они заменить отдельное создание put и get функций из пункта 3 для минификации написания кода ?Насколько я помню они используются для изменения значений в составных свойствах, типа массива (например, координата X для точки). Передается DispId и номер элемента массива - для точки от 0 до 2.
Цитата: Vitaut Tryputsin от 25-09-2018, 10:18:28Спасибо за ответ. Я имел ввиду почему именно функция put_CenterPoint является set методом свойства centerpoint а не к примеру функция put_centrpoint1, просто я не увидел где указатель на сеттер или геттер сопоставляется со свойством. Или сопоставление этих функций где-то внутри происходит по имени переменной?
3 функции типа STDMETHOD(get_CenterPoint)/STDMETHOD(put_CenterPoint) необходимы для чтения и установки свойств но каким образом они присваиваются соответствующему свойству?
Не понял вопроса. По OPMPROP_MAP они определяются, по номеру.
И еще один вопрос - можно ли к примеру наследовать класс обьекта от какого нибудь стандартного (Mleader к примеру) не переопределять его виртуальные методы subworldraw и тп - что бы он полностью сохранил функционал родителя в тч и свойства и добавить просто одно доп свойство и один сохраняемый параметр в базе автокада? (к примеру id Какого либо элемента)?Так просто не получится. Если это необходимо, то имеет смысл подумать не о Custom Entity, а о динамических свойствах.
Я имел ввиду почему именно функция put_CenterPoint является set методом свойства centerpoint а не к примеру функция put_centrpoint1, просто я не увидел где указатель на сеттер или геттер сопоставляется со свойством. Или сопоставление этих функций где-то внутри происходит по имени переменной?При компиляции AsdkSquareLib.idl получаются файлы AsdkSquareLib_i.c и AsdkSquareLib_i.h и соответственно для
Цитата: Vitaut Tryputsin от 25-09-2018, 11:49:18Я еще подумал что вроде можно и xdata использовать для записи каких то своих свойств и значений а потом при наличии динамических свойств их выводить. Я примерно правильно думаю?
И еще один вопрос - можно ли к примеру наследовать класс обьекта от какого нибудь стандартного (Mleader к примеру) не переопределять его виртуальные методы subworldraw и тп - что бы он полностью сохранил функционал родителя в тч и свойства и добавить просто одно доп свойство и один сохраняемый параметр в базе автокада? (к примеру id Какого либо элемента)?
Так просто не получится. Если это необходимо, то имеет смысл подумать не о Custom Entity, а о динамических свойствах.
Я еще подумал что вроде можно и xdata использовать для записи каких то своих свойств и значений а потом при наличии динамических свойств их выводить. Я примерно правильно думаю?Да. Я попробую сделать пример. Если речь идёт о свойстве для AcDbMLeader, то какое именно дополнительное свойство ты хотел бы сделать?
Да. Я попробую сделать пример. Если речь идёт о свойстве для AcDbMLeader, то какое именно дополнительное свойство ты хотел бы сделать?Спасибо,Александр Ривилис, это было бы здорово. Ну для мультивыноски к примеру текстовое поле формат. (это шаблон по которому будут вписывться данные). А так же в xdata хранить id элемента с которым связана мультивыноска. Предпологается что будет команда которая найдет все мои выноски и пересчитает тексовый месседж выносок используя присвоеный формат. И еще вопрос по дин свойствам они могут добавлятся к одному определенному классу примитивов или его можно на множество классов распространить (типо как общее свойство для нескольких классов)?
И еще вопрос по дин свойствам они могут добавлятся к одному определенному классу примитивов или его можно на множество классов распространить (типо как общее свойство для нескольких классов)?Его можно добавить к базовому классу, общему для всех твоих классов (например, если добавить для AcDbCurve, то сработает и для AcDbLine, и для AcDbPolyline, и для AcDbArc и т.д.) А можно добавить для AcDbEntity и управлять его появлением в OPM и выводимым значением в зависимости от того, что выбрано.
Ну для мультивыноски к примеру текстовое поле формат. (это шаблон по которому будут вписывться данные).Это поле редактируется в панели свойств или только показывается?
Это поле редактируется в панели свойств или только показывается?Редактируется. - это что то меняет? - Если это можно реализовать но много возни просто напишите как я сам разберусь
Я для того, чтобы понять как ты с этим собираешься работать. А если выбрано несколько разных MLeader и у них эти поля разные? Или показывать и позволять редактировать только если выбран один MLeader? Там есть тоже куча нюансов.Это поле редактируется в панели свойств или только показывается?Редактируется. - это что то меняет? - Если это можно реализовать но много возни просто напишите как я сам разберусь
Я для того, чтобы понять как ты с этим собираешься работать. А если выбрано несколько разных MLeader и у них эти поля разные? Или показывать и позволять редактировать только если выбран один MLeader? Там есть тоже куча нюансов.Ну для такого случая я видел как автокад показывает свойство одного имени с разными значениями - в поле "значение" будет что то вроде *Разные* - и если задать какое-то конкретное - то это значение примениться ко всем обьектам. Тоесть я не думал о какой-то специальной логике.
1. Можно ли ли порядок отображения в окне свойств настраивать чтобы новые свойства были выше свойств TEXT?Нет. Этим управляет AutoCAD. Можно попробовать поиграться с именем категории. Возможно изменится порядок - я не проверял.
2. Можно ли в одном классе обьявлять несколько свойств?Нет. Один класс - одно свойство.
3. Я заметил в idl файле не прописываются геттеры и сеттеры как в случае с со статическими свойствами?Да. Всё в классе.
Нет. Один класс - одно свойство.Тоесть если надо создать несколько свойств - мы создаем несколько классов. А сгруппировать их в одной категории в итоге можно или в системную подсунуть в данном случае у вас есть категория "MLeadear - доп. свойства"? и там свойство "Текстовый формат"?
Тоесть если надо создать несколько свойств - мы создаем несколько классов.Да.
А сгруппировать их в одной категории в итоге можноДа.
Кажется сам нашел в примере что вы скинули, где l_unkn это IUnknown *Да. Альтернативный вариант: