Я пробовал сделать так:В Custom Entity??? Если да, то в каком методе?
Ведь штриховка autocad не меняется при изменении MEASUREMENT.При изменении MEASUREMENT она не меняется, но если копировать её через буфер обмена в другой чертеж с другим MEASUREMENT, то тут и возникает ерунда...
но когда mode->isDragging(), то при определении переменной возникает fatal error в строкеА ты проверь чему у тебя в этом случае равно this->database(). Думаю, что NULL, т.к. твой примитив при Dragging не содержится в базе данных. Вероятно нужно смотреть на acdbCurDwg()->measurement();
Код - C++ [Выбрать]
AcDb::MeasurementValue mg = this->database()->measurement();
Не скажется ли такой вызов acdbCurDwg() на производительности, когда у меня будет тысяча таких объектов?Не смеши меня. acdbCurDwg() - это acdbHostApplicationServices()->workingDatabase - указатель в памяти на AcDbDatabase. По сравнению со всеми остальными операциями получение этого указателя настолько мизерная по времени операция...
Не скажется ли такой вызов acdbCurDwg() на производительности, когда у меня будет тысяча таких объектов?На производительности у тебя скажется создание штриховки при mode->isDragging(). Зачем тебе она тебе нужна в этот момент???
На производительности у тебя скажется создание штриховки при mode->isDragging(). Зачем тебе она тебе нужна в этот момент???Чтобы было красиво!
Вообще создавать штриховку в worldDraw/viewportDraw - это очень плохой метод (IMHO).А какой метод хороший? Я ,просто, лучшего, по своей неопытности, не придумал?
Чтобы было красиво!Я не знаю насколько у тебя сложный примитив и насколько сложный контур штриховки/масштаб штриховки. Если он достаточно сложный, а компьютер недостаточно производительный, то при перетаскивании объекта будет ужасные задержки. В таких случаях принято при перетаскивании рисовать контур (упрощать изображение).
А какой метод хороший? Я ,просто, лучшего, по своей неопытности, не придумал?Я думаю, что контур штриховки тебе известен заранее. Соотвественно ты можешь заранее создать примитив штриховки, а в worldDraw/viewportDraw его рисовать. Более того, после того как AutoCAD вызывает твой метод subViewportDraw/subWorldDraw штриховка должна оставаться, иначе можно развалить AutoCAD. Из документации:
Warning: When a custom entity implements subWorldDraw() or subViewportDraw(), and if a native entity (e.g., AcDbCircle) is created within the scope of the method, the native entity needs to exist beyond the method’s scope. The variable should be declared in a global or class level, or some level where the object is alive even after exiting the method.
Я не знаю насколько у тебя сложный примитивМой примитив это геологическая скважина в профиле. Состоит из внешнего контура и слоёв, заштрихованных каждый своим типом штриховки, ну и плюс всякое оформление.
Вся проблема в том, что я пока не знаю как правильно создавать и удалять динамические массивы объектов autocad на c++.Ну например, так:
Как я понял правильно будет в классе создать динамический массив с AcDHatch и работать с ним.Если у тебя только те штриховки, которые на рисунке (ну или еще аналогичное, но достаточно простые), то я бы на твоём месте вообще отказался от AcDbHatch и самостоятельно бы штриховал рисунок. Гибкости (IMHO) было бы больше.
Не хочется начинать новую тему, но назрел ещё один вопрос:А придётся. Создавай тему.