///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select object to move"); go.EnableSubObjectSelect(false); go.GetObjects(1, 1); if (go.CommandResult() != IRhinoCommand.result.success) { return(go.CommandResult()); } MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Point to move from"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) { return(gp.CommandResult()); } On3dPoint pointFrom = gp.Point(); gp.SetCommandPrompt("Point to move to"); gp.SetBasePoint(pointFrom); gp.DrawLineFromPoint(pointFrom, true); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) { return(gp.CommandResult()); } On3dPoint pointTo = gp.Point(); On3dVector dir = new On3dVector(pointTo - pointFrom); if (dir.IsTiny()) { return(IRhinoCommand.result.nothing); } OnXform xform = new OnXform(); xform.Translation(dir); MRhinoObjRef objectRef = go.Object(0); context.m_doc.TransformObject(ref objectRef, xform); context.m_doc.Redraw(); return(IRhinoCommand.result.success); }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { OnLine line = new OnLine(); OnPlane plane = new OnPlane(); MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Start of line"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) { return(gp.CommandResult()); } line.from = gp.Point(); plane = new OnPlane(RhUtil.RhinoActiveCPlane()); plane.SetOrigin(line.from); gp.SetCommandPrompt("End of line"); gp.Constrain(plane); gp.SetBasePoint(line.from); gp.DrawLineFromPoint(line.from, true); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) { return(gp.CommandResult()); } line.to = plane.ClosestPointTo(gp.Point()); if (!line.IsValid()) { return(IRhinoCommand.result.nothing); } SampleCsDrawArrowheadConduit conduit = new SampleCsDrawArrowheadConduit(plane, line, 1.0); conduit.Enable(); context.m_doc.Redraw(); MRhinoGetString gs = new MRhinoGetString(); gs.SetCommandPrompt("Press <Enter> to continue"); gs.AcceptNothing(); gs.GetString(); conduit.Disable(); context.m_doc.Redraw(); return(IRhinoCommand.result.success); }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select objects to move"); go.GetObjects(1, 0); if (go.CommandResult() != IRhinoCommand.result.success) { return(go.CommandResult()); } MRhinoXformObjectList list = new MRhinoXformObjectList(); if (list.AddObjects(go, true) < 1) { return(IRhinoCommand.result.failure); } MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Point to move from"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) { return(gp.CommandResult()); } RhinoGetTranslation gt = new RhinoGetTranslation(); gt.SetCommandPrompt("Point to move to"); gt.AppendObjects(list); gt.SetBasePoint(gp.Point()); gt.DrawLineFromPoint(gp.Point(), true); gt.GetXform(); if (gt.CommandResult() != IRhinoCommand.result.success) { return(gt.CommandResult()); } OnXform xform = new OnXform(); if (gt.CalculateTransform(gt.View().ActiveViewport(), gt.Point(), ref xform)) { // TODO: do object transformation here. } return(IRhinoCommand.result.success); }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { OnLine line = new OnLine(); OnPlane plane = new OnPlane(); MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Start of line"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) return gp.CommandResult(); line.from = gp.Point(); plane = new OnPlane(RhUtil.RhinoActiveCPlane()); plane.SetOrigin(line.from); gp.SetCommandPrompt("End of line"); gp.Constrain(plane); gp.SetBasePoint(line.from); gp.DrawLineFromPoint(line.from, true); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) return gp.CommandResult(); line.to = plane.ClosestPointTo(gp.Point()); if (!line.IsValid()) return IRhinoCommand.result.nothing; SampleCsDrawArrowheadConduit conduit = new SampleCsDrawArrowheadConduit(plane, line, 1.0); conduit.Enable(); context.m_doc.Redraw(); MRhinoGetString gs = new MRhinoGetString(); gs.SetCommandPrompt("Press <Enter> to continue"); gs.AcceptNothing(); gs.GetString(); conduit.Disable(); context.m_doc.Redraw(); return IRhinoCommand.result.success; }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select object to move"); go.EnableSubObjectSelect(false); go.GetObjects(1, 1); if (go.CommandResult() != IRhinoCommand.result.success) return go.CommandResult(); MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Point to move from"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) return gp.CommandResult(); On3dPoint pointFrom = gp.Point(); gp.SetCommandPrompt("Point to move to"); gp.SetBasePoint(pointFrom); gp.DrawLineFromPoint(pointFrom, true); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) return gp.CommandResult(); On3dPoint pointTo = gp.Point(); On3dVector dir = new On3dVector(pointTo - pointFrom); if (dir.IsTiny()) return IRhinoCommand.result.nothing; OnXform xform = new OnXform(); xform.Translation(dir); MRhinoObjRef objectRef = go.Object(0); context.m_doc.TransformObject(ref objectRef, xform); context.m_doc.Redraw(); return IRhinoCommand.result.success; }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select objects to move"); go.GetObjects(1, 0); if (go.CommandResult() != IRhinoCommand.result.success) return go.CommandResult(); MRhinoXformObjectList list = new MRhinoXformObjectList(); if (list.AddObjects(go, true) < 1) return IRhinoCommand.result.failure; MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Point to move from"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) return gp.CommandResult(); RhinoGetTranslation gt = new RhinoGetTranslation(); gt.SetCommandPrompt("Point to move to"); gt.AppendObjects(list); gt.SetBasePoint(gp.Point()); gt.DrawLineFromPoint(gp.Point(), true); gt.GetXform(); if (gt.CommandResult() != IRhinoCommand.result.success) return gt.CommandResult(); OnXform xform = new OnXform(); if (gt.CalculateTransform(gt.View().ActiveViewport(), gt.Point(), ref xform)) { // TODO: do object transformation here. } return IRhinoCommand.result.success; }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { // Step 1, select objects to include in the instance definition MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select objects to define block"); go.EnableReferenceObjectSelect(false); go.EnableSubObjectSelect(false); go.EnableGroupSelect(true); // Phantoms, grips, lights, etc., cannot be in instance definitions. uint forbidden_geometry_filter = (uint)(IRhinoGetObject.GEOMETRY_TYPE_FILTER.light_object | IRhinoGetObject.GEOMETRY_TYPE_FILTER.grip_object | IRhinoGetObject.GEOMETRY_TYPE_FILTER.phantom_object ); uint geometry_filter = forbidden_geometry_filter ^ (uint)IRhinoGetObject.GEOMETRY_TYPE_FILTER.any_object; go.SetGeometryFilter(geometry_filter); go.GetObjects(1, 0); if (go.CommandResult() != IRhinoCommand.result.success) { return(go.CommandResult()); } // Step 2, select base point MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Block base point"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) { return(gp.CommandResult()); } On3dPoint base_point = gp.Point(); // Step 3, get instance definition name MRhinoGetString gs = new MRhinoGetString(); gs.SetCommandPrompt("Block definition name"); gs.SetDefaultString(GetUnusedInstanceDefinitionName(context.m_doc)); gs.GetString(); if (gs.CommandResult() != IRhinoCommand.result.success) { return(gs.CommandResult()); } string idef_name = gs.String().Trim(); if (string.IsNullOrEmpty(idef_name)) { return(IRhinoCommand.result.nothing); } // Step 4, verify objects int found_index = context.m_doc.m_instance_definition_table.FindInstanceDefinition(idef_name); List <IRhinoObject> objects = new List <IRhinoObject>(); bool bQuietly = context.IsInteractive() ? false : true; for (int i = 0; i < go.ObjectCount(); i++) { IRhinoObject obj = go.Object(i).Object(); if (obj == null) { continue; } // Probably don't need to do this... if (0 != (forbidden_geometry_filter & (uint)obj.ObjectType())) { continue; } if (obj.ObjectType() == IOn.object_type.instance_reference) { IRhinoInstanceObject iref_obj = MRhinoInstanceObject.ConstCast(obj); if (iref_obj != null) { if (found_index >= 0 && iref_obj.UsesDefinition(found_index) > 0) { if (!bQuietly) { RhUtil.RhinoApp().Print("Unable to create block.\n"); } return(IRhinoCommand.result.failure); } } } objects.Add(obj); } // Step 5, create instance definition OnInstanceDefinition idef = new OnInstanceDefinition(); idef.SetName(idef_name); int idef_index = CreateInstanceDefinition(context.m_doc, idef, base_point, objects, bQuietly); if (idef_index < 0) { return(IRhinoCommand.result.failure); } // Step 6, create the instance reference OnXform xform = new OnXform(); xform.Translation(base_point - new On3dPoint(OnUtil.On_origin)); IRhinoInstanceObject inst_obj = context.m_doc.m_instance_definition_table.CreateInstanceObject(idef_index, xform); if (inst_obj != null) { inst_obj.Select(true); } else { if (!bQuietly) { RhUtil.RhinoApp().Print("Error creating block.\n"); } return(IRhinoCommand.result.failure); } // Step 7, delete existing geometry for (int i = 0; i < objects.Count; i++) { context.m_doc.DeleteObject(new MRhinoObjRef(objects[i])); } context.m_doc.Redraw(); return(IRhinoCommand.result.success); }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { // Step 1, select objects to include in the instance definition MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select objects to define block"); go.EnableReferenceObjectSelect(false); go.EnableSubObjectSelect(false); go.EnableGroupSelect(true); // Phantoms, grips, lights, etc., cannot be in instance definitions. uint forbidden_geometry_filter = (uint)(IRhinoGetObject.GEOMETRY_TYPE_FILTER.light_object | IRhinoGetObject.GEOMETRY_TYPE_FILTER.grip_object | IRhinoGetObject.GEOMETRY_TYPE_FILTER.phantom_object ); uint geometry_filter = forbidden_geometry_filter ^ (uint)IRhinoGetObject.GEOMETRY_TYPE_FILTER.any_object; go.SetGeometryFilter(geometry_filter); go.GetObjects(1, 0); if (go.CommandResult() != IRhinoCommand.result.success) return go.CommandResult(); // Step 2, select base point MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Block base point"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) return gp.CommandResult(); On3dPoint base_point = gp.Point(); // Step 3, get instance definition name MRhinoGetString gs = new MRhinoGetString(); gs.SetCommandPrompt("Block definition name"); gs.SetDefaultString(GetUnusedInstanceDefinitionName(context.m_doc)); gs.GetString(); if (gs.CommandResult() != IRhinoCommand.result.success) return gs.CommandResult(); string idef_name = gs.String().Trim(); if (string.IsNullOrEmpty(idef_name)) return IRhinoCommand.result.nothing; // Step 4, verify objects int found_index = context.m_doc.m_instance_definition_table.FindInstanceDefinition(idef_name); List<IRhinoObject> objects = new List<IRhinoObject>(); bool bQuietly = context.IsInteractive() ? false : true; for (int i = 0; i < go.ObjectCount(); i++) { IRhinoObject obj = go.Object(i).Object(); if (obj == null) continue; // Probably don't need to do this... if (0 != (forbidden_geometry_filter & (uint)obj.ObjectType())) continue; if (obj.ObjectType() == IOn.object_type.instance_reference) { IRhinoInstanceObject iref_obj = MRhinoInstanceObject.ConstCast(obj); if (iref_obj != null) { if (found_index >= 0 && iref_obj.UsesDefinition(found_index) > 0) { if (!bQuietly) RhUtil.RhinoApp().Print("Unable to create block.\n"); return IRhinoCommand.result.failure; } } } objects.Add(obj); } // Step 5, create instance definition OnInstanceDefinition idef = new OnInstanceDefinition(); idef.SetName(idef_name); int idef_index = CreateInstanceDefinition(context.m_doc, idef, base_point, objects, bQuietly); if (idef_index < 0) return IRhinoCommand.result.failure; // Step 6, create the instance reference OnXform xform = new OnXform(); xform.Translation(base_point - new On3dPoint(OnUtil.On_origin)); IRhinoInstanceObject inst_obj = context.m_doc.m_instance_definition_table.CreateInstanceObject(idef_index, xform); if (inst_obj != null) { inst_obj.Select(true); } else { if (!bQuietly) RhUtil.RhinoApp().Print("Error creating block.\n"); return IRhinoCommand.result.failure; } // Step 7, delete existing geometry for (int i = 0; i < objects.Count; i++) context.m_doc.DeleteObject(new MRhinoObjRef(objects[i])); context.m_doc.Redraw(); return IRhinoCommand.result.success; }