29 #include "Geom_Line.hxx"
31 #include "Geom_Circle.hxx"
32 #include "gp_Circ.hxx"
33 #include "Geom_Ellipse.hxx"
34 #include "gp_Elips.hxx"
35 #include "Geom_Hyperbola.hxx"
36 #include "gp_Hypr.hxx"
37 #include "Geom_Parabola.hxx"
38 #include "gp_Parab.hxx"
39 #include "Geom_BezierCurve.hxx"
40 #include "Geom_BSplineCurve.hxx"
41 #include "GCPnts_AbscissaPoint.hxx"
42 #include "GeomAdaptor_Curve.hxx"
43 #include "GeomAbs_CurveType.hxx"
44 #include "GeomAPI.hxx"
45 #include "Geom2d_Curve.hxx"
47 #include "GeomAPI_ProjectPointOnCurve.hxx"
48 #include "ShapeAnalysis_Curve.hxx"
50 #include "BRep_Tool.hxx"
51 #include "GeomConvert.hxx"
52 #include <Geom_TrimmedCurve.hxx>
58 #pragma package(smart_init)
62 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
63 t_min=courbe->FirstParameter();
64 t_max=courbe->LastParameter();
69 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
70 t_min=courbe->FirstParameter();
71 t_max=courbe->LastParameter();
93 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
103 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
114 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
125 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
130 courbe->D2(t,
P,V1,
V2);
148 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
150 double tmin=courbe->FirstParameter();
151 double tmax=courbe->LastParameter();
152 double xyz1[3],xyz2[3];
155 double max=fabs(xyz1[0]);
156 if (max<fabs(xyz1[1])) max=fabs(xyz1[1]);
157 if (max<fabs(xyz1[2])) max=fabs(xyz1[2]);
158 if (max<fabs(xyz2[0])) max=fabs(xyz2[0]);
159 if (max<fabs(xyz2[1])) max=fabs(xyz2[1]);
160 if (max<fabs(xyz2[2])) max=fabs(xyz2[2]);
161 double eps=precision*max;
181 GeomAPI_ProjectPointOnCurve PPC(
P,courbe);
185 t=PPC.LowerDistanceParameter();
196 GeomAPI_ProjectPointOnCurve projecteur;
197 double u0_edge,u1_edge;
198 Handle(Geom_Curve) courbe = BRep_Tool::Curve(
edge,u0_edge,u1_edge);
199 gp_Pnt point(xyz[0],xyz[1],xyz[2]);
200 projecteur.Init(point,courbe,u0_edge,u1_edge);
201 if(projecteur.NbPoints()==0)
return false;
202 if(projecteur.LowerDistance()<precision)
return true;
210 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
211 return courbe->IsClosed();
216 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
217 if (courbe->IsPeriodic())
return courbe->Period();
224 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
226 GeomAdaptor_Curve cc(courbe);
227 longueur= GCPnts_AbscissaPoint::Length(cc,t1,t2,precis);
248 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
249 Handle(Standard_Type) type=courbe->DynamicType();
251 if (type==STANDARD_TYPE(Geom_Line))
253 Handle(Geom_Line) droite=Handle(Geom_Line)::DownCast(courbe);
254 gp_Lin lin=droite->Lin();
257 gp_Pnt centre=lin.Location();
258 origine[0]=centre.X();
259 origine[1]=centre.Y();
260 origine[2]=centre.Z();
262 gp_Dir dir=lin.Direction();
263 direction[0]=dir.X();
264 direction[1]=dir.Y();
265 direction[2]=dir.Z();
278 if (type==STANDARD_TYPE(Geom_Circle))
280 Handle(Geom_Circle) circle=Handle_Geom_Circle::DownCast(courbe);
281 gp_Circ Circ=circle->Circ();
284 gp_Pnt centre=Circ.Location();
285 origine[0]=centre.X();
286 origine[1]=centre.Y();
287 origine[2]=centre.Z();
290 gp_Ax1 axe=Circ.Axis();
291 gp_Dir dir=axe.Direction();
292 direction[0]=dir.X();
293 direction[1]=dir.Y();
294 direction[2]=dir.Z();
310 if (type==STANDARD_TYPE(Geom_Ellipse))
312 Handle(Geom_Ellipse) ellipse=Handle_Geom_Ellipse::DownCast(courbe);
313 gp_Elips Elips=ellipse->Elips();
316 gp_Pnt centre=Elips.Location();
317 origine[0]=centre.X();
318 origine[1]=centre.Y();
319 origine[2]=centre.Z();
322 Grayon=Elips.MajorRadius();
323 double Xdirectrise[3];
324 gp_Ax1 Xaxe=Elips.Directrix1();
325 gp_Dir dir=Xaxe.Direction();
326 Xdirectrise[0]=dir.X();
327 Xdirectrise[1]=dir.Y();
328 Xdirectrise[2]=dir.Z();
330 Prayon=Elips.MinorRadius();
331 double Ydirectrise[3];
332 gp_Ax1 Yaxe=Elips.Directrix2();
333 gp_Dir dir1=Yaxe.Direction();
334 Ydirectrise[0]=dir1.X();
335 Ydirectrise[1]=dir1.Y();
336 Ydirectrise[2]=dir1.Z();
429 if (type==STANDARD_TYPE(Geom_BSplineCurve))
431 Handle(Geom_BSplineCurve) bspline=Handle_Geom_BSplineCurve::DownCast(courbe);
433 int nb_knot=bspline->NbKnots();
434 for (
int i=1; i<=nb_knot; i++)
436 double valeur=bspline->Knot(i);
441 for (
int u=1; u<=bspline->NbPoles(); u++)
443 pctr=bspline->Pole(u);
447 poids=bspline->Weight(u);
451 double Degree=bspline->Degree();
465 Handle(Geom_Curve) courbe=BRep_Tool::Curve(
edge, first, last);
466 Handle(Geom_TrimmedCurve) curv=
new Geom_TrimmedCurve(courbe, first, last);
467 Handle(Geom_BSplineCurve) bspline=GeomConvert::CurveToBSplineCurve(curv) ;
472 param.
ajouter(bspline->Degree()+1);
477 param.
ajouter(bspline->NbPoles());
482 for (
unsigned int i=1;i<=bspline->NbKnots();i++)
484 param.
ajouter(bspline->Knot(i));
488 for (
unsigned int j=1;j<=bspline->NbPoles();j++)
490 double w=bspline->Weight(j);
491 gp_Pnt point=bspline->Pole(j);
500 indx_premier_ptctr=5+bspline->NbKnots();