/// <summary> /// Creates the layout. /// </summary> /// <param name="doc">The document.</param> /// <param name="panel">The panel.</param> /// <param name="panelParas">The panel paras.</param> /// <returns></returns> public Result createLayout(RhinoDoc doc, FoldedPerforationPanel panel, PanelParameters panelParas) { if (panelParas == null) { panelParas = new PanelParameters(); } if (panel == null) { panel = new FoldedPerforationPanel(); } // Get all selected Objects GetObject go = new GetObject(); go.GroupSelect = true; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); go.DeselectAllBeforePostSelect = false; go.EnableSelPrevious(true); go.EnablePreSelect(true, false); go.EnablePressEnterWhenDonePrompt(false); go.SetCommandPrompt("Select items for the new layout:"); // Disable the scaling RhinoApp.RunScript("_-DocumentProperties AnnotationStyles ModelSpaceScaling=Disabled LayoutSpaceScaling=Disabled _Enter _Enter", true); GetResult result = go.GetMultiple(1, -1); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } RhinoApp.WriteLine("Total Objects Selected: {0}", go.ObjectCount); string labelName = panel.PartName; string area = string.Format("{0:0.00}", panel.Area); Point2d minPoint = new Point2d(0, 0); Point2d maxPoint = new Point2d(0, 0); // Loop through all the objects to find Text for (int i = 0; i < go.ObjectCount; i++) { BoundingBox bBox = go.Object(i).Object().Geometry.GetBoundingBox(true); if (bBox.Min.X < minPoint.X) { minPoint.X = bBox.Min.X; } if (bBox.Min.Y < minPoint.Y) { minPoint.Y = bBox.Min.Y; } if (bBox.Max.X > maxPoint.X) { maxPoint.X = bBox.Max.X; } if (bBox.Max.Y > maxPoint.Y) { maxPoint.Y = bBox.Max.Y; } } // If the selected items has no label, return failure if (labelName == null) { return(Rhino.Commands.Result.Failure); } // Hide all the non selected objects foreach (var obj in doc.Objects) { if (obj.IsSelected(true) == 0) { doc.Objects.Hide(obj, false); } } // Add layout doc.PageUnitSystem = Rhino.UnitSystem.Millimeters; RhinoView currentView = doc.Views.ActiveView; var pageview = doc.Views.AddPageView(string.Format("{0}", labelName), 210, 297); Point2d bottomLeft = new Point2d(10, 70); Point2d topRight = new Point2d(200, 287); if (pageview != null) { pageview.SetPageAsActive(); var detail = pageview.AddDetailView("Panel", bottomLeft, topRight, Rhino.Display.DefinedViewportProjection.Top); // Show all objects RhinoApp.RunScript("_-Show _Enter", true); if (detail != null) { pageview.SetActiveDetail(detail.Id); doc.Views.ActiveView = pageview; //doc.Views.Redraw(); // Select all the objects for (int i = 0; i < go.ObjectCount; i++) { RhinoObject rhinoObject = go.Object(i).Object(); rhinoObject.Select(true); } // Hide all the non selected objects var filter = new ObjectEnumeratorSettings { NormalObjects = true, LockedObjects = false, HiddenObjects = false, ActiveObjects = true, ReferenceObjects = true }; var rh_objects = doc.Objects.FindByFilter(filter); pageview.SetPageAsActive(); //doc.Views.Redraw(); foreach (var rh_obj in rh_objects) { var select = 0 == rh_obj.IsSelected(false) && rh_obj.IsSelectable(); rh_obj.Select(select); } RhinoApp.RunScript("_-HideInDetail Enter", true); detail.IsActive = false; } bottomLeft = new Point2d(10, 40); topRight = new Point2d(135, 70); detail = pageview.AddDetailView("Sample", bottomLeft, topRight, Rhino.Display.DefinedViewportProjection.Top); // doc.Views.Redraw(); pageview.SetActiveDetail(detail.Id); detail.Viewport.SetCameraLocation(new Point3d(50, 160, 0), true); detail.CommitViewportChanges(); // doc.Views.Redraw(); detail.DetailGeometry.IsProjectionLocked = true; detail.DetailGeometry.SetScale(4.5, doc.ModelUnitSystem, 1, doc.PageUnitSystem); detail.CommitChanges(); // doc.Views.Redraw(); detail.IsActive = true; pageview.SetActiveDetail(detail.Id); RhinoApp.WriteLine("Name = {0}: Width = {1}, Height = {2}", detail.Viewport.Name, detail.Viewport.Size.Width, detail.Viewport.Size.Height); detail.CommitViewportChanges(); // doc.Views.Redraw(); detail.IsActive = false; bottomLeft = new Point2d(5, 5); topRight = new Point2d(205, 35); detail = pageview.AddDetailView("Block", bottomLeft, topRight, Rhino.Display.DefinedViewportProjection.Top); // doc.Views.Redraw(); detail.IsActive = true; pageview.SetActiveDetail(detail.Id); detail.Viewport.SetCameraLocation(new Point3d(105, 520, 0), true); detail.CommitViewportChanges(); // doc.Views.Redraw(); detail.DetailGeometry.IsProjectionLocked = true; detail.DetailGeometry.SetScale(1, doc.ModelUnitSystem, 1, doc.PageUnitSystem); detail.CommitChanges(); detail.IsActive = false; // doc.Views.Redraw(); drawBlock(doc, labelName, area, panel.PanelNumber, panelParas); // doc.Views.Redraw(); } // Show all objects RhinoApp.RunScript("_-Show _Enter", true); doc.Views.DefaultViewLayout(); doc.Views.ActiveView = currentView; return(Result.Success); }
public void drawBlock(RhinoDoc doc, string labelName, string area, int panelNum, PanelParameters panelParas) { RhinoUtilities.SetActiveLayer("LAYOUT DETAILS", System.Drawing.Color.Black); //// Get the location of current API //String path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\Logo\\MetrixLogo.jpg"; //Plane picture = new Plane(new Point3d(5, 10, 0), new Vector3d(0, 0, 1)); //// Add Company logo. //doc.Objects.AddPictureFrame(picture, path, false, 62.5, 25, false, false); // Draw bottom line doc.Objects.AddLine(new Point3d(5, 5, 0), new Point3d(205, 5, 0)); // Top line doc.Objects.AddLine(new Point3d(5, 292, 0), new Point3d(205, 292, 0)); // Left line doc.Objects.AddLine(new Point3d(5, 5, 0), new Point3d(5, 292, 0)); // Right line doc.Objects.AddLine(new Point3d(205, 5, 0), new Point3d(205, 292, 0)); //// Divider line //doc.Objects.AddLine(new Point3d(5, 10, 0), new Point3d(205, 10, 0)); //// Row 1 line //doc.Objects.AddLine(new Point3d(67.5, 15, 0), new Point3d(205, 15, 0)); //// Row 2 line //doc.Objects.AddLine(new Point3d(67.5, 20, 0), new Point3d(205, 20, 0)); //// Row 3 line //doc.Objects.AddLine(new Point3d(67.5, 25, 0), new Point3d(205, 25, 0)); //// Row 4 line //doc.Objects.AddLine(new Point3d(67.5, 30, 0), new Point3d(205, 30, 0)); //// Row 5 line //doc.Objects.AddLine(new Point3d(67.5, 35, 0), new Point3d(205, 35, 0)); //// Vertical divider line //doc.Objects.AddLine(new Point3d(136.5, 5, 0), new Point3d(136.5, 35, 0)); //// Vertical divider line //doc.Objects.AddLine(new Point3d(87.5, 10, 0), new Point3d(87.5, 35, 0)); //// Vertical divider line //doc.Objects.AddLine(new Point3d(156.5, 10, 0), new Point3d(156.5, 35, 0)); // Draw Approval Box // Horizontal lines //doc.Objects.AddLine(new Point3d(136.5, 40, 0), new Point3d(200, 40, 0)); //doc.Objects.AddLine(new Point3d(136, 39.5, 0), new Point3d(200.5, 39.5, 0)); //doc.Objects.AddLine(new Point3d(136.5, 45, 0), new Point3d(200, 45, 0)); //doc.Objects.AddLine(new Point3d(136.5, 55, 0), new Point3d(200, 55, 0)); //doc.Objects.AddLine(new Point3d(136.5, 60, 0), new Point3d(200, 60, 0)); //doc.Objects.AddLine(new Point3d(136.5, 65, 0), new Point3d(200, 65, 0)); //doc.Objects.AddLine(new Point3d(136, 65.5, 0), new Point3d(200.5, 65.5, 0)); //// Vertical lines //doc.Objects.AddLine(new Point3d(136, 39.5, 0), new Point3d(136, 65.5, 0)); //doc.Objects.AddLine(new Point3d(136.5, 40, 0), new Point3d(136.5, 65, 0)); //doc.Objects.AddLine(new Point3d(156.5, 40, 0), new Point3d(156.5, 60, 0)); //doc.Objects.AddLine(new Point3d(200, 40, 0), new Point3d(200, 65, 0)); //doc.Objects.AddLine(new Point3d(200.5, 39.5, 0), new Point3d(200.5, 65.5, 0)); string text = "51 Holloway Drive metrixgroup.com.au\nBayswater VIC 3153 1300 792 493"; double height = 3.5; Rhino.Geometry.Point3d pt = new Rhino.Geometry.Point3d(11, 15 + height, 0); string font = "Arial"; Rhino.Geometry.Plane plane = doc.Views.ActiveView.ActiveViewport.ConstructionPlane(); plane.Origin = pt; Guid id; // id = doc.Objects.AddText(text, plane, height, font, false, false); //height = 1.5; //text = "Supply of this order will be solely and exlusively according to the terms and conditions of Metrix Group Pty Ltd."; //plane.Origin = new Point3d(7, 6, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); //height = 1.5; //text = "PANEL"; //plane.Origin = new Point3d(69, 31, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); height = 1.5; text = labelName; plane.Origin = new Point3d(89, 31 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "DRAWN"; //plane.Origin = new Point3d(69, 26, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "CHECKED"; //plane.Origin = new Point3d(69, 21, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "m²"; //plane.Origin = new Point3d(69, 16, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); text = area; plane.Origin = new Point3d(89, 16 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "Page "; //plane.Origin = new Point3d(69, 11, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); text = panelNum + " of " + panelParas.TotalPanel; plane.Origin = new Point3d(89, 11 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "PROJECT"; //plane.Origin = new Point3d(138, 31, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); height = 1.5; text = panelParas.Project; plane.Origin = new Point3d(158, 31 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "CUSTOMER "; //plane.Origin = new Point3d(138, 26, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); height = 1.5; text = panelParas.CustomerName; plane.Origin = new Point3d(158, 26 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "JOB NO."; //plane.Origin = new Point3d(138, 21, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); height = 1.5; text = panelParas.JobNo; plane.Origin = new Point3d(158, 21 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "MATERIAL"; //plane.Origin = new Point3d(138, 16, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); height = 1.5; text = panelParas.Material; plane.Origin = new Point3d(158, 16 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "COATING"; //plane.Origin = new Point3d(138, 11, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); height = 1.5; text = panelParas.Coating; plane.Origin = new Point3d(158, 11 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); text = "Copyright © Metrix Group " + DateTime.Today.Year; plane.Origin = new Point3d(138, 6 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "APPROVED BY"; //plane.Origin = new Point3d(138, 61, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "NAME"; //plane.Origin = new Point3d(138, 56, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "SIGNATURE"; //plane.Origin = new Point3d(138, 51, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); //text = "DATE"; //plane.Origin = new Point3d(138, 41, 0); //id = doc.Objects.AddText(text, plane, height, font, false, false); if (panelParas.DotFont == 1) { text = "* 10 mm Dot font labelling to the rear of all panels"; plane.Origin = new Point3d(136.5, 70 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); text = "The purple line represents the unperforated distance" + "\nbetween the edge of the panel and the perforation"; plane.Origin = new Point3d(136.5, 65 + height, 0); id = doc.Objects.AddText(text, plane, height, font, false, false); } }