Отредактировать Характерную линию

Автор Тема: Отредактировать Характерную линию  (Прочитано 9059 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 141
  • Карма: 3
Подскажите пожалуйста, как мне пройтись циклом по вершинам характерной линии и поменять координаты ее вершин. Может у кого есть небольшой фрагмент кода.

Оффлайн German

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Я такого не делал, но мне кажется, что надо "взорвать" - получить полилинию или 3D-полилинию.
Пройтись по вершинам получившегося объекта, и потом уже создать новую характерную линию.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Максим, рад видеть на форуме!  ;)
Что-то я не нашел сходу в NET API даже методов создания характерной линии. Есть подозрение, что для работы с ней нужно использовать COM API. По крайней мере, пример создания я нашел только для COM: http://adndevblog.typepad.com/infrastructure/2013/04/creating-featureline-using-com-api-iaecclandfeaturelines-addfrompolyline.html

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 141
  • Карма: 3
Да, спасибо, наверное так и придется сделать. Просто я надеялся что обойдусь без COM.

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 141
  • Карма: 3
Да, не все так просто оказалось. Разбил характерную линию, считал координаты вершин 3д полилинии. Когда снова стал создавать характерную линии из 3д полилинии он мне промежуточных точек надобавлял. И как их убрать не знаю. Если создавать характерную линию средствамли Civil 3d то там есть опция "Не вставлять промежуточные точки".

Оффлайн German

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Может это точки пересечений с другими характерными на этой площадке?!
Надо создавать на новой площадке.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Я попробовал в чистом чертеже - у меня никаких промежуточных точек нет.

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.  

Оффлайн German

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Судя по дальнейшему обсуждению - это чисто теоретический вариант, так как в случае отката приводит к Fatal Error и закрытию Civil 3D.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение