• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    .NET

    Reply
    Valued Contributor
    Posts: 63
    Registered: ‎04-04-2012
    Accepted Solution

    How to iterate through Polyline3d vertices with "for" loop?

    102 Views, 3 Replies
    02-05-2013 01:00 AM

    I know I can use the following...

     

    ...
    Polyline3d pl3d = acEnt as Polyline3d;
    foreach (ObjectId id in pl3d)
    {
        PolylineVertex3d plv3d = tr.GetObject(id, OpenMode.ForRead) as PolylineVertex3d;
        Point3d p3d = plv3d.Position;
        ...
    }

     

    But I need to work with "for" loop.

    It seems "pl3d[i]" does not work.

     

    Is there other ways to iterate through Polyline3d vertices?

    Please use plain text.
    Valued Contributor
    Posts: 63
    Registered: ‎04-04-2012

    Re: How to iterate through Polyline3d vertices with "for" loop?

    02-05-2013 01:14 AM in reply to: dynamicscope

    Hmm....

     

    Looks like the following will do the job.

     

    Polyline3d pline3d = ent as Polyline3d;
    for (double i = 0; i < pline3d.EndParam; i = i + 1 )
    {
        Point3d p3d = pline3d.GetPointAtParameter(i);
    }

     Is that correct?

    Please use plain text.
    Moderator
    Alexander.Rivilis
    Posts: 1,168
    Registered: ‎04-09-2008

    Re: How to iterate through Polyline3d vertices with "for" loop?

    02-05-2013 01:39 AM in reply to: dynamicscope
    using System;
    using System.Linq;
    using Autodesk.AutoCAD.Runtime;
    using Autodesk.AutoCAD.ApplicationServices;
    using Autodesk.AutoCAD.DatabaseServices;
    using Autodesk.AutoCAD.Geometry;
    using Autodesk.AutoCAD.EditorInput;
    
    [assembly: CommandClass(typeof(Rivilis.CurveUtils))]
    
    namespace Rivilis
    {
      public class CurveUtils
      {
        [CommandMethod("ListPoly3D", CommandFlags.Modal)]
        public static void ListPoly3D()
        {
          Document doc = Application.DocumentManager.MdiActiveDocument;
          Editor ed = doc.Editor;
          PromptEntityOptions prCurv = new PromptEntityOptions("\nSelect Polyline3d: ");
          prCurv.SetRejectMessage("not a Polyline3d");
          prCurv.AddAllowedClass(typeof(Polyline3d), false);
          PromptEntityResult resCurv = ed.GetEntity(prCurv);
          if (resCurv.Status != PromptStatus.OK) return;
    
          using (Transaction tr = doc.TransactionManager.StartTransaction()) {
            Polyline3d pl3d = tr.GetObject(resCurv.ObjectId, OpenMode.ForRead) as Polyline3d;
            ObjectId[] verts = pl3d.Cast<ObjectId>().ToArray();
            ed.WriteMessage("\nNumber of vertexes: {0}", verts.Length);
            for (int i = 0; i < verts.Length; i++) {
              PolylineVertex3d vt = tr.GetObject(verts[i], OpenMode.ForRead) as PolylineVertex3d;
              if (vt != null) {
                ed.WriteMessage("\n[{0}] = {1}", i, vt.Position.ToString());
              }
            }
            tr.Commit();
          }
        }
      }
    }
    

     


    Пожалуйста не забывайте про Утвердить в качестве решения!Утвердить в качестве решения и Give Kudos!Баллы
    Please remember to Accept Solution!Accept as Solution and Give Kudos!Kudos

    Please use plain text.
    Moderator
    Alexander.Rivilis
    Posts: 1,168
    Registered: ‎04-09-2008

    Re: How to iterate through Polyline3d vertices with "for" loop?

    02-05-2013 01:57 AM in reply to: dynamicscope

    dynamicscope wrote:
    Is that correct?

    It is look like you skip last vertex...


    Пожалуйста не забывайте про Утвердить в качестве решения!Утвердить в качестве решения и Give Kudos!Баллы
    Please remember to Accept Solution!Accept as Solution and Give Kudos!Kudos

    Please use plain text.