Пример #1
0
        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;
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
        protected override bool DoRun()
        {
            Application.Exit();

            return(true);
        }
Пример #7
0
        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());
        }
Пример #8
0
        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
        }
Пример #9
0
 private void Warn(string line)
 {
     Application.ReportStatus("Error with line: " + line, StatusMessageType.Error, null);
 }