예제 #1
0
        public void PointOnPointTest()
        {
            var document   = TestUtils.DefaultsSetup();
            var sketch     = new SketchCreator(document);
            var sketchNode = sketch.BuildSketchNode();

            document.Transact();

            var firstPoint  = sketch.GetPoint(new Point3D(3, 1, 0));
            var secondPoint = sketch.GetPoint(new Point3D(4, 2, 0));

            document.Commit("Draw");
            var constraintBuilder = new NodeBuilder(document, Constraint2DNames.PointOnPointFunction);

            constraintBuilder[0].Reference = firstPoint.Node;
            constraintBuilder[1].Reference = secondPoint.Node;

            var docSolverAdapter = new DocumentToSolverAdapter(document, sketchNode);

            docSolverAdapter.ImpactedNodes(firstPoint.Node, -1);

            docSolverAdapter.Solve();

            firstPoint  = new NodeBuilder(firstPoint.Node);
            secondPoint = new NodeBuilder(secondPoint.Node);
            Assert.IsTrue(Math.Abs(firstPoint[1].TransformedPoint3D.X - secondPoint[1].TransformedPoint3D.X) < 0.01,
                          "invalid x axis values");
            Assert.IsTrue(Math.Abs(firstPoint[1].TransformedPoint3D.Y - secondPoint[1].TransformedPoint3D.Y) < 0.01,
                          "invalid y axis values");
        }
예제 #2
0
        public static Node AddEllipseToNode(Document document, Point3D center, Point3D point2, Point3D point3)
        {
            var sketchCreator = new SketchCreator(document);
            var builder       = sketchCreator.CreateBuilder(FunctionNames.Ellipse);

            builder[0].Reference = sketchCreator.GetPoint(center).Node;
            builder[1].Reference = sketchCreator.GetPoint(point2).Node;
            builder[2].Reference = sketchCreator.GetPoint(point3).Node;

            return(!builder.ExecuteFunction() ? null : builder.Node);
        }
예제 #3
0
        public static Node AddArcToNode(Document document, Point3D point1, Point3D point2, Point3D point3)
        {
            var sketchCreator = new SketchCreator(document);
            var builder       = new NodeBuilder(document, FunctionNames.Arc);

            builder[0].Reference = sketchCreator.GetPoint(point1).Node;
            builder[1].Reference = sketchCreator.GetPoint(point2).Node;
            builder[2].Reference = sketchCreator.GetPoint(point3).Node;

            return(!builder.ExecuteFunction() ? null : builder.Node);
        }
예제 #4
0
        private NodeBuilder BuildArc(Document document, Point3D centre, Point3D point1, Point3D point2)
        {
            var sketchCreator = new SketchCreator(document);
            var builder       = new NodeBuilder(document, FunctionNames.Arc);

            // center
            builder[0].Reference = sketchCreator.GetPoint(centre).Node;
            builder[1].Reference = sketchCreator.GetPoint(point1).Node;
            builder[2].Reference = sketchCreator.GetPoint(point2).Node;
            builder.ExecuteFunction();
            return(builder);
        }
예제 #5
0
        private NodeBuilder BuildLineInDocument(Document previewDocument, Point3D firstPoint, Point3D lastPoint)
        {
            var sketchBuilder          = new SketchCreator(Document);
            var firstPointBuilder      = sketchBuilder.GetPoint(firstPoint).Node;
            var secondPointBuilderNode = sketchBuilder.GetPoint(lastPoint).Node;

            var builder = new NodeBuilder(previewDocument, FunctionNames.LineTwoPoints);

            builder[0].Reference = firstPointBuilder;
            builder[1].Reference = secondPointBuilderNode;
            //builder.EnableSelection = false;
            builder.ExecuteFunction();
            return(builder);
        }
        private void ConeBaseCircle(bool updateShape)
        {
            if (Dependency.Steps[1].Data is Mouse3DPosition)
            {
                // If point received from mouse
                Dependency.Steps[0].Get <gpAx1>().Direction = Dependency.Steps[1].Get <Mouse3DPosition>().Axis.Direction;
                var currentPoint = Dependency.Steps[1].Get <Mouse3DPosition>().Point.GpPnt;
                Dependency.Steps[1].Data = Dependency.Steps[0].Get <gpAx1>().Location.Distance(currentPoint);
            }
            else if (Dependency.Steps[1].Data is Point3D)
            {
                var currentPoint = Dependency.Steps[1].Get <Point3D>().GpPnt;
                Dependency.Steps[1].Data = Dependency.Steps[0].Get <gpAx1>().Location.Distance(currentPoint);
            }

            var sketchCreator = new SketchCreator(Dependency.AnimationDocument);
            var center        =
                sketchCreator.GetPoint(new Point3D((Dependency.Steps[0].Data as gpAx1).Location)).Node;

            sketchCreator = new SketchCreator(Dependency.AnimationDocument);
            var builder = new NodeBuilder(Dependency.AnimationDocument, FunctionNames.Circle);

            builder[0].Reference    = center;
            builder[1].Real         = Dependency.Steps[1].Get <double>();
            builder.EnableSelection = false;
            builder.Color           = Color.Red;
            builder.DisplayMode     = AISDisplayMode.AIS_WireFrame;
            builder.Transparency    = 0.2;
            builder.ExecuteFunction();
            Dependency.AnimationNodeBuilder = builder;
        }
        protected NodeBuilder GetSketchProjectedNode(Document document, Point3D point)
        {
            var sketchBuilder = new SketchCreator(document);

            //var projectedPoint = sketchBuilder.Project(point);
            //Ensure.IsNotNull(projectedPoint);
            return(sketchBuilder.GetPoint(point));
        }
예제 #8
0
        public static Node AddCircleToNode(Document document, Point3D coordinate, double radius)
        {
            var sketchCreator = new SketchCreator(document);
            var builder       = new NodeBuilder(document, FunctionNames.Circle);

            builder[0].Reference = sketchCreator.GetPoint(coordinate).Node;
            builder[1].Real      = radius;

            return(!builder.ExecuteFunction() ? null : builder.Node);
        }
예제 #9
0
        public static NodeBuilder AddLineToNode(Document document, Point3D point1, Point3D point2, ObjectVisibility visibility = ObjectVisibility.ToBeDisplayed)
        {
            var sketchCreator = new SketchCreator(document);

            var firstPointBuilder  = sketchCreator.GetPoint(point1);
            var secondPointBuilder = sketchCreator.GetPoint(point2);

            firstPointBuilder.Visibility  = visibility;
            secondPointBuilder.Visibility = visibility;
            var firstPoint  = firstPointBuilder.Node;
            var secondPoint = secondPointBuilder.Node;

            var builder = sketchCreator.CreateBuilder(FunctionNames.LineTwoPoints);

            builder[0].Reference = firstPoint;
            builder[1].Reference = secondPoint;
            builder.ExecuteFunction();
            return(builder);
        }
예제 #10
0
        public void PerpendicularTest()
        {
            var document   = TestUtils.DefaultsSetup();
            var sketch     = new SketchCreator(document);
            var sketchNode = sketch.BuildSketchNode();

            document.Transact();

            var firstPoint  = sketch.GetPoint(new Point3D(1, 1, 0));
            var secondPoint = sketch.GetPoint(new Point3D(4, 1, 0));
            var thirdPoint  = sketch.GetPoint(new Point3D(5, 3, 0));

            var line = new NodeBuilder(document, FunctionNames.LineTwoPoints);

            line[0].Reference = firstPoint.Node;
            line[1].Reference = secondPoint.Node;
            line.ExecuteFunction();

            var line2 = new NodeBuilder(document, FunctionNames.LineTwoPoints);

            line2[0].Reference = secondPoint.Node;
            line2[1].Reference = thirdPoint.Node;
            line2.ExecuteFunction();

            var constraintBuilder = new NodeBuilder(document, Constraint2DNames.PerpendicularFunction);

            constraintBuilder[0].Reference = line.Node;
            constraintBuilder[1].Reference = line2.Node;
            document.Commit("Draw");

            var docSolverAdapter = new DocumentToSolverAdapter(document, sketchNode);

            docSolverAdapter.ImpactedNodes(firstPoint.Node, firstPoint.Node.Index);
            var error = docSolverAdapter.Solve();

            Assert.IsTrue(error == 0, "Invalid perpendicular solution");
        }
예제 #11
0
        private void CirclePreview(bool updateShape)
        {
            double radius;

            if (Dependency.Steps[1].Data is Mouse3DPosition)
            {
                // If point received from mouse
                Dependency.Steps[0].Get <gpAx1>().Direction = (
                    Dependency.Steps[1].Get <Mouse3DPosition>().Axis.Direction);
                var currentPoint = Dependency.Steps[1].Get <Mouse3DPosition>().Point.GpPnt;
                radius = Dependency.Steps[0].Get <gpAx1>().Location.Distance(currentPoint);
                Dependency.Steps[1].Data = radius;
            }
            else
            {
                // If radius received from command line
                radius = Dependency.Steps[1].Get <double>();
            }

            // Make the animation
            // Dependency.AnimationNodeBuilder = new NodeBuilder(Dependency.AnimationDocument, FunctionNames.Circle);

            var sketchCreator = new SketchCreator(Dependency.AnimationDocument);
            var center        =
                sketchCreator.GetPoint(new Point3D((Dependency.Steps[0].Data as gpAx1).Location)).Node;

            sketchCreator = new SketchCreator(Dependency.AnimationDocument);
            var builder = new NodeBuilder(Dependency.AnimationDocument, FunctionNames.Circle);

            builder[0].Reference    = center;
            builder[1].Real         = radius;
            builder.EnableSelection = false;
            builder.Color           = Color.Red;
            builder.DisplayMode     = AISDisplayMode.AIS_WireFrame;
            builder.Transparency    = 0.2;
            builder.ExecuteFunction();
            Dependency.AnimationNodeBuilder = builder;
        }
예제 #12
0
        private NodeBuilder BuildCircleInDocument(Document previewDocument, bool animation)
        {
            var sketchBuilder = new SketchCreator(previewDocument);

            //var nodeBuilder = new NodeBuilder(sketchBuilder.CurrentSketch);
            //nodeBuilder[0].TransformedAxis3D = normalOnPlane;

            ////Document.Root.Get<ShapeFunctionsInterface.Interpreters.DocumentContextInterpreter>().ActiveSketch
            var circleCenterPoint = Points[0];

            Ensure.IsNotNull(circleCenterPoint);
            var firstPointBuilder = sketchBuilder.GetPoint(circleCenterPoint).Node;

            var builder = new NodeBuilder(previewDocument, FunctionNames.Circle);

            builder[0].Reference = firstPointBuilder;
            builder[1].Real      = circleRadius > 0.0 ? circleRadius : Points[1].Distance(Points[0]);
            if (animation)
            {
                builder.EnableSelection = false;
            }
            builder.ExecuteFunction();
            return(builder);
        }
예제 #13
0
        private void DrawHint()
        {
            Clear();
            if (!_isEnabled)
            {
                return;
            }
            _document.Transact();

            var sketchBuilder = new SketchCreator(_document);
            var axis          = new Axis(_visualHintAxis);
            var pointBuilder  = sketchBuilder.GetPoint(axis.Location);

            var builder = new NodeBuilder(_document, FunctionNames.Circle);

            builder[0].Reference    = pointBuilder.Node;
            builder[1].Real         = 2;
            builder.Transparency    = 0.6;
            builder.Color           = Color.Black;
            builder.DisplayMode     = AISDisplayMode.AIS_WireFrame;
            builder.EnableSelection = false;
            builder.ExecuteFunction();
            _document.Commit("PreviewPlane");
        }
예제 #14
0
        public List <NodeBuilder> GetTrimResult(Document document, List <SceneSelectedEntity> trimmedEntities, Point3D mouseData)
        {
            var sketchCreator    = new SketchCreator(document);
            var trimmingEntities = new List <SceneSelectedEntity>();

            foreach (var node in document.Root.Children)
            {
                if (node.Value != trimmedEntities[0].Node && IsTrimmingWire(node.Value))// && !SameArc(node.Value, trimmedEntities[0].Node))
                {
                    var sse = new SceneSelectedEntity(node.Value)
                    {
                        ShapeType = TopAbsShapeEnum.TopAbs_WIRE
                    };
                    trimmingEntities.Add(sse);
                }
            }

            trimmedEntities[0].ShapeType = TopAbsShapeEnum.TopAbs_WIRE;

            var newNodes = new List <NodeBuilder>();

            if (trimmedEntities[0].Node.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name == FunctionNames.LineTwoPoints)
            {
                var intervals = ExecuteTrim(trimmedEntities[0], trimmingEntities, mouseData.GpPnt);
                if (intervals == null)
                {
                    return(newNodes);
                }
                if (intervals.Count == 0)
                {
                    NodeBuilderUtils.DeleteNode(trimmedEntities[0].Node, Document);
                    return(newNodes);
                }
                else
                {
                    if (intervals.Count % 2 == 0)
                    {
                        for (int i = 0; i < intervals.Count; i += 2)
                        {
                            var builder = new NodeBuilder(document, FunctionNames.LineTwoPoints);
                            builder[0].Reference = sketchCreator.GetPoint(intervals[i]).Node;
                            builder[1].Reference = sketchCreator.GetPoint(intervals[i + 1]).Node;
                            builder.ExecuteFunction();
                            newNodes.Add(builder);
                        }
                    }
                }
            }
            else
            if (trimmedEntities[0].Node.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name == FunctionNames.Circle ||
                trimmedEntities[0].Node.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name == FunctionNames.Arc)
            {
                var centre    = new NodeBuilder(trimmedEntities[0].Node.Children[1].Get <ReferenceInterpreter>().Node)[1].TransformedPoint3D;
                var intervals = ExecuteTrim(trimmedEntities[0], trimmingEntities, mouseData.GpPnt);
                if (intervals != null && intervals.Count % 2 == 0)
                {
                    for (int i = 0; i < intervals.Count; i += 2)
                    {
                        newNodes.Add(BuildArc(document, centre, intervals[i], intervals[i + 1]));
                    }
                }
            }
            else
            if (trimmedEntities[0].Node.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name == FunctionNames.Arc3P)
            {
                var point1 = new NodeBuilder(trimmedEntities[0].Node.Children[1].Get <ReferenceInterpreter>().Node)[1].TransformedPoint3D;
                var point2 = new NodeBuilder(trimmedEntities[0].Node.Children[2].Get <ReferenceInterpreter>().Node)[1].TransformedPoint3D;
                var point3 = new NodeBuilder(trimmedEntities[0].Node.Children[3].Get <ReferenceInterpreter>().Node)[1].TransformedPoint3D;

                var gceCirc   = new gceMakeCirc(point1.GpPnt, point2.GpPnt, point3.GpPnt);
                var centre    = new Point3D(gceCirc.Value.Axis.Location);
                var intervals = ExecuteTrim(trimmedEntities[0], trimmingEntities, mouseData.GpPnt);
                if (intervals != null && intervals.Count % 2 == 0)
                {
                    for (int i = 0; i < intervals.Count; i += 2)
                    {
                        newNodes.Add(BuildArc(document, centre, intervals[i], intervals[i + 1]));
                    }
                }
            }
            else
            {
                var builder = new NodeBuilder(document, FunctionNames.Trim);
                builder[0].ReferenceList = trimmingEntities;
                builder[1].ReferenceData = trimmedEntities[0];
                var point = sketchCreator.GetPoint(mouseData).Node;
                builder[2].Reference = point;
                if (builder.ExecuteFunction())
                {
                    newNodes.Add(builder);
                }
                //NodeBuilderUtils.DeleteNode(point, document);
                point.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden;
            }
            return(newNodes);
        }
 private Node GetPointNode(Point3D point)
 {
     return(_sketchCreator.GetPoint(point).Node);
 }