OpenLexocad  27.1
Geometry.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (c) 2008 Werner Mayer <wmayer[at]users.sourceforge.net> *
3  * *
4  * This file is part of the FreeCAD CAx development system. *
5  * *
6  * This library is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Library General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2 of the License, or (at your option) any later version. *
10  * *
11  * This library is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14  * GNU Library General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Library General Public *
17  * License along with this library; see the file COPYING.LIB. If not, *
18  * write to the Free Software Foundation, Inc., 59 Temple Place, *
19  * Suite 330, Boston, MA 02111-1307, USA *
20  * *
21  ***************************************************************************/
22 
23 
24 #ifndef PART_GEOMETRY_H
25 #define PART_GEOMETRY_H
26 
27 #include <Adaptor3d_Curve.hxx>
28 #include <Geom_CartesianPoint.hxx>
29 #include <Geom_BezierCurve.hxx>
30 #include <Geom_BSplineCurve.hxx>
31 #include <Geom_Circle.hxx>
32 #include <Geom_Ellipse.hxx>
33 #include <Geom_Hyperbola.hxx>
34 #include <Geom_Parabola.hxx>
35 #include <Geom_Line.hxx>
36 #include <Geom_OffsetCurve.hxx>
37 #include <Geom_TrimmedCurve.hxx>
38 #include <Geom_Surface.hxx>
39 #include <Geom_BezierSurface.hxx>
40 #include <Geom_BSplineSurface.hxx>
41 #include <Geom_CylindricalSurface.hxx>
42 #include <Geom_ConicalSurface.hxx>
43 #include <Geom_SphericalSurface.hxx>
44 #include <Geom_ToroidalSurface.hxx>
45 #include <Geom_Plane.hxx>
46 #include <Geom_OffsetSurface.hxx>
47 #include <GeomPlate_Surface.hxx>
48 #include <Geom_RectangularTrimmedSurface.hxx>
49 #include <Geom_SurfaceOfRevolution.hxx>
50 #include <Geom_SurfaceOfLinearExtrusion.hxx>
51 #include <GeomPlate_BuildPlateSurface.hxx>
52 #include <Plate_Plate.hxx>
53 #include <TopoDS_Shape.hxx>
54 #include <gp_Ax1.hxx>
55 #include <gp_Dir.hxx>
56 #include <gp_Pnt.hxx>
57 #include <gp_Vec.hxx>
58 #include <list>
59 #include <memory>
60 #include <vector>
61 #include <Base/Persistence.h>
62 #include <Base/Vector3D.h>
63 #include <Base/Matrix.h>
64 #include <Base/Placement.h>
65 #include <Geom/Lin.h>
66 #include <Geom/Circ.h>
67 
68 #include <boost/uuid/uuid.hpp>
69 #include <boost/uuid/uuid_generators.hpp>
70 
71 #include "GeometryExtension.h"
72 
73 namespace Geom {
74 
75 class LX_GEOM_EXPORT Geometry: public Base::Persistence
76 {
78 public:
79  virtual ~Geometry();
80 
81  virtual TopoDS_Shape toShape() const = 0;
82  virtual const Handle(Geom_Geometry)& handle() const = 0;
83  // Persistence implementer ---------------------
84 
85  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
86  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
90  virtual Geometry *copy(void) const = 0;
97  Geometry *clone(void) const;
99  boost::uuids::uuid getTag() const;
100 
101  std::vector<std::weak_ptr<const GeometryExtension>> getExtensions() const;
102 
103  bool hasExtension(Base::Type type) const;
104  bool hasExtension(std::string name) const;
105  std::weak_ptr<const GeometryExtension> getExtension(Base::Type type) const;
106  std::weak_ptr<const GeometryExtension> getExtension(std::string name) const;
107  std::weak_ptr<GeometryExtension> getExtension(Base::Type type);
108  std::weak_ptr<GeometryExtension> getExtension(std::string name);
109  void setExtension(std::unique_ptr<GeometryExtension> &&geo);
110  void deleteExtension(Base::Type type);
111  void deleteExtension(std::string name);
112 
113  void mirror(const Base::Vector3d& point);
114  void mirror(const Base::Vector3d& point, const Base::Vector3d& dir);
115  void rotate(const Base::Placement& plm);
116  void scale(const Base::Vector3d& vec, double scale);
117  void transform(const Base::Matrix4D& mat);
118  void translate(const Base::Vector3d& vec);
119 
120 protected:
122  void createNewTag();
124  void assignTag(const Geom::Geometry *);
125 
126  void copyNonTag(const Geom::Geometry *);
127 
128 protected:
129  Geometry();
130 
131 protected:
132  boost::uuids::uuid tag;
133  std::vector<std::shared_ptr<GeometryExtension>> extensions;
134 
135 private:
136  Geometry(const Geometry&);
137  Geometry& operator = (const Geometry&);
138 };
139 
140 class LX_GEOM_EXPORT GeomPoint : public Geometry
141 {
143 public:
144  GeomPoint();
145  GeomPoint(const Handle(Geom_CartesianPoint)&);
146  GeomPoint(const Base::Vector3d&);
147  GeomPoint(const Geom::Pnt& aPnt);
148  virtual ~GeomPoint();
149  virtual Geometry *copy(void) const;
150  virtual TopoDS_Shape toShape() const;
151 
152  // Persistence implementer ---------------------
153 
154  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
155  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
156  // Base implementer ----------------------------
157 
158 
159  const Handle(Geom_Geometry)& handle() const;
160  void setHandle(const Handle(Geom_CartesianPoint)&);
161 
162  Base::Vector3d getPoint(void)const;
163  void setPoint(const Base::Vector3d&);
164 
165 private:
166  Handle(Geom_CartesianPoint) myPoint;
167 };
168 
169 class GeomBSplineCurve;
170 class LX_GEOM_EXPORT GeomCurve : public Geometry
171 {
173 public:
174  GeomCurve();
175  virtual ~GeomCurve();
176 
177  TopoDS_Shape toShape() const;
184  GeomBSplineCurve* toBSpline(double first, double last) const;
190  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
191  bool tangent(double u, gp_Dir&) const;
192  bool tangent(double u, Base::Vector3d& dir) const;
193  Base::Vector3d pointAtParameter(double u) const;
194  Base::Vector3d firstDerivativeAtParameter(double u) const;
195  Base::Vector3d secondDerivativeAtParameter(double u) const;
196  bool closestParameter(const Base::Vector3d& point, double &u) const;
197  bool closestParameterToBasisCurve(const Base::Vector3d& point, double &u) const;
198  double getFirstParameter() const;
199  double getLastParameter() const;
200  double curvatureAt(double u) const;
201  double length(double u, double v) const;
202  bool normalAt(double u, Base::Vector3d& dir) const;
203  bool intersect(GeomCurve * c,
204  std::vector<std::pair<Base::Vector3d, Base::Vector3d>>& points,
205  double tol = ::Precision::Confusion()) const;
206 
207  void reverse(void);
208 
209 protected:
210  static bool intersect(const Handle(Geom_Curve) c, const Handle(Geom_Curve) c2,
211  std::vector<std::pair<Base::Vector3d, Base::Vector3d>>& points,
212  double tol = ::Precision::Confusion());
213 };
214 
215 class LX_GEOM_EXPORT GeomBoundedCurve : public GeomCurve
216 {
218 public:
220  virtual ~GeomBoundedCurve();
221 
222  // Geometry helper
223  virtual Base::Vector3d getStartPoint() const;
224  virtual Base::Vector3d getEndPoint() const;
225 };
226 
227 class LX_GEOM_EXPORT GeomBezierCurve : public GeomBoundedCurve
228 {
230 public:
231  GeomBezierCurve();
232  GeomBezierCurve(const Handle(Geom_BezierCurve)&);
233  GeomBezierCurve(const std::vector<Base::Vector3d>&, const std::vector<double>&);
234  virtual ~GeomBezierCurve();
235  virtual Geometry *copy(void) const;
236  std::vector<Base::Vector3d> getPoles() const;
237  std::vector<double> getWeights() const;
238 
239  // Persistence implementer ---------------------
240  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
241  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
242  // Base implementer ----------------------------
243 
244 
245  void setHandle(const Handle(Geom_BezierCurve)&);
246  const Handle(Geom_Geometry)& handle() const;
247 
248 private:
249  Handle(Geom_BezierCurve) myCurve;
250 };
251 
252 class LX_GEOM_EXPORT GeomBSplineCurve : public GeomBoundedCurve
253 {
255 public:
257  GeomBSplineCurve(const Handle(Geom_BSplineCurve)&);
258 
259  GeomBSplineCurve( const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights,
260  const std::vector<double>& knots, const std::vector<int>& multiplicities,
261  int degree, bool periodic=false, bool checkrational = true);
262 
263  virtual ~GeomBSplineCurve();
264  virtual Geometry *copy(void) const;
265 
269  void interpolate(const std::vector<gp_Pnt>&, const std::vector<gp_Vec>&);
274  void getCardinalSplineTangents(const std::vector<gp_Pnt>&,
275  const std::vector<double>&,
276  std::vector<gp_Vec>&) const;
282  void getCardinalSplineTangents(const std::vector<gp_Pnt>&, double,
283  std::vector<gp_Vec>&) const;
284 
285  int countPoles() const;
286  int countKnots() const;
287  void setPole(int index, const Base::Vector3d&, double weight=-1);
288  void setPoles(const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights);
289  void setPoles(const std::vector<Base::Vector3d>& poles);
290  void setWeights(const std::vector<double>& weights);
291  void setKnot(int index, const double val, int mult=-1);
292  void setKnots(const std::vector<double>& knots);
293  void setKnots(const std::vector<double>& knots, const std::vector<int>& multiplicities);
294  std::vector<Base::Vector3d> getPoles() const;
295  std::vector<double> getWeights() const;
296  std::vector<double> getKnots() const;
297  std::vector<int> getMultiplicities() const;
298  int getMultiplicity(int index) const;
299  int getDegree() const;
300  bool isPeriodic() const;
301  bool isRational() const;
302  bool join(const Handle(Geom_BSplineCurve)&);
303  void makeC1Continuous(double, double);
304  std::list<Geometry*> toBiArcs(double tolerance) const;
305 
306  void increaseDegree(int degree);
307  bool approximate(double tol3d, int maxSegments, int maxDegree, int continuity);
308 
309  void increaseMultiplicity(int index, int multiplicity);
310  bool removeKnot(int index, int multiplicity, double tolerance = ::Precision::PConfusion());
311 
312  // Persistence implementer ---------------------
313 
314  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
315  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
316  // Base implementer ----------------------------
317 
318 
319  void setHandle(const Handle(Geom_BSplineCurve)&);
320  const Handle(Geom_Geometry)& handle() const;
321 
322 private:
323  void createArcs(double tolerance, std::list<Geometry*>& new_spans,
324  const gp_Pnt &p_start, const gp_Vec &v_start,
325  double t_start, double t_end, gp_Pnt &p_end, gp_Vec &v_end) const;
326  bool calculateBiArcPoints(const gp_Pnt& p0, gp_Vec v_start,
327  const gp_Pnt& p4, gp_Vec v_end,
328  gp_Pnt& p1, gp_Pnt& p2, gp_Pnt& p3) const;
329 private:
330  Handle(Geom_BSplineCurve) myCurve;
331 };
332 
333 class LX_GEOM_EXPORT GeomConic : public GeomCurve
334 {
336 
337 protected:
338  GeomConic();
339 
340 public:
341  virtual ~GeomConic();
342  virtual Geometry *copy(void) const = 0;
343 
348  Base::Vector3d getCenter(void) const;
349  Base::Vector3d getLocation(void) const;
350  void setLocation(const Base::Vector3d& Center);
355  void setCenter(const Base::Vector3d& Center);
356  double getAngleXU(void) const;
357  void setAngleXU(double angle);
358  bool isReversed() const;
359  const Handle(Geom_Geometry)& handle() const = 0;
360 };
361 
362 class LX_GEOM_EXPORT GeomTrimmedCurve : public GeomBoundedCurve
363 {
365 public:
367  GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)&);
368  virtual ~GeomTrimmedCurve();
369  virtual Geometry *copy(void) const;
370 
371  // Persistence implementer ---------------------
372 
373  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
374  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
375  // Base implementer ----------------------------
376 
377 
378  void setHandle(const Handle(Geom_TrimmedCurve)&);
379  const Handle(Geom_Geometry)& handle() const;
380 
381  bool intersectBasisCurves( const GeomTrimmedCurve * c,
382  std::vector<std::pair<Base::Vector3d, Base::Vector3d>>& points,
383  double tol = ::Precision::Confusion()) const;
384 
385  virtual void getRange(double& u, double& v) const;
386  virtual void setRange(double u, double v);
387 
388 protected:
389  Handle(Geom_TrimmedCurve) myCurve;
390 };
391 
392 
393 
394 class LX_GEOM_EXPORT GeomArcOfConic : public GeomTrimmedCurve
395 {
397 
398 protected:
399  GeomArcOfConic();
400 
401 public:
402  virtual ~GeomArcOfConic();
403  virtual Geometry *copy(void) const = 0;
404 
405  Base::Vector3d getStartPoint(bool emulateCCWXY) const;
406  Base::Vector3d getEndPoint(bool emulateCCWXY) const;
407 
408  inline virtual Base::Vector3d getStartPoint() const {return getStartPoint(false);}
409  inline virtual Base::Vector3d getEndPoint() const {return getEndPoint(false);}
414  Base::Vector3d getCenter(void) const;
415  Base::Vector3d getLocation(void) const;
416  void setLocation(const Base::Vector3d& Center);
421  void setCenter(const Base::Vector3d& Center);
422 
423  virtual void getRange(double& u, double& v, bool emulateCCWXY) const = 0;
424  virtual void setRange(double u, double v, bool emulateCCWXY) = 0;
425 
426  inline virtual void getRange(double& u, double& v) const { getRange(u,v,false);}
427  inline virtual void setRange(double u, double v) { setRange(u,v,false);}
428 
429  bool isReversed() const;
430  double getAngleXU(void) const;
431  void setAngleXU(double angle);
432 
433  Base::Vector3d getXAxisDir() const;
434  void setXAxisDir(const Base::Vector3d& newdir);
435  const Handle(Geom_Geometry)& handle() const = 0;
436 };
437 
438 class LX_GEOM_EXPORT GeomCircle : public GeomConic
439 {
441 public:
442  GeomCircle();
443  GeomCircle(const Handle(Geom_Circle)&);
444  virtual ~GeomCircle();
445  virtual Geometry *copy(void) const;
446 
447  double getRadius(void) const;
448  void setRadius(double Radius);
449 
450  // Persistence implementer ---------------------
451 
452  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
453  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
454  // Base implementer ----------------------------
455 
456  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
457 
458  const Handle(Geom_Geometry)& handle() const;
459 
460  void setHandle(const Handle(Geom_Circle)&);
461 
462 private:
463  Handle(Geom_Circle) myCurve;
464 };
465 
466 class LX_GEOM_EXPORT GeomArcOfCircle : public GeomArcOfConic
467 {
469 public:
470  GeomArcOfCircle();
471  GeomArcOfCircle(const Handle(Geom_Circle)&);
472  GeomArcOfCircle(const Geom::Circ& aCirc, double aParam1, double aParam2);
473  virtual ~GeomArcOfCircle();
474  virtual Geometry *copy(void) const;
475 
476  double getRadius(void) const;
477  void setRadius(double Radius);
478 
479  virtual void getRange(double& u, double& v, bool emulateCCWXY) const;
480  virtual void setRange(double u, double v, bool emulateCCWXY);
481 
482  // Persistence implementer ---------------------
483 
484  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
485  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
486  // Base implementer ----------------------------
487 
488  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
489 
490  void setHandle(const Handle(Geom_TrimmedCurve)&);
491  void setHandle(const Handle(Geom_Circle)&);
492  const Handle(Geom_Geometry)& handle() const;
493 
494 };
495 
496 class LX_GEOM_EXPORT GeomEllipse : public GeomConic
497 {
499 public:
500  GeomEllipse();
501  GeomEllipse(const Handle(Geom_Ellipse)&);
502  virtual ~GeomEllipse();
503  virtual Geometry *copy(void) const;
504 
505  double getMajorRadius(void) const;
506  void setMajorRadius(double Radius);
507  double getMinorRadius(void) const;
508  void setMinorRadius(double Radius);
509  Base::Vector3d getMajorAxisDir() const;
510  void setMajorAxisDir(Base::Vector3d newdir);
511 
512  // Persistence implementer ---------------------
513 
514  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
515  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
516  // Base implementer ----------------------------
517 
518  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
519 
520  void setHandle(const Handle(Geom_Ellipse) &e);
521  const Handle(Geom_Geometry)& handle() const;
522 
523 private:
524  Handle(Geom_Ellipse) myCurve;
525 };
526 
527 class LX_GEOM_EXPORT GeomArcOfEllipse : public GeomArcOfConic
528 {
530 public:
532  GeomArcOfEllipse(const Handle(Geom_Ellipse)&);
533  virtual ~GeomArcOfEllipse();
534  virtual Geometry *copy(void) const;
535 
536  double getMajorRadius(void) const;
537  void setMajorRadius(double Radius);
538  double getMinorRadius(void) const;
539  void setMinorRadius(double Radius);
540  Base::Vector3d getMajorAxisDir() const;
541  void setMajorAxisDir(Base::Vector3d newdir);
542 
543  virtual void getRange(double& u, double& v, bool emulateCCWXY) const;
544  virtual void setRange(double u, double v, bool emulateCCWXY);
545 
546  // Persistence implementer ---------------------
547 
548  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
549  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
550  // Base implementer ----------------------------
551 
552  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
553 
554  void setHandle(const Handle(Geom_TrimmedCurve)&);
555  void setHandle(const Handle(Geom_Ellipse)&);
556  const Handle(Geom_Geometry)& handle() const;
557 };
558 
559 
560 class LX_GEOM_EXPORT GeomHyperbola : public GeomConic
561 {
563 public:
564  GeomHyperbola();
565  GeomHyperbola(const Handle(Geom_Hyperbola)&);
566  virtual ~GeomHyperbola();
567  virtual Geometry *copy(void) const;
568 
569  double getMajorRadius(void) const;
570  void setMajorRadius(double Radius);
571  double getMinorRadius(void) const;
572  void setMinorRadius(double Radius);
573 
574  // Persistence implementer ---------------------
575 
576  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
577  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
578  // Base implementer ----------------------------
579 
580  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
581 
582  const Handle(Geom_Geometry)& handle() const;
583  void setHandle(const Handle(Geom_Hyperbola)&);
584 
585 private:
586  Handle(Geom_Hyperbola) myCurve;
587 };
588 
589 class LX_GEOM_EXPORT GeomArcOfHyperbola : public GeomArcOfConic
590 {
592 public:
594  GeomArcOfHyperbola(const Handle(Geom_Hyperbola)&);
595  virtual ~GeomArcOfHyperbola();
596  virtual Geometry *copy(void) const;
597 
598  double getMajorRadius(void) const;
599  void setMajorRadius(double Radius);
600  double getMinorRadius(void) const;
601  void setMinorRadius(double Radius);
602  Base::Vector3d getMajorAxisDir() const;
603  void setMajorAxisDir(Base::Vector3d newdir);
604 
605  virtual void getRange(double& u, double& v, bool emulateCCWXY) const;
606  virtual void setRange(double u, double v, bool emulateCCWXY);
607 
608  // Persistence implementer ---------------------
609 
610  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
611  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
612  // Base implementer ----------------------------
613 
614  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
615 
616  void setHandle(const Handle(Geom_TrimmedCurve)&);
617  void setHandle(const Handle(Geom_Hyperbola)&);
618  const Handle(Geom_Geometry)& handle() const;
619 };
620 
621 class LX_GEOM_EXPORT GeomParabola : public GeomConic
622 {
624 public:
625  GeomParabola();
626  GeomParabola(const Handle(Geom_Parabola)&);
627  virtual ~GeomParabola();
628  virtual Geometry *copy(void) const;
629 
630  double getFocal(void) const;
631  void setFocal(double length);
632 
633  // Persistence implementer ---------------------
634 
635  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
636  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
637  // Base implementer ----------------------------
638 
639  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
640 
641  const Handle(Geom_Geometry)& handle() const;
642  void setHandle(const Handle(Geom_Parabola)&);
643 
644 private:
645  Handle(Geom_Parabola) myCurve;
646 };
647 
648 class LX_GEOM_EXPORT GeomArcOfParabola : public GeomArcOfConic
649 {
651 public:
653  GeomArcOfParabola(const Handle(Geom_Parabola)&);
654  virtual ~GeomArcOfParabola();
655  virtual Geometry *copy(void) const;
656 
657  double getFocal(void) const;
658  void setFocal(double length);
659 
660  Base::Vector3d getFocus(void) const;
661 
662  virtual void getRange(double& u, double& v, bool emulateCCWXY) const;
663  virtual void setRange(double u, double v, bool emulateCCWXY);
664 
665  // Persistence implementer ---------------------
666 
667  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
668  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
669  // Base implementer ----------------------------
670 
671  virtual GeomBSplineCurve* toNurbs(double first, double last) const;
672 
673  void setHandle(const Handle(Geom_TrimmedCurve)&);
674  void setHandle(const Handle(Geom_Parabola)&);
675  const Handle(Geom_Geometry)& handle() const;
676 };
677 
678 class LX_GEOM_EXPORT GeomLine : public GeomCurve
679 {
681 public:
682  GeomLine();
683  GeomLine(const Handle(Geom_Line)&);
684  GeomLine(const Base::Vector3d& Pos, const Base::Vector3d& Dir);
685  virtual ~GeomLine();
686  virtual Geometry *copy(void) const;
687 
688  void setLine(const Base::Vector3d& Pos, const Base::Vector3d& Dir);
689  Base::Vector3d getPos(void) const;
690  Base::Vector3d getDir(void) const;
691 
692  // Persistence implementer ---------------------
693 
694  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
695  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
696  // Base implementer ----------------------------
697 
698 
699  const Handle(Geom_Geometry)& handle() const;
700  void setHandle(const Handle(Geom_Line)&);
701 
702 private:
703  Handle(Geom_Line) myCurve;
704 };
705 
706 class LX_GEOM_EXPORT GeomLineSegment : public GeomTrimmedCurve
707 {
709 public:
710  GeomLineSegment();
711  GeomLineSegment(const Handle(Geom_Line)& l);
712  GeomLineSegment(const Geom::Lin& aLin, double aParam1, double aParam2);
713  virtual ~GeomLineSegment();
714  virtual Geometry *copy(void) const;
715 
716  Base::Vector3d getStartPoint() const;
717  Base::Vector3d getEndPoint() const;
718 
719  void setPoints(const Base::Vector3d& p1,
720  const Base::Vector3d& p2);
721 
722  // Persistence implementer ---------------------
723 
724  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
725  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
726  // Base implementer ----------------------------
727 
728 
729  void setHandle(const Handle(Geom_TrimmedCurve)&);
730  void setHandle(const Handle(Geom_Line)&);
731  const Handle(Geom_Geometry)& handle() const;
732 
733 };
734 
735 class LX_GEOM_EXPORT GeomOffsetCurve : public GeomCurve
736 {
738 public:
739  GeomOffsetCurve();
740  GeomOffsetCurve(const Handle(Geom_Curve)&, double, const gp_Dir&);
741  GeomOffsetCurve(const Handle(Geom_Curve)&, double, Base::Vector3d&);
742  GeomOffsetCurve(const Handle(Geom_OffsetCurve)&);
743  virtual ~GeomOffsetCurve();
744  virtual Geometry *copy(void) const;
745 
746  // Persistence implementer ---------------------
747 
748  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
749  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
750  // Base implementer ----------------------------
751 
752 
753  void setHandle(const Handle(Geom_OffsetCurve)& c);
754  const Handle(Geom_Geometry)& handle() const;
755 
756 private:
757  Handle(Geom_OffsetCurve) myCurve;
758 };
759 
760 class LX_GEOM_EXPORT GeomSurface : public Geometry
761 {
763 public:
764  enum Curvature {
768  Gaussian
769  };
770 
771  GeomSurface();
772  virtual ~GeomSurface();
773 
774  TopoDS_Shape toShape() const;
775  bool tangentU(double u, double v, gp_Dir& dirU) const;
776  bool tangentV(double u, double v, gp_Dir& dirV) const;
777  bool normal(double u, double v, gp_Dir& dir) const;
778 
781  bool isUmbillic(double u, double v) const;
782  double curvature(double u, double v, Curvature) const;
783  void curvatureDirections(double u, double v, gp_Dir& maxD, gp_Dir& minD) const;
785 };
786 
787 class LX_GEOM_EXPORT GeomBezierSurface : public GeomSurface
788 {
790 public:
792  GeomBezierSurface(const Handle(Geom_BezierSurface)&);
793  virtual ~GeomBezierSurface();
794  virtual Geometry *copy(void) const;
795 
796  // Persistence implementer ---------------------
797 
798  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
799  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
800  // Base implementer ----------------------------
801 
802 
803  void setHandle(const Handle(Geom_BezierSurface)& b);
804  const Handle(Geom_Geometry)& handle() const;
805 
806 private:
807  Handle(Geom_BezierSurface) mySurface;
808 };
809 
810 class LX_GEOM_EXPORT GeomBSplineSurface : public GeomSurface
811 {
813 public:
815  GeomBSplineSurface(const Handle(Geom_BSplineSurface)&);
816  virtual ~GeomBSplineSurface();
817  virtual Geometry *copy(void) const;
818 
819  // Persistence implementer ---------------------
820 
821  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
822  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
823  // Base implementer ----------------------------
824 
825 
826  void setHandle(const Handle(Geom_BSplineSurface)&);
827  const Handle(Geom_Geometry)& handle() const;
828 
829 private:
830  Handle(Geom_BSplineSurface) mySurface;
831 };
832 
833 class LX_GEOM_EXPORT GeomCylinder : public GeomSurface
834 {
836 public:
837  GeomCylinder();
838  GeomCylinder(const Handle(Geom_CylindricalSurface)&);
839  virtual ~GeomCylinder();
840  virtual Geometry *copy(void) const;
841 
842  // Persistence implementer ---------------------
843 
844  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
845  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
846  // Base implementer ----------------------------
847 
848 
849  void setHandle(const Handle(Geom_CylindricalSurface)&);
850  const Handle(Geom_Geometry)& handle() const;
851 
852 private:
853  Handle(Geom_CylindricalSurface) mySurface;
854 };
855 
856 class LX_GEOM_EXPORT GeomCone : public GeomSurface
857 {
859 public:
860  GeomCone();
861  GeomCone(const Handle(Geom_ConicalSurface)&);
862  virtual ~GeomCone();
863  virtual Geometry *copy(void) const;
864 
865  // Persistence implementer ---------------------
866 
867  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
868  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
869  // Base implementer ----------------------------
870 
871 
872  void setHandle(const Handle(Geom_ConicalSurface)&);
873  const Handle(Geom_Geometry)& handle() const;
874 
875 private:
876  Handle(Geom_ConicalSurface) mySurface;
877 };
878 
879 class LX_GEOM_EXPORT GeomSphere : public GeomSurface
880 {
882 public:
883  GeomSphere();
884  GeomSphere(const Handle(Geom_SphericalSurface)&);
885  virtual ~GeomSphere();
886  virtual Geometry *copy(void) const;
887 
888  // Persistence implementer ---------------------
889 
890  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
891  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
892  // Base implementer ----------------------------
893 
894 
895  void setHandle(const Handle(Geom_SphericalSurface)&);
896  const Handle(Geom_Geometry)& handle() const;
897 
898 private:
899  Handle(Geom_SphericalSurface) mySurface;
900 };
901 
902 class LX_GEOM_EXPORT GeomToroid : public GeomSurface
903 {
905 public:
906  GeomToroid();
907  GeomToroid(const Handle(Geom_ToroidalSurface)&);
908  virtual ~GeomToroid();
909  virtual Geometry *copy(void) const;
910 
911  // Persistence implementer ---------------------
912 
913  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
914  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
915  // Base implementer ----------------------------
916 
917 
918  void setHandle(const Handle(Geom_ToroidalSurface)&);
919  const Handle(Geom_Geometry)& handle() const;
920 
921 private:
922  Handle(Geom_ToroidalSurface) mySurface;
923 };
924 
925 class LX_GEOM_EXPORT GeomPlane : public GeomSurface
926 {
928 public:
929  GeomPlane();
930  GeomPlane(const Handle(Geom_Plane)&);
931  virtual ~GeomPlane();
932  virtual Geometry *copy(void) const;
933 
934  // Persistence implementer ---------------------
935 
936  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
937  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
938  // Base implementer ----------------------------
939 
940 
941  void setHandle(const Handle(Geom_Plane)&);
942  const Handle(Geom_Geometry)& handle() const;
943 
944 private:
945  Handle(Geom_Plane) mySurface;
946 };
947 
948 class LX_GEOM_EXPORT GeomOffsetSurface : public GeomSurface
949 {
951 public:
953  GeomOffsetSurface(const Handle(Geom_Surface)&, double);
954  GeomOffsetSurface(const Handle(Geom_OffsetSurface)&);
955  virtual ~GeomOffsetSurface();
956  virtual Geometry *copy(void) const;
957 
958  // Persistence implementer ---------------------
959 
960  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
961  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
962  // Base implementer ----------------------------
963 
964 
965  void setHandle(const Handle(Geom_OffsetSurface)& s);
966  const Handle(Geom_Geometry)& handle() const;
967 
968 private:
969  Handle(Geom_OffsetSurface) mySurface;
970 };
971 
972 class LX_GEOM_EXPORT GeomPlateSurface : public GeomSurface
973 {
975 public:
977  GeomPlateSurface(const Handle(Geom_Surface)&, const Plate_Plate&);
978  GeomPlateSurface(const GeomPlate_BuildPlateSurface&);
979  GeomPlateSurface(const Handle(GeomPlate_Surface)&);
980  virtual ~GeomPlateSurface();
981  virtual Geometry *copy(void) const;
982 
983  // Persistence implementer ---------------------
984 
985  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
986  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
987  // Base implementer ----------------------------
988 
989 
990  void setHandle(const Handle(GeomPlate_Surface)& s);
991  const Handle(Geom_Geometry)& handle() const;
992 
993 private:
994  Handle(GeomPlate_Surface) mySurface;
995 };
996 
997 class LX_GEOM_EXPORT GeomTrimmedSurface : public GeomSurface
998 {
1000 public:
1002  GeomTrimmedSurface(const Handle(Geom_RectangularTrimmedSurface)&);
1003  virtual ~GeomTrimmedSurface();
1004  virtual Geometry *copy(void) const;
1005 
1006  // Persistence implementer ---------------------
1007 
1008  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
1009  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
1010  // Base implementer ----------------------------
1011 
1012 
1013  void setHandle(const Handle(Geom_RectangularTrimmedSurface)& s);
1014  const Handle(Geom_Geometry)& handle() const;
1015 
1016 private:
1017  Handle(Geom_RectangularTrimmedSurface) mySurface;
1018 };
1019 
1020 class LX_GEOM_EXPORT GeomSurfaceOfRevolution : public GeomSurface
1021 {
1023 public:
1025  GeomSurfaceOfRevolution(const Handle(Geom_Curve)&, const gp_Ax1&);
1026  GeomSurfaceOfRevolution(const Handle(Geom_SurfaceOfRevolution)&);
1027  virtual ~GeomSurfaceOfRevolution();
1028  virtual Geometry *copy(void) const;
1029 
1030  // Persistence implementer ---------------------
1031 
1032  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
1033  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
1034  // Base implementer ----------------------------
1035 
1036 
1037  void setHandle(const Handle(Geom_SurfaceOfRevolution)& c);
1038  const Handle(Geom_Geometry)& handle() const;
1039 
1040 private:
1041  Handle(Geom_SurfaceOfRevolution) mySurface;
1042 };
1043 
1044 class LX_GEOM_EXPORT GeomSurfaceOfExtrusion : public GeomSurface
1045 {
1047 public:
1049  GeomSurfaceOfExtrusion(const Handle(Geom_Curve)&, const gp_Dir&);
1050  GeomSurfaceOfExtrusion(const Handle(Geom_SurfaceOfLinearExtrusion)&);
1051  virtual ~GeomSurfaceOfExtrusion();
1052  virtual Geometry *copy(void) const;
1053 
1054  // Persistence implementer ---------------------
1055 
1056  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/) override;
1057  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/) override;
1058  // Base implementer ----------------------------
1059 
1060 
1061  void setHandle(const Handle(Geom_SurfaceOfLinearExtrusion)& c);
1062  const Handle(Geom_Geometry)& handle() const;
1063 
1064 private:
1065  Handle(Geom_SurfaceOfLinearExtrusion) mySurface;
1066 };
1067 
1068 
1069 // Helper functions for fillet tools
1070  LX_GEOM_EXPORT
1071 bool find2DLinesIntersection(const Base::Vector3d &orig1, const Base::Vector3d &dir1,
1072  const Base::Vector3d &orig2, const Base::Vector3d &dir2,
1073  Base::Vector3d &point);
1074  LX_GEOM_EXPORT
1075 bool find2DLinesIntersection(const GeomLineSegment *lineSeg1, const GeomLineSegment *lineSeg2,
1076  Base::Vector3d &point);
1077  LX_GEOM_EXPORT
1078 bool findFilletCenter(const GeomLineSegment *lineSeg1, const GeomLineSegment *lineSeg2, double radius,
1079  Base::Vector3d &center);
1080  LX_GEOM_EXPORT
1081 bool findFilletCenter(const GeomLineSegment *lineSeg1, const GeomLineSegment *lineSeg2, double radius,
1082  const Base::Vector3d& refPnt1, const Base::Vector3d& refPnt2,
1083  Base::Vector3d &center);
1084  LX_GEOM_EXPORT
1085 double suggestFilletRadius(const GeomLineSegment *lineSeg1, const GeomLineSegment *lineSeg2,
1086  const Base::Vector3d &refPnt1, const Base::Vector3d &refPnt2);
1087  LX_GEOM_EXPORT
1088 GeomArcOfCircle *createFilletGeometry(const GeomLineSegment *lineSeg1, const GeomLineSegment *lineSeg2,
1089  const Base::Vector3d &center, double radius);
1090  LX_GEOM_EXPORT
1091 std::unique_ptr<GeomSurface> makeFromSurface(const Handle(Geom_Surface)&);
1092 
1093  LX_GEOM_EXPORT
1094 std::unique_ptr<GeomCurve> makeFromCurve(const Handle(Geom_Curve)&);
1095 
1096  LX_GEOM_EXPORT
1097 std::unique_ptr<GeomCurve> makeFromTrimmedCurve(const Handle(Geom_Curve)&, double f, double l);
1098 
1099  LX_GEOM_EXPORT
1100 std::unique_ptr<GeomCurve> makeFromCurveAdaptor(const Adaptor3d_Curve&);
1101 }
1102 
1103 #endif // PART_GEOMETRY_H
Definition: Circ.h:53
LX_GEOM_EXPORT Point getPoint(const Geom::Pnt &p)
LX_GEOM_EXPORT double suggestFilletRadius(const GeomLineSegment *lineSeg1, const GeomLineSegment *lineSeg2, const Base::Vector3d &refPnt1, const Base::Vector3d &refPnt2)
Definition: Variant.h:60
Definition: Geometry.h:735
Definition: Geometry.h:527
Definition: Geometry.h:333
virtual void getRange(double &u, double &v) const
Definition: Geometry.h:426
LX_GEOM_EXPORT std::unique_ptr< GeomSurface > makeFromSurface(const Handle(Geom_Surface)&)
Definition: Persistence.h:14
Defines a non-persistent 3D Cartesian point.
Definition: Pnt.h:43
virtual Base::Vector3d getEndPoint() const
Definition: Geometry.h:409
Definition: Geometry.h:215
Definition: Geometry.h:972
Curvature
Definition: Geometry.h:764
boost::uuids::uuid tag
Definition: Geometry.h:132
Definition: Geometry.h:1020
Definition: Geometry.h:760
virtual void setRange(double u, double v)
Definition: Geometry.h:427
Definition: Geometry.h:466
Definition: Geometry.h:75
LX_GEOM_EXPORT GeomArcOfCircle * createFilletGeometry(const GeomLineSegment *lineSeg1, const GeomLineSegment *lineSeg2, const Base::Vector3d &center, double radius)
Definition: Geometry.h:678
Definition: Geometry.h:833
Core::PropertyText name
Definition: CoreDocument.h:167
Definition: Geometry.h:879
Definition: Geometry.h:767
Definition: Geometry.h:589
Definition: Geometry.h:227
Persistence class and root of the type system.
Definition: Persistence.h:23
Definition: Type.h:52
void transform(Container container, OutputIt out, BinaryFunction function)
Definition: Algorithms.h:29
Definition: Geometry.h:706
Definition: Geometry.h:902
Definition: Geometry.h:362
Definition: Geometry.h:560
Definition: Geometry.h:1044
Definition: Lin.h:48
Definition: AbstractXMLReader.h:7
Definition: Dir.h:45
Definition: Geometry.h:394
Definition: Geometry.h:948
Definition: Geometry.h:765
Definition: Geometry.h:140
Definition: Geometry.h:810
Definition: AbstractConstraint.h:6
Definition: Writer.h:16
Definition: Geometry.h:621
LX_GEOM_EXPORT std::unique_ptr< GeomCurve > makeFromTrimmedCurve(const Handle(Geom_Curve)&, double f, double l)
Definition: Geometry.h:170
Definition: Geometry.h:252
virtual Base::Vector3d getStartPoint() const
Definition: Geometry.h:408
LX_GEOM_EXPORT std::unique_ptr< GeomCurve > makeFromCurveAdaptor(const Adaptor3d_Curve &)
Definition: Geometry.h:438
Definition: Geometry.h:856
Definition: Matrix.h:38
LX_GEOM_EXPORT bool findFilletCenter(const GeomLineSegment *lineSeg1, const GeomLineSegment *lineSeg2, double radius, Base::Vector3d &center)
Definition: Geometry.h:925
Definition: Geometry.h:648
Definition: Geometry.h:787
LX_GEOM_EXPORT std::unique_ptr< GeomCurve > makeFromCurve(const Handle(Geom_Curve)&)
Definition: Geometry.h:997
LX_GEOM_EXPORT bool find2DLinesIntersection(const Base::Vector3d &orig1, const Base::Vector3d &dir1, const Base::Vector3d &orig2, const Base::Vector3d &dir2, Base::Vector3d &point)
Definition: Placement.h:38
std::vector< std::shared_ptr< GeometryExtension > > extensions
Definition: Geometry.h:133
TYPESYSTEM_HEADER()
Definition: Geometry.h:496
Definition: Geometry.h:766