protected override void OnExecute(Command command, ExecutionContext context, System.Drawing.Rectangle buttonRect) { //isDetectingCollisions = Booleans[Resources.DetectCollisionsText].Value; isCreatingBreaks = RibbonBooleanGroupCapsule.BooleanGroupCapsules[Resources.IsCreatingBreakLines].IsEnabledCommandBoolean.Value; breakAngle = RibbonBooleanGroupCapsule.BooleanGroupCapsules[Resources.IsCreatingBreakLines].Values[Resources.BreakLinesMinimumAngle].Value * Math.PI / 180; dashSize = RibbonBooleanGroupCapsule.BooleanGroupCapsules[Resources.IsCreatingBreakLines].Values[Resources.BreakLinesDashSize].Value / ActiveWindow.Units.Length.ConversionFactor; if (!isCreatingBreaks) { breakAngle = 0; dashSize = 0; } IDesignBody designBody = Window.ActiveWindow.ActiveContext.SingleSelection as IDesignBody; IDesignFace designFace = null; if (designBody == null) { designFace = Window.ActiveWindow.ActiveContext.SingleSelection as IDesignFace; if (designFace != null) { designBody = designFace.GetAncestor <IDesignBody>(); } else { return; } } bool isPlanarBody = true; foreach (DesignFace face in designBody.Master.Faces) { if (face.Shape.Geometry is Plane) { continue; } isPlanarBody = false; face.SetColor(null, Color.Red); } if (!isPlanarBody) { Application.ReportStatus(Resources.UnfoldNotPlanarError, StatusMessageType.Error, null); return; } Face startFace = null; if (designFace != null) { startFace = designFace.Master.Shape; } Unfold(designBody.Master.Shape.Body, startFace, isDetectingCollisions, isCreatingBreaks, breakAngle, dashSize); Settings.Default.IsUnfoldingWithBreaks = isCreatingBreaks; Settings.Default.UnfoldingWithBreaksAngle = breakAngle * 180 / Math.PI; Settings.Default.UnfoldingWithBreaksDashSize = dashSize / ActiveWindow.Units.Length.ConversionFactor; }
void Unfold(Body body, Face startFace, bool isDetectingCollisions, bool isCreatingDashes, double breakAngle, double dashSize) { DateTime startTime = DateTime.Now; FlatPattern flatPattern = new FlatPattern(body, startFace, isDetectingCollisions, isCreatingDashes, breakAngle, dashSize, Resources.FlatPatternText); DateTime calcTime = DateTime.Now; double calcDuration = (calcTime - startTime).TotalSeconds; flatPattern.Render(); double drawDuration = (DateTime.Now - calcTime).TotalSeconds; int n = 0; foreach (FlatBody flatBody in flatPattern.FlatBodies) { foreach (FlatFace flatFace in flatBody.FlatFaces) { foreach (FlatLoop flatLoop in flatFace.Loops) { n++; } } } string output = String.Format("Unfolded {0:D} faces in {1:F} s. ({2:F} fps.) \n", n, Math.Round(calcDuration, 2), Math.Round((double)n / calcDuration, 2)) + String.Format("Modeled {0:F} seconds. ({1:F} fps.)", Math.Round(drawDuration, 2), Math.Round((double)n / drawDuration, 2)) ; Application.ReportStatus(output, StatusMessageType.Information, null); }
public void Initialize() { var tab = new RibbonTabCapsule("CAM", Resources.TabText, ribbonRoot); RibbonGroupCapsule group; group = new RibbonGroupCapsule("ToolPath", Resources.ToolPathGroupText, tab, RibbonCollectionCapsule.LayoutOrientation.horizontal); new FaceToolPathToolButtonCapsule(group, RibbonButtonCapsule.ButtonSize.large); new AnimationToolButtonCapsule(group, RibbonButtonCapsule.ButtonSize.large); foreach (PropertyDisplay property in FaceToolPathObject.Properties) { Application.AddPropertyDisplay(property); } }
protected override void OnExecute(Command command, ExecutionContext context, System.Drawing.Rectangle buttonRect) { Part part = Window.ActiveWindow.ActiveContext.Context as Part; ICollection <DesignBody> designBodies = part.GetDescendants <DesignBody>(); Dictionary <string, int> tally = new Dictionary <string, int>(); const string typePrefix = "SpaceClaim.Api.V10.Geometry."; foreach (DesignBody designBody in designBodies) { foreach (DesignFace face in designBody.Faces) { string typeName = face.Shape.Geometry.GetType().ToString(); typeName = typeName.Substring(typePrefix.Length); if (tally.ContainsKey(typeName)) { tally[typeName]++; } else { tally[typeName] = 1; } if (typeName != "Plane") { NoteHelper.AnnotateFace(part, face, typeName); } } } string output = string.Empty; foreach (string key in tally.Keys) { output += string.Format("{0}: {1} | ", key, tally[key]); } Application.ReportStatus(output, StatusMessageType.Information, null); }
protected override void OnExecute(Command command, ExecutionContext context, System.Drawing.Rectangle buttonRect) { if (!IsRecording) { SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "AVI Files (*.avi)|*.avi"; DialogResult result = dialog.ShowDialog(); if (result != DialogResult.OK) { return; } // Application.StartVideo(dialog.FileName, VideoCapture.Window); IsRecording = true; } else { Application.StopVideo(); IsRecording = false; } }
protected override bool DoRun() { Application.Exit(); return(true); }
public void Initialize() { var tab = new RibbonTabCapsule("UnfoldMore", Resources.TabText, ribbonRoot); RibbonGroupCapsule group; RibbonContainerCapsule container; RibbonButtonCapsule button; group = new RibbonGroupCapsule("Tabs", Resources.TabsGroupText, tab, RibbonCollectionCapsule.LayoutOrientation.horizontal); container = new RibbonContainerCapsule("Buttons", group, RibbonCollectionCapsule.LayoutOrientation.vertical, false); button = new EdgeTabButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new OffsetEdgesButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new MakeTabsButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); group.CreateOptionsUI(); /* * group = new RibbonGroupCapsule("Excel", Resources.ExcelGroupText, tab, RibbonCollectionCapsule.LayoutOrientation.vertical); * new ExcelResetButtonCapsule(group, RibbonButtonCapsule.ButtonSize.small); * new ExcelLengthButtonCapsule(group, RibbonButtonCapsule.ButtonSize.small); * new ExcelAngleButtonCapsule(group, RibbonButtonCapsule.ButtonSize.small); */ tab = new RibbonTabCapsule("Discrete", Resources.DiscreteTabText, ribbonRoot); group = new RibbonGroupCapsule("Procedural", Resources.ProceduralGroupText, tab, RibbonCollectionCapsule.LayoutOrientation.horizontal); container = new RibbonContainerCapsule("Buttons", group, RibbonCollectionCapsule.LayoutOrientation.vertical, false); new CreateFigure8ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new CreateAnimateButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); container = new RibbonContainerCapsule("Tools", group, RibbonCollectionCapsule.LayoutOrientation.vertical, false); new LawsonToolButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new LawsonRelaxButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new CreateLawsonButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); group.CreateOptionsUI(); container = new RibbonContainerCapsule("More", group, RibbonCollectionCapsule.LayoutOrientation.vertical, false); new LawsonCirclesButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); group = new RibbonGroupCapsule("Gyroid", Resources.GyroidGroupText, tab, RibbonCollectionCapsule.LayoutOrientation.horizontal); container = new RibbonContainerCapsule("Tools", group, RibbonCollectionCapsule.LayoutOrientation.vertical, false); new GyroidRelaxButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new BoyToolButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new BrowseToolButtonCapsule(group, RibbonButtonCapsule.ButtonSize.large); group = new RibbonGroupCapsule("Quadrant", "Octant", tab, RibbonCollectionCapsule.LayoutOrientation.horizontal); container = new RibbonContainerCapsule("0", group, RibbonCollectionCapsule.LayoutOrientation.vertical, false); new SelectQuadrant000ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new SelectQuadrant100ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new SelectQuadrant010ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new SelectQuadrant110ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); container = new RibbonContainerCapsule("1", group, RibbonCollectionCapsule.LayoutOrientation.vertical, false); new SelectQuadrant001ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new SelectQuadrant101ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new SelectQuadrant011ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); new SelectQuadrant111ButtonCapsule(container, RibbonButtonCapsule.ButtonSize.small); tab = new RibbonTabCapsule("Lenticular", Resources.Lenticular, ribbonRoot); group = new RibbonGroupCapsule("Lenticular", Resources.Lenticular, tab, RibbonCollectionCapsule.LayoutOrientation.horizontal); new LenticularPlanarCommandCapsule(group, RibbonButtonCapsule.ButtonSize.large); new LenticularCylindricalCommandCapsule(group, RibbonButtonCapsule.ButtonSize.large); group.CreateOptionsUI(); // group = new RibbonGroupCapsule("Wilf", Resources.WilfGroupText, tab, RibbonCollectionCapsule.LayoutOrientation.horizontal); // new WilfButtonCapsule(group, RibbonButtonCapsule.ButtonSize.small); Application.AddFileHandler(new SvgFileSaveHandler()); Application.AddFileHandler(new DxfFileSaveHandler()); }
protected override void OnExecute(Command command, ExecutionContext context, System.Drawing.Rectangle buttonRect) { int numGears = 11; Debug.Assert(MainPart.Components.Count == numGears); var chain = new List <Component>(); List <AlignCondition> aligns = MainPart.MatingConditions.Where(c => c is AlignCondition).Cast <AlignCondition>().ToList(); chain.Add(aligns.First().GeometricA.GetAncestor <Component>()); while (chain.Count != numGears) { foreach (AlignCondition align in aligns) { Component component = align.GeometricA.GetAncestor <Component>(); if (!chain.Contains(component)) { chain.Add(component); break; } component = align.GeometricB.GetAncestor <Component>(); if (!chain.Contains(component)) { chain.Add(component); break; } } } for (int iter = 0; iter < 100; iter++) { // foreach (AlignCondition align in aligns) // align.IsEnabled = false; Random random = new Random(); var angles = new List <double>(); for (int i = 0; i < numGears; i++) { angles.Add(AngleBetween(chain, i)); } double averageAngle = angles.Average(); // double scale = 0.002; for (int i = 0; i < numGears; i++) { //Vector noise = Vector.Create(random.NextDouble() - 0.5, random.NextDouble() - 0.5, random.NextDouble() - 0.5) * scale; Vector spring = -SpringDistance(chain, i) * (angles[i] - averageAngle) / 10; Matrix trans = Matrix.CreateTranslation(spring); Matrix rot = Matrix.CreateRotation(Line.Create(chain[i].Placement * Point.Origin, Vector.Create(random.NextDouble() - 0.5, random.NextDouble() - 0.5, random.NextDouble() - 0.5).Direction), (random.NextDouble() - 0.5) * 0.001); chain[i].Transform(trans * rot); } // int offset = random.Next(numGears); // for (int i = 0; i < numGears; i++) // aligns[(i+offset)%numGears].IsEnabled = true; } #if false Frame frame = Frame.World; Circle baseCircle = Circle.Create(frame, 0.05); baseCircle.Print(); int gearCount = 5; // odd var controlCircles = new Circle[gearCount]; var controlAxes = new Line[gearCount]; double spacing = Math.PI * 2 / gearCount; double spacingOffset = -spacing / 2; double angleIncrement = spacing / 2; for (int i = 0; i < gearCount; i++) { Point p0 = baseCircle.Evaluate(spacingOffset + spacing * i).Point; Point p1 = baseCircle.Evaluate(spacingOffset + spacing * (i + 1)).Point; Point midPoint = new Point[] { p0, p1 }.Average(); controlAxes[i] = Line.Create(midPoint, (p1 - p0).Direction); controlCircles[i] = Circle.Create(Frame.Create(midPoint, (baseCircle.Frame.Origin - midPoint).Direction), (p1 - p0).Magnitude / 2). CreateTransformedCopy(Matrix.CreateRotation(controlAxes[i], angleIncrement * i)); } controlCircles.Print(); int counter = 10000; while (counter-- >= 0) { var angles = ComputeAngles(controlCircles); double averageAngle = angles.Average(); for (int i = 1; i < gearCount; i++) { controlCircles[i] = controlCircles[i].CreateTransformedCopy(Matrix.CreateRotation(controlAxes[i], (averageAngle - angles[i - 1]))); } string op = string.Empty; for (int i = 0; i < gearCount; i++) { op += angles[i].ToString() + " "; } if (counter % 1000 == 0) { Application.ReportStatus(op, StatusMessageType.Information, null); } } controlCircles.Print(); ActiveWindow.InteractionMode = InteractionMode.Solid; ActiveWindow.ZoomExtents(); #endif }
private void Warn(string line) { Application.ReportStatus("Error with line: " + line, StatusMessageType.Error, null); }