/// <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); }