Hello...
Sorry to post similar topic again but didn't want my question to be confusing.
I want to add rectangles on regular interval on polyline. I am able to get 2 vertices that are on the selected polyline, thanks to the forum. But not able to draw remaining 2 vertices to form the rectangle.
Here is my code:
[CommandMethod("VT")]
static public void test()
{
var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
var ed = doc.Editor;
var db = HostApplicationServices.WorkingDatabase;
const double space = 200.0;
var length = 400.0;
var width = 50.0;
using (var tr = db.TransactionManager.StartTransaction())
{
var result = ed.GetEntity("Select a polyline:");
if (result.Status != PromptStatus.OK)
return;
var pline = (Polyline)tr.GetObject(result.ObjectId, OpenMode.ForRead);
var pt1 = pline.GetPoint3dAt(0);
var pt2 = pline.GetPoint3dAt(1);
var vec3D = (Vector3d)(pt2 - pt1);
var wpDistance = pt1.DistanceTo(pt2);
var spacingVector = vec3D.MultiplyBy(space / wpDistance);
var steps = (int)(wpDistance / space);
var pointList = new Point3dCollection();
for (var i = 1; i <= steps; i++)
{
var nextPoint = pt1.Add(spacingVector.MultiplyBy(i));
pointList.Add(nextPoint);
}
steps = (int)(wpDistance / width);
var sizeVector = vec3D.MultiplyBy(width / wpDistance);
var pointList2 = new List<Point3d>();
for (var i = 1; i <= steps; i++)
{
var nextPoint = pt1.Add(sizeVector.MultiplyBy(i));
pointList2.Add(nextPoint);
}
for (var i = 0; i < pointList.Count; i++)
{
var pt = pointList[i];
var index = pointList2.IndexOf(pointList2.FirstOrDefault(x => x == pt));
var endPt = pointList2[index + 1];
var polyline = new Polyline();
polyline.AddVertexAt(polyline.NumberOfVertices, new Point2d(pt.X, pt.Y), 0, 0, 0);
polyline.AddVertexAt(polyline.NumberOfVertices, new Point2d(endPt.X, endPt.Y), 0, 0, 0);
//I NEED TO ADD NEXT TWO VERTICES WITH 400 LENGTH TO FORM RECTANGLE ON THE EDGE OF SELECTED POLYLINE.
BlockManager.AddEntity(polyline);
}
tr.Commit();
}
}