public static void RoundOffPoints()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
double accuracy = SelectionUtilities.GetNumParameter("Set desired accuracy");
using (Transaction tr = db.TransactionManager.StartTransaction())
{
Point2dCollection point2DCollection = null;
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite);
foreach (ObjectId btrId in bt)
{
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForWrite);
if (btr.IsFromExternalReference)
{
continue;
}
foreach (ObjectId id in btr)
{
Entity ent = (Entity)tr.GetObject(id, OpenMode.ForWrite, false, true);
if (ent is Polyline)
{
Polyline pline = (Polyline)ent;
point2DCollection = CoordinatesNormalizer.VerticesToCollection(pline);
Point2dCollection normVertices = CoordinatesNormalizer.NormalizePoint(accuracy, point2DCollection);
for (int i = 0; i < normVertices.Count; i++)
{
pline.SetPointAt(i, normVertices[i]);
}
}
if (ent is Line)
{
Line line = (Line)ent;
point2DCollection = CoordinatesNormalizer.VerticesToCollection(line);
Point2dCollection normVertices = CoordinatesNormalizer.NormalizePoint(accuracy, point2DCollection);
line.StartPoint = new Point3d(normVertices[0].X, normVertices[0].Y, 0);
line.EndPoint = new Point3d(normVertices[1].X, normVertices[1].Y, 0);
}
if (ent is BlockReference)
{
BlockReference bref = (BlockReference)ent;
Point3d newPoint3D = CoordinatesNormalizer.NormalizePoint(accuracy,bref.Position);
Matrix3d displacement = Matrix3d.Displacement(new Vector3d(newPoint3D.X-bref.Position.X, newPoint3D.Y - bref.Position.Y, 0));
bref.TransformBy(displacement);
}
}
}
tr.Commit();
}
ed.Regen();
}