Exemple #1
0
        public override bool Execute()
        {
            var edge1 = new BRepBuilderAPIMakeEdge(Dependency[0].TransformedPoint3D.GpPnt, Dependency[1].TransformedPoint3D.GpPnt).Edge;
            var edge2 = new BRepBuilderAPIMakeEdge(Dependency[1].TransformedPoint3D.GpPnt, Dependency[2].TransformedPoint3D.GpPnt).Edge;
            var edge3 = new BRepBuilderAPIMakeEdge(Dependency[2].TransformedPoint3D.GpPnt, Dependency[3].TransformedPoint3D.GpPnt).Edge;
            var edge4 = new BRepBuilderAPIMakeEdge(Dependency[3].TransformedPoint3D.GpPnt, Dependency[0].TransformedPoint3D.GpPnt).Edge;

            var mkWire = new BRepBuilderAPIMakeWire();

            mkWire.Add(edge1);
            mkWire.Add(edge2);
            mkWire.Add(edge3);
            mkWire.Add(edge4);
            TopoDSFace faceProfile = null;

            if (mkWire.IsDone)
            {
                var wireProfile = mkWire.Wire;
                if (!wireProfile.IsNull)
                {
                    faceProfile = new BRepBuilderAPIMakeFace(wireProfile, false).Face;
                }
            }

            Shape = faceProfile;

            return(true);
        }
Exemple #2
0
        public void AllocDeallocSimpleTest()
        {
            //NaroMessage.Show("start test");
            //Console.WriteLine("---- wrapper start test ----");
            var watch = new Stopwatch();

            watch.Start();
            for (var i = 0; i < 300000; i++)
            {
                var         pnt   = new gpPnt(i, i, i);
                var         pnt2  = new gpPnt(i + 10, i + 10, i + 10);
                var         aEdge = new BRepBuilderAPIMakeEdge(pnt, pnt2).Edge;
                var         wire  = new BRepBuilderAPIMakeWire(aEdge).Wire;
                TopoDSShape shape = wire;
                new AISShape(shape);

                var pln     = new gpPln(i + 10, i + 10, i + 10, i + 10);
                var geomPln = new GeomPlane(pln);
                var trsf    = new gpTrsf();
                geomPln.Transform(trsf);
            }

            watch.Stop();
            //Console.WriteLine("---- wrapper end test - took {0} ms ----", watch.ElapsedMilliseconds);

            //NaroMessage.Show(String.Format("---- wrapper end test - took {0} ms ----", watch.ElapsedMilliseconds));
        }
        public void MultiLineTrimTest()
        {
            var edge1 = new BRepBuilderAPIMakeEdge(new gpPnt(1, 1, 0), new gpPnt(5, 5, 0)).Edge;
            var edge2 = new BRepBuilderAPIMakeEdge(new gpPnt(2, 0, 0), new gpPnt(2, 5, 0)).Edge;
            var edge3 = new BRepBuilderAPIMakeEdge(new gpPnt(4, 0, 0), new gpPnt(4, 5, 0)).Edge;

            var clickPoint = new Point3D(3, 3, 0);

            var trimmingEdges = new List <TopoDSEdge> {
                edge2, edge3
            };
            var trimmedEdges = GeomUtils.TrimGenericShape(trimmingEdges, edge1, clickPoint);

            Assert.IsTrue(trimmedEdges != null, "Trimming solutions not found");
            var trimmedCurves = trimmedEdges.Select(edge => new BRepAdaptorCurve(edge)).ToList();

            var firstPoint = new Point3D(trimmedCurves[0].Value(trimmedCurves[0].FirstParameter));
            var lastPoint  = new Point3D(trimmedCurves[0].Value(trimmedCurves[0].LastParameter));

            Assert.IsTrue(firstPoint.IsEqual(new Point3D(1, 1, 0)), "invalid trimming point");
            Assert.IsTrue(lastPoint.IsEqual(new Point3D(2, 2, 0)), "invalid trimming point");
            var thirdPoint  = new Point3D(trimmedCurves[1].Value(trimmedCurves[1].FirstParameter));
            var fourthPoint = new Point3D(trimmedCurves[1].Value(trimmedCurves[1].LastParameter));

            Assert.IsTrue(thirdPoint.IsEqual(new Point3D(4, 4, 0)), "invalid trimming point");
            Assert.IsTrue(fourthPoint.IsEqual(new Point3D(5, 5, 0)), "invalid trimming point");
        }
        public void CircleMultiLineTrimTest()
        {
            var wireCircle =
                OccShapeCreatorCode.CreateWireCircle(new gpAx1(new gpPnt(0, 0, 0), new gpDir(0, 0, 1)), 2);
            var circleEdges = GeomUtils.ExtractEdges(wireCircle);
            var edge1       = new BRepBuilderAPIMakeEdge(new gpPnt(-3, 0, 0), new gpPnt(3, 0, 0)).Edge;
            var edge2       = new BRepBuilderAPIMakeEdge(new gpPnt(0, -3, 0), new gpPnt(0, 3, 0)).Edge;

            Assert.IsTrue(circleEdges.Count > 0, "invalid circle edges");
            var clickPoint = new Point3D(2, 0, 0);

            var trimmingEdges = new List <TopoDSEdge> {
                edge1, edge2
            };
            var trimmedEdges = GeomUtils.TrimGenericShape(trimmingEdges, circleEdges[0], clickPoint);

            Assert.IsTrue(trimmedEdges.Count == 1, "Incorrect number of trim solutions");
            var trimmedCurve = new BRepAdaptorCurve(trimmedEdges[0]);

            var firstPoint = new Point3D(trimmedCurve.Value(trimmedCurve.FirstParameter));
            var lastPoint  = new Point3D(trimmedCurve.Value(trimmedCurve.LastParameter));

            Assert.IsTrue(firstPoint.IsEqual(new Point3D(0, 2, 0)), "invalid trimming point");
            Assert.IsTrue(lastPoint.IsEqual(new Point3D(2, 0, 0)), "invalid trimming point");
        }
Exemple #5
0
        private NodeBuilder BuildArcInDocument(Document document)
        {
            var firstPointBuilder  = GetSketchProjectedNode(document, Points[0]);
            var secondPointBuilder = GetSketchProjectedNode(document, Points[1]);
            var thirdPointBuilder  = GetSketchProjectedNode(document, Points[2]);

            var gceCirc = new gceMakeCirc(firstPointBuilder[1].TransformedPoint3D.GpPnt,
                                          secondPointBuilder[1].TransformedPoint3D.GpPnt,
                                          thirdPointBuilder[1].TransformedPoint3D.GpPnt);
            var circle = gceCirc.Value;
            var circleCenterBuilder = GetSketchProjectedNode(document, new Point3D(circle.Axis.Location));
            var arc         = GeomUtils.BuildArc(circle.Axis, Points[0], Points[1], true);
            var reversedArc = true;

            if (arc != null)
            {
                var firstU      = arc.FirstParameter;
                var lastU       = arc.LastParameter;
                var arcEdge     = new BRepBuilderAPIMakeEdge(arc).Edge;
                var arcAdaptor  = new BRepAdaptorCurve(arcEdge);
                var thirdPointU = GeomUtils.UParameter(arcAdaptor, arcEdge.Location(), Points[3]);
                if ((firstU <= thirdPointU) && (thirdPointU <= lastU))
                {
                    reversedArc = false;
                }
            }

            var builder = new NodeBuilder(document, FunctionNames.Arc);

            builder[0].Reference = circleCenterBuilder.Node;
            builder[1].Reference = reversedArc ? secondPointBuilder.Node : firstPointBuilder.Node;
            builder[2].Reference = reversedArc ? firstPointBuilder.Node : secondPointBuilder.Node;
            builder.ExecuteFunction();
            return(builder);
        }
        /// <summary>
        ///   Builds a rectangle from 3 points received as parameter
        ///   Rectangle:
        ///   P2--------P3
        ///   P1--------P4
        /// </summary>
        public static TopoDSFace BuildRectangle(Point3D firstPoint, Point3D secondPoint, Point3D thirdPoint)
        {
            var fourth = new gpPnt();

            GeomUtils.CalculateRectangleVertexes(firstPoint.GpPnt, secondPoint.GpPnt, thirdPoint.GpPnt, ref fourth);
            var fourthPoint = new Point3D(fourth);

            // Check for point coincidence
            if (firstPoint.IsEqual(secondPoint) ||
                secondPoint.IsEqual(thirdPoint) ||
                thirdPoint.IsEqual(fourthPoint) ||
                fourthPoint.IsEqual(firstPoint))
            {
                return(null);
            }

            var aEdge1 = new BRepBuilderAPIMakeEdge(firstPoint.GpPnt, secondPoint.GpPnt).Edge;
            var aEdge2 = new BRepBuilderAPIMakeEdge(secondPoint.GpPnt, thirdPoint.GpPnt).Edge;
            var aEdge3 = new BRepBuilderAPIMakeEdge(thirdPoint.GpPnt, fourthPoint.GpPnt).Edge;
            var aEdge4 = new BRepBuilderAPIMakeEdge(fourthPoint.GpPnt, firstPoint.GpPnt).Edge;

            var aWire = new BRepBuilderAPIMakeWire(aEdge1, aEdge2, aEdge3, aEdge4).Wire;

            if (aWire.IsNull)
            {
                return(null);
            }

            var faceProfile = new BRepBuilderAPIMakeFace(aWire, false).Face;

            return(faceProfile.IsNull ? null : faceProfile);
        }
Exemple #7
0
        public override bool Execute()
        {
            var dependency       = Builder.Node.Get <FunctionInterpreter>().Dependency;
            var firstData        = dependency[Constant.StepIndexBeamFirstNode].ReferenceData;
            var firstNode        = firstData.Node;
            var firstIndex       = firstData.ShapeCount;
            var firstPointValue  = ShapeUtils.ExtractShapesPoint(firstNode, firstIndex);
            var secondData       = dependency[Constant.StepIndexBeamSecondNode].ReferenceData;
            var secondNode       = secondData.Node;
            var secondIndex      = secondData.ShapeCount;
            var secondPointValue = ShapeUtils.ExtractShapesPoint(secondNode, secondIndex);

            if (firstPointValue.IsEqual(secondPointValue, Precision.Confusion))
            {
                return(false);
            }

            NodeUtils.Hide(firstNode);
            NodeUtils.Hide(secondNode);

            var aEdge = new BRepBuilderAPIMakeEdge(firstPointValue, secondPointValue).Edge;
            var wire  = new BRepBuilderAPIMakeWire(aEdge).Wire;

            Shape = wire;

            return(true);
        }
        private TopoDSWire Wire(Point3D firstPoint, Point3D secondPoint)
        {
            var aEdge2 = new BRepBuilderAPIMakeEdge(firstPoint.GpPnt, secondPoint.GpPnt).Edge;
            var wire   = new BRepBuilderAPIMakeWire(aEdge2).Wire;

            return(wire);
        }
Exemple #9
0
        protected override bool Extract(SolverGeometricObject data)
        {
            var builder     = Builder;
            var firstPoint  = builder[0].TransformedPoint3D.AddCoordinate(new Point3D(-1000, 0, 0));
            var secondPoint = firstPoint.AddCoordinate(new Point3D(2000, 0, 0));
            var edge        = new BRepBuilderAPIMakeEdge(firstPoint.GpPnt, secondPoint.GpPnt).Edge;

            data.Edges.Add(new SolverEdge(edge));
            return(true);
        }
        public void IntersectionPointTest()
        {
            var edge1 = new BRepBuilderAPIMakeEdge(new gpPnt(0, 0, 0), new gpPnt(5, 5, 0)).Edge;
            var edge2 = new BRepBuilderAPIMakeEdge(new gpPnt(2, 0, 0), new gpPnt(2, 5, 0)).Edge;

            var result = GeomUtils.IntersectionPoints(edge1, edge2);

            Assert.IsTrue(result.Count > 0, "invalid intersection");
            Assert.IsTrue(result[0].IsEqual(new Point3D(2, 2, 0)), "Invalid intersection solution");
        }
        private static TopoDSShape CreateLine(Point3D first, Point3D second)
        {
            if (first.IsEqual(second))
            {
                return(null);
            }

            var aEdge = new BRepBuilderAPIMakeEdge(first.GpPnt, second.GpPnt).Edge;

            return(new BRepBuilderAPIMakeWire(aEdge).Wire);
        }
        /// <summary>
        ///   Build a cicle knowing the axis that describe the center (location and direction)
        ///   and also the radius value
        /// </summary>
        public static TopoDSWire CreateWireCircle(gpAx1 centerAxis, double radius)
        {
            var centerCoord = new gpAx2 {
                Axis = (centerAxis)
            };
            var circle = new gpCirc(centerCoord, radius);

            var edge = new BRepBuilderAPIMakeEdge(circle).Edge;
            var wire = new BRepBuilderAPIMakeWire(edge).Wire;

            return(wire);
        }
        public void UParameterTest()
        {
            var edge  = new BRepBuilderAPIMakeEdge(new gpPnt(1, 1, 0), new gpPnt(5, 5, 0)).Edge;
            var curve = new BRepAdaptorCurve(edge);

            var location = new TopLocLocation(GeomUtils.BuildTranslation(new Point3D(0, 0, 0), new Point3D(1, 1, 0)));

            Assert.IsTrue(
                Math.Abs(GeomUtils.UParameter(curve, location, new Point3D(1, 1, 0)).Value - curve.FirstParameter) <
                0.1, "invalid first parameter");
            Assert.IsTrue(
                Math.Abs(GeomUtils.UParameter(curve, location, new Point3D(5, 5, 0)).Value - curve.LastParameter) <
                0.1, "invalid last parameter");
        }
        public static TopoDSWire BuildSplineWire(ICollection <Point3D> pointList)
        {
            var array = new TColgpArray1OfPnt(1, pointList.Count); // sizing array
            var index = 1;

            foreach (var point3D in pointList)
            {
                array.SetValue(index, point3D.GpPnt);
                index++;
            }

            var curve = new GeomBezierCurve(array);
            var edge  = new BRepBuilderAPIMakeEdge(curve).Edge;

            return(new BRepBuilderAPIMakeWire(edge).Wire);
        }
        /// <summary>
        ///   Builds an ellipse from 3 points in space
        /// </summary>
        private static TopoDSWire BuildEllipse(Point3D center, Point3D secondPoint, Point3D thirdPoint)
        {
            double minorRadius;
            double majorRadius;
            bool   reversed;
            gpDir  dirX = null;
            gpDir  dirY = null;

            if (secondPoint.GpPnt.Distance(thirdPoint.GpPnt) < Precision.Confusion)
            {
                return(null);
            }


            if (!TreeUtils.ComputeEllipseRadiuses(center, secondPoint, thirdPoint,
                                                  out minorRadius, out majorRadius, out reversed,
                                                  ref dirX, ref dirY))
            {
                return(null);
            }
            // Build a plane from the 3 points
            var plane = GeomUtils.BuildPlane(center, secondPoint, thirdPoint);
            var ax1   = plane.Axis;
            var ax2   = new gpAx2();

            ax2.Axis     = (ax1);
            ax2.Location = (center.GpPnt);

            // If major and minor radius are reversed also their directions arereversed
            if (!reversed)
            {
                ax2.XDirection = (dirX);
                ax2.YDirection = (dirY);
            }
            else
            {
                ax2.XDirection = (dirY);
                ax2.YDirection = (dirX);
            }

            var ellipse = new GeomEllipse(ax2, majorRadius, minorRadius);
            var edge    = new BRepBuilderAPIMakeEdge(ellipse).Edge;
            var wire    = new BRepBuilderAPIMakeWire(edge).Wire;

            return(wire);
        }
        public override bool Execute()
        {
            var firstPoint       = Dependency[0].TransformedPoint3D;
            var secondPoint      = Dependency[1].TransformedPoint3D;
            var colorOrientation = Dependency[2].Integer;
            var color            = QuantityNameOfColor.Quantity_NOC_RED;
            var aEdge            = new BRepBuilderAPIMakeEdge(firstPoint.GpPnt, secondPoint.GpPnt).Edge;
            var wire             = new BRepBuilderAPIMakeWire(aEdge).Wire;
            var temporaryShape   = new AISShape(wire);
            var drawer           = temporaryShape.Attributes;

            //need fixed the coloring
            //     drawer.WireAspect = (new Prs3dLineAspect(color, AspectTypeOfLine.Aspect_TOL_DOT,3));

            Interactive = temporaryShape;
            return(true);
        }
Exemple #17
0
        public override bool Execute()
        {
            var firstPoint  = Dependency[0].RefTransformedPoint3D;
            var secondPoint = Dependency[1].RefTransformedPoint3D;

            if (firstPoint.IsEqual(secondPoint))
            {
                return(false);
            }

            var aEdge = new BRepBuilderAPIMakeEdge(firstPoint.GpPnt, secondPoint.GpPnt).Edge;
            var wire  = new BRepBuilderAPIMakeWire(aEdge).Wire;

            Shape = wire;

            return(true);
        }
Exemple #18
0
        private static void InitializeGeometry(ICollection <SolverGeometricObject> geometry)
        {
            // Make a rectangle
            var rectObject = new SolverGeometricObject(null);

            // Add some dummy points
            rectObject.Points.Add(new SolverDataPoint(new Point3D(0, 0, 0), GeometryType.EndPoint));
            rectObject.Points.Add(new SolverDataPoint(new Point3D(10, 10, 0), GeometryType.EndPoint));
            rectObject.Points.Add(new SolverDataPoint(new Point3D(0, 10, 0), GeometryType.EndPoint));
            rectObject.Points.Add(new SolverDataPoint(new Point3D(10, 0, 0), GeometryType.EndPoint));
            rectObject.Points.Add(new SolverDataPoint(new Point3D(-10, -10, 0), GeometryType.EndPoint));

            // Add two edges to intersect
            var edge1 = new BRepBuilderAPIMakeEdge(new Point3D(0, 0, 0).GpPnt, new Point3D(10, 10, 0).GpPnt).Edge;

            rectObject.Edges.Add(new SolverEdge(edge1));
            var edge2 = new BRepBuilderAPIMakeEdge(new Point3D(0, 10, 0).GpPnt, new Point3D(10, 0, 0).GpPnt).Edge;

            rectObject.Edges.Add(new SolverEdge(edge2));

            geometry.Add(rectObject);
        }
        public static TopoDSShape CreateArcShape(Point3D point1, Point3D point2, Point3D point3)
        {
            if (point1.IsEqual(point2) || point1.IsEqual(point3) || point2.IsEqual(point3))
            {
                return(null);
            }

            var line = new gpLin(point1.GpPnt, new gpDir(new gpVec(point1.GpPnt, point2.GpPnt)));

            if (line.Distance(point3.GpPnt) < Precision.Confusion)
            {
                return(null);
            }

            var gceCirc    = new gceMakeCirc(point1.GpPnt, point2.GpPnt, point3.GpPnt);
            var circle     = gceCirc.Value;
            var arc        = new GCMakeArcOfCircle(circle, point2.GpPnt, point1.GpPnt, true);
            var curve      = arc.Value;
            var edge       = new BRepBuilderAPIMakeEdge(curve).Edge;
            var circleWire = new BRepBuilderAPIMakeWire(edge).Wire;

            return(circleWire);
        }
        public static TopoDSWire CreateLineWire(Point3D firstPoint, Point3D secondPoint)
        {
            var aEdge = new BRepBuilderAPIMakeEdge(firstPoint.GpPnt, secondPoint.GpPnt).Edge;

            return(new BRepBuilderAPIMakeWire(aEdge).Wire);
        }