private Inventor.Point GetEdgePointAtParam(Inventor.EdgeUse EdgeUse, double Pt) { Inventor.TransientGeometry TransientGeometry = mInvApplication.TransientGeometry; Inventor.CurveEvaluator CurveEvaluator; double[] Param = new double[0]; double[] Pnt = new double[3]; Param[0] = Pt; CurveEvaluator = EdgeUse.Edge.Evaluator; CurveEvaluator.GetPointAtParam(ref Param, ref Pnt); return(TransientGeometry.CreatePoint(Pnt[0], Pnt[1], Pnt[2])); }
private Inventor.UnitVector GetTangentAtParam(Inventor.EdgeUse EdgeUse, double Pt) { Inventor.TransientGeometry TransientGeometry = mInvApplication.TransientGeometry; Inventor.CurveEvaluator CurveEvaluator; double[] Param = new double[0]; double[] v = new double[3]; Param[0] = Pt; CurveEvaluator = EdgeUse.Edge.Evaluator; CurveEvaluator.GetPointAtParam(ref Param, ref v); if (EdgeUse.IsOpposedToEdge) { return(TransientGeometry.CreateUnitVector(-v[0], -v[1], -v[2])); } else { return(TransientGeometry.CreateUnitVector(v[0], v[1], v[2])); } }
/// <summary> /// select an edge a dump its first deriv and tangent /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button3_Click(object sender, EventArgs e) { if (((mApp.ActiveDocument != null))) { if ((mApp.ActiveDocument.DocumentType == DocumentTypeEnum.kPartDocumentObject)) { PartDocument oDoc = mApp.ActiveDocument as PartDocument; if ((oDoc.SelectSet.Count == 1)) { if (((oDoc.SelectSet[1]) is Edge)) { Edge oEdge = oDoc.SelectSet[1] as Edge; CurveEvaluator oCurveEval = oEdge.Evaluator; double MinParam = 0; double MaxParam = 0; oCurveEval.GetParamExtents(out MinParam, out MaxParam); double length = 0; oCurveEval.GetLengthAtParam(MinParam, MaxParam, out length); double MidParam = 0; oCurveEval.GetParamAtLength(MinParam, length * 0.5, out MidParam); double[] Params = { MidParam }; double[] Points = new double[3 * Params.Length]; oCurveEval.GetPointAtParam(ref Params, ref Points); double[] Directions = new double[3 * Params.Length]; double[] Curvatures = new double[Params.Length]; oCurveEval.GetCurvature(ref Params, ref Directions, ref Curvatures); double[] Tangents = new double[3 * Params.Length]; oCurveEval.GetTangent(ref Params, ref Tangents); double[] FirstDeriv = new double[3 * Params.Length]; oCurveEval.GetFirstDerivatives(ref Params, ref FirstDeriv); string strResult = "Curve Properties: \n\n"; strResult += " - Length: " + length.ToString("F2") + "\n\n"; strResult += " - Middle point: [" + Points[0].ToString("F2") + ", " + Points[1].ToString("F2") + ", " + Points[2].ToString("F2") + "]" + "\n\n"; strResult += " - Curvature: " + Curvatures[0].ToString("F2") + "\n\n"; strResult += " - Tangent: [" + Tangents[0].ToString("F2") + ", " + Tangents[1].ToString("F2") + ", " + Tangents[2].ToString("F2") + "]" + "\n\n"; strResult += " - First derivative: [" + FirstDeriv[0].ToString("F2") + ", " + FirstDeriv[1].ToString("F2") + ", " + FirstDeriv[2].ToString("F2") + "]" + "\n\n"; System.Windows.Forms.MessageBox.Show(strResult, "Curve Evaluator"); return; } else { System.Windows.Forms.MessageBox.Show("Selected entity must be an Edge", "Curve Evaluator"); return; } } else { System.Windows.Forms.MessageBox.Show("A single Edge must be selected first", "Curve Evaluator"); return; } } } }