ADN Club > Civil 3D API

Клонирование FeatureLine

(1/8) > >>

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 …

Александр, сейчас попробую.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии