Сообщество программистов Autodesk в СНГ

ADN Club => Civil 3D API => Тема начата: Захаров Максим от 08-04-2015, 11:39:27

Название: Отредактировать Характерную линию
Отправлено: Захаров Максим от 08-04-2015, 11:39:27
Подскажите пожалуйста, как мне пройтись циклом по вершинам характерной линии и поменять координаты ее вершин. Может у кого есть небольшой фрагмент кода.
Название: Re: Отредактировать Характерную линию
Отправлено: German от 08-04-2015, 12:17:14
Я такого не делал, но мне кажется, что надо "взорвать" - получить полилинию или 3D-полилинию.
Пройтись по вершинам получившегося объекта, и потом уже создать новую характерную линию.
Название: Re: Отредактировать Характерную линию
Отправлено: Дмитрий Загорулькин от 08-04-2015, 13:40:18
Максим, рад видеть на форуме!  ;)
Что-то я не нашел сходу в NET API даже методов создания характерной линии. Есть подозрение, что для работы с ней нужно использовать COM API. По крайней мере, пример создания я нашел только для COM: http://adndevblog.typepad.com/infrastructure/2013/04/creating-featureline-using-com-api-iaecclandfeaturelines-addfrompolyline.html
Название: Re: Отредактировать Характерную линию
Отправлено: Захаров Максим от 08-04-2015, 14:01:15
Да, спасибо, наверное так и придется сделать. Просто я надеялся что обойдусь без COM.
Название: Re: Отредактировать Характерную линию
Отправлено: Захаров Максим от 09-04-2015, 13:20:56
Да, не все так просто оказалось. Разбил характерную линию, считал координаты вершин 3д полилинии. Когда снова стал создавать характерную линии из 3д полилинии он мне промежуточных точек надобавлял. И как их убрать не знаю. Если создавать характерную линию средствамли Civil 3d то там есть опция "Не вставлять промежуточные точки".
Название: Re: Отредактировать Характерную линию
Отправлено: German от 09-04-2015, 13:47:44
Может это точки пересечений с другими характерными на этой площадке?!
Надо создавать на новой площадке.
Название: Re: Отредактировать Характерную линию
Отправлено: Дмитрий Загорулькин от 09-04-2015, 13:52:07
Я попробовал в чистом чертеже - у меня никаких промежуточных точек нет.

P.S. German дело говорит  8)

http://autode.sk/1PniS5F

Код - C# [Выбрать]
  1. using Autodesk.AECC.Interop.Land;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Interop;
  6. using Autodesk.AutoCAD.Runtime;
  7.  
  8. namespace CivilTest
  9. {
  10.     public class CreateFeatureLine
  11.     {
  12.         [CommandMethod("CreateFeatureLineTest")]
  13.         public void CreateRun()
  14.         {
  15.             Document adoc = Application.DocumentManager.MdiActiveDocument;
  16.             Editor ed = adoc.Editor;          
  17.             using (Transaction trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
  18.             {
  19.                 try
  20.                 {
  21.                     IAcadApplication oAcadApp = (IAcadApplication)Application.AcadApplication;
  22.                     dynamic oAeccApp = oAcadApp.GetInterfaceObject("AeccXUiLand.AeccApplication.10.3");
  23.                     dynamic oAeccDoc = oAeccApp.ActiveDocument;
  24.                     dynamic oAeccDB = oAeccApp.ActiveDocument.Database;
  25.  
  26.                     // Select the 3D Polyline which you want to convert to Feature Line
  27.  
  28.                     PromptEntityOptions promptEntOp = new PromptEntityOptions("\nSelect a 3D Polyline : ");
  29.                     PromptEntityResult promptEntRs = ed.GetEntity(promptEntOp);
  30.                     if (promptEntRs.Status != PromptStatus.OK)
  31.                     {
  32.                         ed.WriteMessage("Exiting! Try Again !");
  33.                         return;
  34.                     }
  35.                     ObjectId idEnt = promptEntRs.ObjectId;
  36.                     long plineObjId = (long)idEnt.OldIdPtr;
  37.  
  38.                     AeccLandFeatureLine oFtrLn = null;
  39.                     AeccLandFeatureLines oFtrLns = oAeccDoc.Sites.Item(0).FeatureLines;                    
  40.  
  41.                     oFtrLn = oFtrLns.AddFromPolyline(plineObjId, oAeccDB.FeatureLineStyles.Item(0));
  42.  
  43.                     trans.Commit();
  44.                 }
  45.                 catch (System.Exception ex)
  46.                 {
  47.                     ed.WriteMessage("Error : ", ex.Message);
  48.                 }
  49.             }
  50.         }
  51.  
  52.         //=======================================================
  53.         //Service provided by Telerik (www.telerik.com)
  54.         //Conversion powered by NRefactory.
  55.         //Twitter: @telerik
  56.         //Facebook: facebook.com/telerik
  57.         //=======================================================
  58.     }
  59. }
  60.  
Название: Re: Отредактировать Характерную линию
Отправлено: German от 14-04-2015, 03:24:38
Есть еще такой вариант, теоретически: http://forums.autodesk.com/t5/autocad-civil-3d-customization/civil3d-2016-net-api-comprehensive-featureline-functionality/m-p/5565183#M10178
Название: Re: Отредактировать Характерную линию
Отправлено: Александр Ривилис от 14-04-2015, 07:27:56
Судя по дальнейшему обсуждению - это чисто теоретический вариант, так как в случае отката приводит к Fatal Error и закрытию Civil 3D.