--- /dev/null
+// File: LProp_FuncCurNul.gxx
+// Created: Mon Sep 5 14:53:57 1994
+// Author: Yves FRICAUD
+// <yfr@ecolox>
+
+#include <gp.hxx>
+#include <Precision.hxx>
+
+//=============================================================================
+//function :
+// purpose :
+//=============================================================================
+LProp_FuncCurNul::LProp_FuncCurNul(const Curve& C)
+:theCurve(C)
+{
+}
+
+//=============================================================================
+//function : Value
+// purpose : F = (V1^V2.Z)/||V1||*||V2||
+//=============================================================================
+Standard_Boolean LProp_FuncCurNul::Value (const Standard_Real X,
+ Standard_Real& F)
+{
+ Standard_Real D;
+ return Values(X,F,D);
+}
+
+//=============================================================================
+//function : Derivative
+// purpose :
+//=============================================================================
+Standard_Boolean LProp_FuncCurNul::Derivative(const Standard_Real X,
+ Standard_Real& D)
+{
+ Standard_Real F;
+ return Values(X,F,D);
+}
+
+//=============================================================================
+//function : Values
+// purpose : F = (V1^V2.Z)/||V1||*||V2||
+//=============================================================================
+Standard_Boolean LProp_FuncCurNul::Values (const Standard_Real X,
+ Standard_Real& F,
+ Standard_Real& D)
+{
+ Pnt P1;
+ Vec V1,V2,V3;
+ Tool::D3(theCurve,X,P1,V1,V2,V3);
+ Standard_Real CP1 = V1.Crossed(V2);
+ Standard_Real CP2 = V1.Crossed(V3);
+ Standard_Real V1V2 = V1.Dot(V2);
+ Standard_Real V2V3 = V2.Dot(V3);
+ Standard_Real NV1 = V1.Magnitude();
+ Standard_Real NV2 = V2.Magnitude();
+
+ F = 0. ;
+ D = 0. ;
+
+/*
+ if (Abs(CP1) < 1.e-4) {
+ return Standard_True;
+ } else */
+
+ if (NV2 < 1.e-4) {
+ return Standard_True;
+ } else if (NV1*NV2 < gp::Resolution()) {
+ return Standard_False;
+ } else {
+ F = CP1/(NV1*NV2);
+ D = (CP2 - CP1*V1V2/(NV1*NV1) - CP1*V2V3/(NV2*NV2))/(NV1*NV2);
+ }
+ return Standard_True;
+
+}
+
+
+