.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

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

3 REPLIES 3
SOLVED
Reply
Message 1 of 4
dynamicscope
15713 Views, 3 Replies

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

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?

3 REPLIES 3
Message 2 of 4
dynamicscope
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?

Message 3 of 4

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();
      }
    }
  }
}

 

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Tags (2)
Message 4 of 4


@dynamicscope wrote:
Is that correct?

It is look like you skip last vertex...

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost