код попробовал. не то
, т.к. у каждой штриховки свой контур получается, но то лечится без каких-то особых заморочек. вопрос не в этом.
по поводу темы вопроса... эт да, погорячился. вечерком посидел дома, подумал... сейчас бы я назвал её слегка иначе, но можно было б получить взрыв мозга, переваривая настоящую тему вопроса
теперь по сути. скопировать объект внутри чертежа сам на себя можно несколькими способами:
- ent->clone(), а потом добавить в бд
- ent->copyFrom(), посути то же самое что и clone()
- ent->deepClone(), который не рекомендуется самим автодеском ибо даже они не знают, что получится на выходе
- AcDbDatabase::deepCloneObjects(), который гарантирует сохранение всех жестких и мягких
указателей
вот собственно из соображений лени и простоты кода, кто-то у нас выбрал лет 20 назад вариант с deepCloneObjects.
по поводу сохранения штриховки ассоциативной без всяких заморочек нужно просто выйти из нашей команды по ESC (из цикла).
и вот это как-раз и наталкивает на невеселые мысли. в чем собственно говоря отличие выхода из цикла по ECS или по Enter, если вцелом вся команда завершается одинаково?
я не поленился и нарисовал два контура со штриховками (каждая штриховка ассоциативна со своим контуром). провел тот же эксперимент. в итоге, если после создания двух новых штриховок нажать ECS, штриховки ассоциативные, если Enter - нет.
ну а теперь по поводу невеселых мыслей. такое чувство, что автокад сам создает транзакцию перед началом команды, и нажатие на ESC внутри команды не дает этой самой "внешней" транзакции коробить созданные объекты.
и вот мы подобрались к вопросу
. это тянет на глюк или я как-то не так понимаю механизм работы функции AcDbDatabase::deepCloneObjects()?