TheSwamp
Code Red => .NET => Topic started by: GEURT on November 16, 2011, 12:00:20 AM
-
Hi,
I am new here and have a question.
As background, I have written a couple of C# modules, one to write Civil 3D networks to Epanet input text files (.inp) and another to read Epanet output text files (.inp) to pipe networks inside Civil 3D.
Now the question, after I have created all the pipes and structures inside Civil 3D, I'd like to fire a ZoomExtends instruction and I cannot find a way to do that. Can someone please help with that?
Thanks
Geurt
-
/// <summary>
/// zoom to extents
/// </summary>
/// <param name="db">drawing database</param>
static public void ZoomExtents(Database db)
{
Document doc = AcadApp.DocumentManager.MdiActiveDocument;
Point3d max = db.Extmax;
Point3d min = db.Extmin;
Point2d max_2d = new Point2d(max.X, max.Y);
Point2d min_2d = new Point2d(min.X, min.Y);
ViewTableRecord view = new ViewTableRecord();
view.CenterPoint = (min_2d + (max_2d - min_2d) / 2.0);
view.Height = (max_2d.Y - min_2d.Y);
view.Width = (max_2d.X - min_2d.X);
doc.Editor.SetCurrentView(view);
db.UpdateExt(true);
}
[CommandMethod("ZE")]
public static void zoome()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
ZoomExtents(db);
}
-
Hi,
This one works whatever the view direction.
public static void ZoomExtents(this Editor ed, Database db)
{
using (ViewTableRecord view = ed.GetCurrentView())
{
Extents3d extents = new Extents3d(db.Extmin, db.Extmax);
Matrix3d WCS2DCS =
Matrix3d.Rotation(-view.ViewTwist, view.ViewDirection, view.Target) *
Matrix3d.Displacement(view.Target - Point3d.Origin) *
Matrix3d.PlaneToWorld(view.ViewDirection);
extents.TransformBy(WCS2DCS.Inverse());
Point2d center = new Point2d(
(extents.MinPoint.X + extents.MaxPoint.X) / 2.0,
(extents.MinPoint.Y + extents.MaxPoint.Y) / 2.0);
view.Height = (extents.MaxPoint.Y - extents.MinPoint.Y);
view.Width = (extents.MaxPoint.X - extents.MinPoint.X);
view.CenterPoint = center;
ed.SetCurrentView(view);
db.UpdateExt(true);
}
}
[CommandMethod("ze")]
public void ZoomExtentsCmd()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
doc.Editor.ZoomExtents(doc.Database);
}
-
Thanks a million and elegant as well. I was fideling in a totally different direction (interop area) and was walking into walls the whole time.
Cheers
Geurt
-
Okay got an "interop" version going as follows:
public static AcadDocument ThisDrawing
{
get
{
return (AcadDocument)Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.AcadDocument;
}
}
public static void ZoomExtents()
{
ThisDrawing.Application.ZoomExtents();
}
Cheers
Geurt
-
[catSkinning++]
And with SendStringToExecute
AcadApp.DocumentManager.MdiActiveDocument.SendStringToExecute("Zoom e\n", false, false, false);