Example #1
0
        /// <summary>
        ///   Builds the solver info (magic points and planes) receiving as parameter a shape.
        /// </summary>
        /// <param name = "solverObject"></param>
        /// <param name = "shape"></param>
        /// <param name = "parallelPrecision"></param>
        /// <param name = "computeParallelism"></param>
        public static void BuildSolverInfo(SolverGeometricObject solverObject, Node shape,
                                           double parallelPrecision, bool computeParallelism)
        {
            var solidShape = ShapeUtils.ExtractShape(solverObject.Parent);

            // Build a list with the magic points made by the vertexes
            BuildPointList(shape, solverObject);
            var functionName = shape.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name;

            if (functionName == FunctionNames.LineTwoPoints || functionName == FunctionNames.Arc ||
                functionName == FunctionNames.Arc3P || functionName == FunctionNames.Circle ||
                functionName == FunctionNames.Ellipse)
            {
                // Build a list with the edges
                BuildEdgeList(solidShape, solverObject);
            }
            // Build a list with the magic points made by the faces/surfaces
            BuildFaceList(solidShape, solverObject);

            // Build a list with parallel axis
            if (!computeParallelism)
            {
                return;
            }
            if (NodeBuilderUtils.NodeIsOnSketch(new NodeBuilder(shape)))
            {
                BuildParallelAxisList(solidShape, solverObject, parallelPrecision);
            }
        }
 public static Point3D ComputePointPosition(Node node, int vertexIndex)
 {
     if (node == null)
     {
         throw new ArgumentNullException("node");
     }
     return(ShapeUtils.ExtractShape(node) == null
                ? new Point3D()
                : new Point3D(ShapeUtils.ExtractShapesPoint(node, vertexIndex)));
 }
        public override bool Execute()
        {
            var edgeNode      = Dependency[0].Reference;
            var edgeIndexNode = Dependency[0].ReferenceData.ShapeCount;

            if (ShapeUtils.ExtractShape(edgeNode) == null)
            {
                return(false);
            }
            var edge =
                TopoDS.Edge(ShapeUtils.ExtractSubShape(edgeNode, edgeIndexNode, TopAbsShapeEnum.TopAbs_EDGE));
            var distance = Dependency[1].Real;

            var referenceShape           = Dependency[2].Reference;
            var referebceShapePointIndex = Dependency[3].Integer;

            if (referenceShape == null)
            {
                return(false);
            }
            var point = NodeBuilderUtils.GetNodePoint(referenceShape[referebceShapePointIndex]);

            if (point != null)
            {
                var projectionPoint = GeomUtils.ProjectPointOnEdge(edge, ((Point3D)point).GpPnt);
                var newPoint        = new Point3D(projectionPoint);
                var currentDistance = projectionPoint.Distance(((Point3D)point).GpPnt);
                if (Math.Abs(currentDistance - distance) > 0.01)
                {
                    var scale = currentDistance / distance;
                    if (Math.Abs(scale - 1) > Precision.Confusion)
                    {
                        newPoint = TreeUtils.ScaleSegment(newPoint, ((Point3D)point), scale);
                    }
                }

                NodeBuilderUtils.SetupNodePoint(referenceShape[referebceShapePointIndex], newPoint);
            }
            return(true);
        }