using System;
using System.Linq;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
namespace SectionLedger
{
public class SectionLegderClass
{
[CommandMethod("11")]
public void SectionLedger()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
try
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable BT = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
TypedValue[] filterlist = new TypedValue[2];
filterlist[0] = new TypedValue(0, "INSERT");
filterlist[1] = new TypedValue(2, "blk3,blk2.5,blk2,blk1.5,blk1");
SelectionFilter filter = new SelectionFilter(filterlist);
PromptSelectionOptions opts = new PromptSelectionOptions();
opts.MessageForAdding = "Select entities: ";
PromptSelectionResult selRes = ed.GetSelection(opts, filter);
Point3d pt1 = new Point3d(0, 0, 0);
Point3d pt2 = new Point3d(0, 0, 0);
Point3dCollection acPts3dColl = new Point3dCollection();
if (selRes.Status != PromptStatus.OK)
{
ed.WriteMessage("\nNo ABC block references selected");
return;
}
if (selRes.Value.Count != 0)
{
SelectionSet set = selRes.Value;
NodeCount node = new NodeCount();
int nodeCount = node.nodeCount(set, tr);
ed.WriteMessage("\nnodeCount = " + nodeCount);
int blockCount = set.Count;
ed.WriteMessage("\nblockCount = " + blockCount);
int j = 0;
Point3d[] pos1 = new Point3d[blockCount * 6];
foreach (ObjectId id in set.GetObjectIds()) //scans every blocks
{
BlockReference oEnt = (BlockReference)tr.GetObject(id, OpenMode.ForRead);
string blockName = oEnt.Name;
if (blockName == "blk3")
{
pos1[j] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 190.5), 0);
pos1[j + 1] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 685.75), 0);
pos1[j + 2] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 1181.0), 0);
pos1[j + 3] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 1676.25), 0);
pos1[j + 4] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 2171.5), 0);
pos1[j + 5] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 2666.75), 0);
ed.WriteMessage("\npos1[" + j + "]" + pos1[j]);
ed.WriteMessage("\npos1[" + (j + 1) + "]" + pos1[j + 1]);
ed.WriteMessage("\npos1[" + (j + 2) + "]" + pos1[j + 2]);
ed.WriteMessage("\npos1[" + (j + 3) + "]" + pos1[j + 3]);
ed.WriteMessage("\npos1[" + (j + 4) + "]" + pos1[j + 4]);
ed.WriteMessage("\npos1[" + (j + 5) + "]" + pos1[j + 5]);
j = j + 6;
}
if (blockName == "blk2.5")
{
pos1[j] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 190.5), 0);
pos1[j + 1] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 685.75), 0);
pos1[j + 2] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 1181.0), 0);
pos1[j + 3] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 1676.25), 0);
pos1[j + 4] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 2171.5), 0);
ed.WriteMessage("\npos1[" + j + "]" + pos1[j]);
ed.WriteMessage("\npos1[" + (j + 1) + "]" + pos1[j + 1]);
ed.WriteMessage("\npos1[" + (j + 2) + "]" + pos1[j + 2]);
ed.WriteMessage("\npos1[" + (j + 3) + "]" + pos1[j + 3]);
ed.WriteMessage("\npos1[" + (j + 4) + "]" + pos1[j + 4]);
j = j + 5;
}
if (blockName == "blk2")
{
pos1[j] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 190.5), 0);
pos1[j + 1] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 685.75), 0);
pos1[j + 2] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 1181.0), 0);
pos1[j + 3] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 1676.25), 0);
ed.WriteMessage("\npos1[" + j + "]" + pos1[j]);
ed.WriteMessage("\npos1[" + (j + 1) + "]" + pos1[j + 1]);
ed.WriteMessage("\npos1[" + (j + 2) + "]" + pos1[j + 2]);
ed.WriteMessage("\npos1[" + (j + 3) + "]" + pos1[j + 3]);
j = j + 4;
}
if (blockName == "blk1.5")
{
pos1[j] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 190.5), 0);
pos1[j + 1] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 685.75), 0);
pos1[j + 2] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 1181.0), 0);
ed.WriteMessage("\npos1[" + j + "]" + pos1[j]);
ed.WriteMessage("\npos1[" + (j + 1) + "]" + pos1[j + 1]);
ed.WriteMessage("\npos1[" + (j + 2) + "]" + pos1[j + 2]);
j = j + 3;
}
if (blockName == "blk1")
{
pos1[j] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 190.5), 0);
pos1[j + 1] = new Point3d(oEnt.Position.X, (oEnt.Position.Y + 685.75), 0);
ed.WriteMessage("\npos1[" + j + "]" + pos1[j]);
ed.WriteMessage("\npos1[" + (j + 1) + "]" + pos1[j + 1]);
j = j + 2;
}
}
var sortedList = pos1.OrderBy(p => p.X).ThenBy(x => x.Y).ToArray();
for (int i = 0; i < nodeCount; i++)
{
ed.WriteMessage("\nsortedList[" + i + "]" + sortedList[i]);
}
tr.Commit();
}
}
}
catch (System.Exception ex)
{
ed.WriteMessage(ex.ToString());
}
}
}
}