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

28/09/2016

Пример использования метода Curve.Extend

Вопрос:
Не нашел примера использования метода Curve.Extend. Подскажите, пожалуйста, как этот метод можно использовать для удлинения кривой.

Ответ:
Ниже приводится пример кода, который позволяет выбрать кривую для удлинения и граничную кривую, до которой будет выполнено удлинение:

Код - C#: [Выделить]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7.  
  8. #pragma warning disable 0618
  9.  
  10. [assembly: CommandClass(typeof(ExtendLine.MyCommands))]
  11.  
  12. namespace ExtendLine
  13. {
  14.   public class MyCommands
  15.   {
  16.     [CommandMethod("ExtendLine")]
  17.     public void MyCommand()
  18.     {
  19.       Document doc = Application.DocumentManager.MdiActiveDocument;
  20.       if (doc == null) return;
  21.       Editor ed = doc.Editor;
  22.       PromptEntityResult rs1 =
  23.         ed.GetEntity("\nВыберите кривую, которая будет продолжена: ");
  24.       if (rs1.Status != PromptStatus.OK) return;
  25.       if (!rs1.ObjectId.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(Curve)))) {
  26.         ed.WriteMessage("\nЭто не кривая!");
  27.         return;
  28.       }
  29.       PromptEntityResult rs2 =
  30.         ed.GetEntity("\nВыберите граничную кривую: ");
  31.       if (rs2.Status != PromptStatus.OK) return;
  32.       if (!rs2.ObjectId.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(Curve)))) {
  33.         ed.WriteMessage("\nIt is not a Curve");
  34.         return;
  35.       }
  36.       using (Curve cv1 = rs1.ObjectId.Open(OpenMode.ForWrite) as Curve)
  37.       using (Curve cv2 = rs2.ObjectId.Open(OpenMode.ForRead) as Curve) {
  38.         Point3dCollection pts = new Point3dCollection();
  39.         cv1.IntersectWith(cv2, Intersect.ExtendThis, pts, IntPtr.Zero, IntPtr.Zero);
  40.         if (pts.Count > 0) {
  41.           Point3d pStart = cv1.StartPoint;
  42.           Point3d pEnd = cv1.EndPoint;
  43.           Point3d p = pts[0];
  44.           double dist = Math.Min(p.DistanceTo(pStart), p.DistanceTo(pEnd));
  45.           bool bStart = (p.DistanceTo(pStart) < p.DistanceTo(pEnd));
  46.           for (int i = 1; i < pts.Count; i++) {
  47.             if (pts[i].DistanceTo(pStart) < dist) {
  48.               p = pts[i]; bStart = true;
  49.               dist = p.DistanceTo(pStart);
  50.             } else if (pts[i].DistanceTo(pEnd) < dist) {
  51.               p = pts[i]; bStart = false;
  52.               dist = p.DistanceTo(pEnd);
  53.             }
  54.           }
  55.           try {
  56.             cv1.Extend(bStart, p);
  57.           }
  58.           catch (Autodesk.AutoCAD.Runtime.Exception ex) {
  59.             ed.WriteMessage(ex.ToString());
  60.           }
  61.         }
  62.       }
  63.     }
  64.   }
  65. }

 

Видео использования команды EXTENDLINE:

Автор: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=7360

Опубликовано 28.09.2016