Мне нужно только чтобы пользователь не мог редактировать.
не совсем понятно, что значит редактировать. поменять слой, цвет, обрезать кусок объекта, скопировать, увеличит в 50 раз, вставить парочку вершин внутрь, взорвать, просто перетянуть целиком или несколько узловых точек? это ж всё редактирование. и не всё можно просто отключить программно. так что исходим из того, что нужен реактора на запрет модификации.
если упрощенно. есть dbx, есть управляющие реакторы на запрет редактирования, твои собственные.
a) пока всё это загружено в автокаде, пользователь ограничен в действиях (реакторы мешают)
выгружаем самостоятельно реакторы, ну или закончился период триальной версии (если проект коммерческий, такое может быть). всё. arx, dll, vlx и другое "подзащитное" выгрузилось из акада или перестало работать. а dbx НЕ выгрузился. автокад не даст его выгрузить, пока хоть один из загруженных чертежей его использует. вот и всё. теперь пользователь может редактировать объект в обход всех написанных ограничений. так понятней?
б) если чертеж открыли на компьютере, где НЕ установлено приложение. при грамотном программировании dbx, пользователь увидит объект, внешне ничем не отличающийся от оригинала (при неграмотном ничего не увидит, или увидит рамку с текстом
как в примерах objectarx), НО, это будет прокси объект, который не поддается НИКАКОЙ модификации вообще. (разве что удалить)
вариант Б подходит на 100% исходя из условия. отредактировать нельзя вообще.
вариант A нуждается в дополнительной проверке загруженности управляющих реакторов изнутри DBX. есть реакторы - ведем себя определенным образом, нет реакторов - изображаем из себя недотрогу
. но тут есть маааааленькая проблема. из DBX очень сложно достучаться до большинства arx-овых функций. чисто для примера, ну никак не выйдет попользоваться acedGet... и т.п. изнутрей dbx. так что первоначально нужно всё продумать, как что проверять. гараздо легче из dbx достучаться до файловой системы, чем до системных переменных автокада
PS: а если говорить в общем, то не совсем понятно, зачем нужен объект, который нельзя модифицировать
но очень нужно отображать его свойства в диспетчере свойств. как минимум прийдется ставить затычки на родные команды автокада, типа удлинить, обрезать, взорвать, скопировать,.... охохохохохохо. может растр вставить? он то точно не редактируется
Про остальное вышеизложенное, честно говоря, мне без хотя бы мало мальского примера в виде куска кода ничего не понятно.
и я так понимаю, что этот пример должен в себя включать именно нередактируемый объект?
увы. помочь разобраться в чужом коде могу. но вот писать что-то уж сильно лениво. а примеры просто custom объектов есть и в интернете и даже в arx2008 samples\smiley. ток начинающему пример из samples не сильно поможет, т.к. работает только в 2005 студии. портировать его хотя б в VS2008 настолько геморройно, что проще написать с нуля.
нашел у себя мануальчик по врапперам. подходит для создания dbx начиная с 2010 автокад и по сей день.
https://yadi.sk/d/vDq1tr4NdSeXR/* Переложил на наш ресурс (Александр Ривилис) */
Создание COM-wrapper (COM-оберток) для собственных примитивов (Custom Entity)