ADN Club > Civil 3D API
Клонирование FeatureLine
Sergey Makarov:
Здравствуйте коллеги!
При клонировании характерной линии Civil 3D через FeatureLine fl = oFeatureline1.Clone() as FeatureLine; и добавлении в базу клонируемого объекта acBlkTblRec.AppendEntity(fl); ts.AddNewlyCreatedDBObject(fl, true); все прекрасно добавляется, но в при использование автокадовского Undo до самого конца списка команд удаляется не только клон характерной линии но и исходная характерная линия. Что я делаю не так и как справиться с данной проблемой?
--- Код - C# [Выбрать] ---[CommandMethod("MyGroup", "MyTest", "MyTestLocal", CommandFlags.Modal)]public void MyTest(){ var doc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; // Ask the user to select target feature line PromptEntityOptions opt1 = new PromptEntityOptions("\nВыберите целевую характерную линию:"); opt1.SetRejectMessage("\nВыбранный объект должен быть характерная линия Civil 3D ...\n"); opt1.AddAllowedClass(typeof(FeatureLine), false); PromptEntityResult ent1 = ed.GetEntity(opt1); if (ent1.Status != PromptStatus.OK) return; FeatureLine oFeatureline1 = null; using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()) { oFeatureline1 = ts.GetObject(ent1.ObjectId, OpenMode.ForRead) as FeatureLine; if (null != oFeatureline1) { FeatureLine fl = oFeatureline1.Clone() as FeatureLine; BlockTable acBlkTbl; acBlkTbl = ts.GetObject(Application.DocumentManager.MdiActiveDocument.Database.BlockTableId, OpenMode.ForRead) as BlockTable; // Open the Block table record Model space for write BlockTableRecord acBlkTblRec; acBlkTblRec = ts.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; acBlkTblRec.AppendEntity(fl); ts.AddNewlyCreatedDBObject(fl, true); } ts.Commit(); }}
/* Напоминаю про правило форматирования кода на форуме! Александр Ривилис */
Дмитрий Загорулькин:
На первый взгляд, вроде всё правильно. Возможно, что метод Clone реализован криво для характерной линии. Вообще, продвинутые "автокадовские" методы работы с объектами на "сивильных" объектах часто работают неадекватно.
Я бы проверил у себя, но мне надо уже собранную dll с этой командой. Собирать самому пока что сильно некогда.
Кстати, какая версия Civil 3D?
Код в сообщении лучше форматировать как код C#, читается гораздо лучше.
Александр Ривилис:
Sergey Makarov,
Попробуй клонирование при помощи Database.DeepCloneObjects
Алексей Терно:
Это функция клонирования для характерных линий кривая. У меня с клонированной характеркой вообще ничего сделать нельзя - при попытке сдвинуть (MOVE) сивил вылетает. Если переделать твой код для работы с трассами, то он работает корректно.
Как вариант - клонируй в ручную.
Sergey Makarov:
2019 учебная со всеми SP … после загрузки чертежа, в котором уже есть характерная линия в UNDO появляется каких-то две группы команд и если их предварительно откатить, то последующее выполнение команды и откат работают нормально. А если сразу выполнить команду, а потом откатить всё - то только по ВЫБРАТЬ можно найти характерную линию и ещё УЧАСТОК!!! )) но характерной линии не видно )))
Проверил в 2018-й, тоже учебной, вроде бы всё ОК … аннннет ))) после полного отката команда работает но визуально ничего не происходит … только по команде ВЫБРАТЬ ВСЁ, можно наблюдать в окне свойств, как прибавляется счётчик для характерных линий ))
Хоть бы что-нибудь прямо работало у Autodesk …
Александр, сейчас попробую.
Навигация
Перейти к полной версии