| McNeel Wiki | |||||
| edit · print · help · all topics | |||||
Main Pages
Languages
| QuestionI would like to create aligned dimensions from my plug-in but I am not sure how. Can you help? AnswerThere are two ways you can create aligned dimensions. You can use the MArgsRhinoDimLinear class and the RhinoGetDimLinear function to interactively create a MRhinoLinearDimension object. Or, if you know the dimension points in advance, just create the MRhinoLinearDimension object by hand. To interactivly create an aligned dimension, you can do something like the following: C#
public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
{
MArgsRhinoDimLinear args = new MArgsRhinoDimLinear();
args.SetFirstPointPrompt( "First dimension point" );
args.SetSecondPointPrompt( "Second dimension point" );
args.SetDragPointPrompt( "Dimension location" );
args.SetStyle( IArgsRhinoDimLinear.eStyle.aligned );
args.SetIsInteractive( context.IsInteractive() ? true : false );
MRhinoLinearDimension dim = new MRhinoLinearDimension();
IRhinoCommand.result rc = RhUtil.RhinoGetDimLinear( ref args, out dim );
if (rc == IRhinoCommand.result.success)
{
context.m_doc.AddObject( dim );
context.m_doc.Redraw();
}
return rc;
}
If you know the dimension points in advance, you can create an aligned dimension by hand as follows: C#
public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
{
// Get the active view
MRhinoView view = RhUtil.RhinoApp().ActiveView();
if (view == null)
return IRhinoCommand.result.failure;
// Our hard-coded 3-D dimension points
On3dPoint p0 = new On3dPoint(1, 1, 0);
On3dPoint p2 = new On3dPoint(11, 11, 0);
On3dPoint pt = new On3dPoint((p2.x-p0.x)/2.0, 3, 0);
// Calculate the dimension plane
OnPlane plane = new OnPlane(view.ActiveViewport().ConstructionPlane().m_plane);
plane.SetOrigin(p0);
// Calculate rotation angle
double[] u = new double[2] { 0.0, 0.0 };
double[] v = new double[2] { 0.0, 0.0 };
plane.ClosestPointTo(p0, ref u[0], ref v[0]);
plane.ClosestPointTo(p2, ref u[1], ref v[1]);
On2dVector angle = new On2dVector(u[1]-u[0], v[1]-v[0]);
angle.Unitize();
// Rotate the plane
plane.Rotate(angle.y, angle.x, plane.Normal());
// Create new linear (aligned) dimension
MRhinoLinearDimension dim = new MRhinoLinearDimension();
dim.m_linear_dimension.m_type = IOn.eAnnotationType.dtDimAligned;
// Set the dimension plane
dim.SetPlane(plane);
// Set the first plane-based point
dim.SetPoint(0, new On2dPoint(0.0, 0.0));
// Set the second plane-based point
double s = 0, t = 0;
plane.ClosestPointTo(p2, ref s, ref t);
dim.SetPoint(2, new On2dPoint(s, t));
// Set the remaining plane-based point
plane.ClosestPointTo(pt, ref s, ref t);
On2dPoint pt2d = new On2dPoint(s, t);
dim.UpdateDimPoints(ref pt2d);
// Calculate text location and format string
dim.UpdateText();
// Add to document
context.m_doc.AddObject( dim );
context.m_doc.Redraw();
return IRhinoCommand.result.success;
}
| ||||
| Last Modified [10/8/2008] rename · changes · history · subscriptions · references · file upload | |||||