From 4e75612208c5c7308084985a0c3675ed2a0cdd7a Mon Sep 17 00:00:00 2001 From: jfa Date: Fri, 14 Dec 2012 12:14:31 +0000 Subject: [PATCH] Mantis issue 0021865: Adding tangency in Spline creation + Small repackaging --- configure.ac | 2 + doc/salome/gui/GEOM/images/curve4.png | Bin 26765 -> 31671 bytes doc/salome/gui/GEOM/input/creating_curve.doc | 5 + idl/GEOM_Gen.idl | 11 + src/BasicGUI/BasicGUI_CircleDlg.cxx | 3 +- src/BasicGUI/BasicGUI_CurveDlg.cxx | 474 ++++++++++------- src/BasicGUI/BasicGUI_CurveDlg.h | 32 +- src/{GEOMAlgo => BlockFix}/BlockFix.cxx | 0 src/{GEOMAlgo => BlockFix}/BlockFix.hxx | 27 +- .../BlockFix_BlockFixAPI.cxx | 15 +- .../BlockFix_BlockFixAPI.hxx} | 43 +- .../BlockFix_CheckTool.cxx | 21 +- .../BlockFix_CheckTool.hxx} | 41 +- .../BlockFix_PeriodicSurfaceModifier.cxx | 51 +- .../BlockFix_PeriodicSurfaceModifier.hxx | 95 ++++ .../BlockFix_SphereSpaceModifier.cxx | 57 +- src/BlockFix/BlockFix_SphereSpaceModifier.hxx | 82 +++ .../BlockFix_UnionEdges.cxx | 5 +- .../BlockFix_UnionEdges.hxx} | 32 +- .../BlockFix_UnionFaces.cxx | 23 +- .../BlockFix_UnionFaces.hxx | 41 +- src/BlockFix/Makefile.am | 55 ++ src/GEOMAlgo/BlockFix.cdl | 67 --- src/GEOMAlgo/BlockFix.ixx | 27 - src/GEOMAlgo/BlockFix.jxx | 28 - src/GEOMAlgo/BlockFix_BlockFixAPI.cdl | 68 --- src/GEOMAlgo/BlockFix_BlockFixAPI.hxx | 94 ---- src/GEOMAlgo/BlockFix_BlockFixAPI.ixx | 77 --- src/GEOMAlgo/BlockFix_BlockFixAPI.jxx | 31 -- src/GEOMAlgo/BlockFix_CheckTool.cdl | 67 --- src/GEOMAlgo/BlockFix_CheckTool.hxx | 120 ----- src/GEOMAlgo/BlockFix_CheckTool.ixx | 27 - .../BlockFix_PeriodicSurfaceModifier.cdl | 135 ----- .../BlockFix_PeriodicSurfaceModifier.hxx | 140 ----- .../BlockFix_PeriodicSurfaceModifier.ixx | 79 --- .../BlockFix_PeriodicSurfaceModifier.jxx | 49 -- src/GEOMAlgo/BlockFix_SphereSpaceModifier.cdl | 139 ----- src/GEOMAlgo/BlockFix_SphereSpaceModifier.hxx | 141 ----- src/GEOMAlgo/BlockFix_SphereSpaceModifier.ixx | 79 --- src/GEOMAlgo/BlockFix_SphereSpaceModifier.jxx | 49 -- src/GEOMAlgo/BlockFix_UnionEdges.cdl | 49 -- src/GEOMAlgo/BlockFix_UnionEdges.hxx | 100 ---- src/GEOMAlgo/BlockFix_UnionEdges.ixx | 27 - src/GEOMAlgo/BlockFix_UnionFaces.cdl | 65 --- src/GEOMAlgo/BlockFix_UnionFaces.ixx | 27 - src/GEOMAlgo/BlockFix_UnionFaces.jxx | 31 -- src/GEOMAlgo/FILES | 27 - src/GEOMAlgo/Handle_BlockFix_BlockFixAPI.hxx | 92 ---- ...andle_BlockFix_PeriodicSurfaceModifier.hxx | 92 ---- .../Handle_BlockFix_SphereSpaceModifier.hxx | 92 ---- src/GEOMAlgo/Makefile.am | 43 +- src/GEOMGUI/GEOM_msg_en.ts | 16 + src/GEOMImpl/GEOMImpl_CircleDriver.cxx | 51 +- src/GEOMImpl/GEOMImpl_FaceDriver.cxx | 9 +- src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx | 6 +- src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx | 7 +- src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx | 118 ++++- src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx | 15 +- src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx | 67 +-- src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx | 4 - src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx | 5 +- src/GEOMImpl/GEOMImpl_IPipePath.hxx | 2 + src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx | 5 +- src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 359 +------------ src/GEOMImpl/GEOMImpl_IShapesOperations.hxx | 49 -- src/GEOMImpl/GEOMImpl_ISpline.hxx | 73 ++- src/GEOMImpl/GEOMImpl_MarkerDriver.cxx | 7 +- src/GEOMImpl/GEOMImpl_MeasureDriver.cxx | 9 +- src/GEOMImpl/GEOMImpl_PipeDriver.cxx | 8 +- src/GEOMImpl/GEOMImpl_PipeTShapeDriver.cxx | 18 +- src/GEOMImpl/GEOMImpl_PlaneDriver.cxx | 7 +- src/GEOMImpl/GEOMImpl_PositionDriver.cxx | 13 +- src/GEOMImpl/GEOMImpl_PrismDriver.cxx | 11 +- src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx | 7 +- src/GEOMImpl/GEOMImpl_SketcherDriver.cxx | 5 +- src/GEOMImpl/GEOMImpl_SplineDriver.cxx | 125 +++-- src/GEOMImpl/GEOMImpl_Types.hxx | 5 +- src/GEOMImpl/Makefile.am | 4 + src/GEOMUtils/GEOMUtils.cxx | 499 ++++++++++++++++++ src/GEOMUtils/GEOMUtils.hxx | 106 ++++ src/GEOMUtils/Makefile.am | 57 ++ src/GEOM_I/GEOM_ICurvesOperations_i.cc | 40 ++ src/GEOM_I/GEOM_ICurvesOperations_i.hh | 4 + src/GEOM_SWIG/GEOM_TestAll.py | 4 + src/GEOM_SWIG/geompyDC.py | 27 +- src/Makefile.am | 27 +- 86 files changed, 1855 insertions(+), 3091 deletions(-) rename src/{GEOMAlgo => BlockFix}/BlockFix.cxx (100%) rename src/{GEOMAlgo => BlockFix}/BlockFix.hxx (78%) rename src/{GEOMAlgo => BlockFix}/BlockFix_BlockFixAPI.cxx (85%) rename src/{GEOMAlgo/BlockFix_BlockFixAPI.lxx => BlockFix/BlockFix_BlockFixAPI.hxx} (72%) rename src/{GEOMAlgo => BlockFix}/BlockFix_CheckTool.cxx (98%) rename src/{GEOMAlgo/BlockFix_CheckTool.jxx => BlockFix/BlockFix_CheckTool.hxx} (52%) rename src/{GEOMAlgo => BlockFix}/BlockFix_PeriodicSurfaceModifier.cxx (92%) create mode 100644 src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx rename src/{GEOMAlgo => BlockFix}/BlockFix_SphereSpaceModifier.cxx (94%) create mode 100644 src/BlockFix/BlockFix_SphereSpaceModifier.hxx rename src/{GEOMAlgo => BlockFix}/BlockFix_UnionEdges.cxx (99%) rename src/{GEOMAlgo/BlockFix_UnionEdges.jxx => BlockFix/BlockFix_UnionEdges.hxx} (72%) rename src/{GEOMAlgo => BlockFix}/BlockFix_UnionFaces.cxx (99%) rename src/{GEOMAlgo => BlockFix}/BlockFix_UnionFaces.hxx (64%) create mode 100644 src/BlockFix/Makefile.am delete mode 100644 src/GEOMAlgo/BlockFix.cdl delete mode 100644 src/GEOMAlgo/BlockFix.ixx delete mode 100644 src/GEOMAlgo/BlockFix.jxx delete mode 100644 src/GEOMAlgo/BlockFix_BlockFixAPI.cdl delete mode 100644 src/GEOMAlgo/BlockFix_BlockFixAPI.hxx delete mode 100644 src/GEOMAlgo/BlockFix_BlockFixAPI.ixx delete mode 100644 src/GEOMAlgo/BlockFix_BlockFixAPI.jxx delete mode 100644 src/GEOMAlgo/BlockFix_CheckTool.cdl delete mode 100644 src/GEOMAlgo/BlockFix_CheckTool.hxx delete mode 100644 src/GEOMAlgo/BlockFix_CheckTool.ixx delete mode 100644 src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.cdl delete mode 100644 src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.hxx delete mode 100644 src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.ixx delete mode 100644 src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.jxx delete mode 100644 src/GEOMAlgo/BlockFix_SphereSpaceModifier.cdl delete mode 100644 src/GEOMAlgo/BlockFix_SphereSpaceModifier.hxx delete mode 100644 src/GEOMAlgo/BlockFix_SphereSpaceModifier.ixx delete mode 100644 src/GEOMAlgo/BlockFix_SphereSpaceModifier.jxx delete mode 100644 src/GEOMAlgo/BlockFix_UnionEdges.cdl delete mode 100644 src/GEOMAlgo/BlockFix_UnionEdges.hxx delete mode 100644 src/GEOMAlgo/BlockFix_UnionEdges.ixx delete mode 100644 src/GEOMAlgo/BlockFix_UnionFaces.cdl delete mode 100644 src/GEOMAlgo/BlockFix_UnionFaces.ixx delete mode 100644 src/GEOMAlgo/BlockFix_UnionFaces.jxx delete mode 100644 src/GEOMAlgo/Handle_BlockFix_BlockFixAPI.hxx delete mode 100644 src/GEOMAlgo/Handle_BlockFix_PeriodicSurfaceModifier.hxx delete mode 100644 src/GEOMAlgo/Handle_BlockFix_SphereSpaceModifier.hxx create mode 100644 src/GEOMUtils/GEOMUtils.cxx create mode 100644 src/GEOMUtils/GEOMUtils.hxx create mode 100644 src/GEOMUtils/Makefile.am diff --git a/configure.ac b/configure.ac index dcc973832..e249b1f5d 100644 --- a/configure.ac +++ b/configure.ac @@ -499,12 +499,14 @@ AC_OUTPUT([ \ src/DlgRef/Makefile \ src/EntityGUI/Makefile \ src/GEOM/Makefile \ + src/BlockFix/Makefile \ src/GEOMAlgo/Makefile \ src/GEOMBase/Makefile \ src/GEOMClient/Makefile \ src/GEOMFiltersSelection/Makefile \ src/Material/Makefile \ src/GEOMGUI/Makefile \ + src/GEOMUtils/Makefile \ src/GEOMImpl/Makefile \ src/GEOMToolsGUI/Makefile \ src/GEOM_I/Makefile \ diff --git a/doc/salome/gui/GEOM/images/curve4.png b/doc/salome/gui/GEOM/images/curve4.png index cbb60924d65b40aa01d1bb756aeee2da2b179217..2fe0db0ae2636265ed7b414274a408bf3e8f23d2 100644 GIT binary patch literal 31671 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 a7L`GB-Zw929|S)^Ao9}6QpFOl{r?Y`wm`%H literal 26765 zcmbrmbzGF;x-LARgtVlzfOL0Ni%c}-JRd-+P{6y z+UxB7{nq)uKTw!qW}f$n>%Ome3I70=#Y7`P1A#!8a_`@%fItYJfv+i4WZ)4Z8QE?S z=ru_0-CI?UjQvG-O?>!e+sToQF*^Cn4>n;&y-PZ{(Q=1M4QU?n_cr5i=&DF3hMIQ@ zVZ8jq7L&8yvEh)(6wMD+NZq&uNa$gx`@dNBkFXKHu>GWtOcBk7&xQWtHXmu^zRU77 zH#1M1r&LCMEy6YzgCmJr=g<_>ikS0x0ddUzTG*Y3iYf?a(|jbseZP0_nmMfr@oPqs zXOT0mBq{_<;^y7yZ3`^ZF05|!!@#E1yIi5u?@wIyS+yl88Y{cACV#G^D1 z{%_Q;gB*0WtQo%-=;j#)-WJ3-UiVRgUN!kJ`-sS%MuH+#c7su=x)vD@c1=n6Y#ekr zfq&apY5YGOUzQ!8koB`8M&Kh*1*Jpq3lwi#ngj?$vuKba0(NVO-UQ*e<4Hpj<(89) zit>7$zt6@6kf28_#*qJn5&VSbbVq6Tw?Cb#s6-F{^azSK)i4|!mzY*-`Zbz20PZx3 zYBMYLgY`%LfiRAhhJ2<|6Di&(p@U(;Rcvg+72vuN!w08Ugr)Rb8NnG`kMB*|>%Gc5 zQtl8_t`)d;rZax&eRX&t4I!gIqg+_sT8A4vq^a0s+&3SPt_en{so0pW2@Vt$!!t-; z2zXI_iQmfqWuDg&0zpU4B==Y1LN3SFht}v0iVbXjUlw%OMeD^SaH{C~Q>&#`p>_~x zZpFjcLqf}^pCDSUy}FaMWMU4}`gtHA8%H}J?`{|Y)E>}&uNXKpv7y(|D zsofX;?EWc{i}YgY6+gF*;r%Gl+|}Obq@^RaRe6PC5{>SA$l|1+*z!{E>i0n5>(h&v zGU=YT5V9U;nW0)&o`d^Xod|bhF{Cp#uB>O>6j%de>Qepv?=ll3XvHE(1}Lm%(7XA6 zil*g&Q&@L&g&UJ2QRS7$E~rVLMnm+Pwjyy(6;Dd~unX(e|Iz z>wg>E8~pJCcdx54Pzq{+#Ev5i�Q4dJ+=i%V8g{l3X;m-RQnEf_d1~XA~%IEja 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ℜ@RkQo`S3ug#ewv+SA z&wTxbTHHLN{wS^H_>qLi>To`+Jg%@ho`KsJ#0t-yyAJDm$HnX}<)0`RINd_du<`Ri z05S?19H2u^RAhF|YN*(l1Yy(D=D4BI1bZ`y#F`fts(D1r9DLcW#VQ;y0C-eV_p7!S z3X(YO-j&Z?Ywzrw4?#s7ZKI&&t|x+ATwF%0s93obsEs4OsH6F8QRjF8yh78g>MWav z3aVX)8b_MLqxVTVsvl-yW;G~mOmea5g=(Tcw}ZT4J|PBjn^M}qg}g>b3)$`0b}?n! zCm~7Qx9X%FE?2tXpTx0$ywXDz_{sHZXLJP_T?vgeXlOW5)ey95Db0Q1>l8zsh01dif5 zPB~U=-WA_UG!?yfsYZNVoxbo55F`VrZiyZXsOD;Q#S|IcnkcyMs zOFhsJxhEva1c4B7<9;K6%1=evE>=-dFYNq-xEA69V48&;F`WKMVBCa+LH)QbPK?0~ z1Mp9}%Q!<`Pj(TU-WM2R!g|U~MHQd(z=lv`vl?3wd$uMBZ2H1n!F0|i(|*8u>sIvb zE14}8B;_1a^a4m8#b+fBX0RA7?ypxL_PxABa=W9PCx53$^7_m{11SmZNO#zCGN*;n z#lWt96MpxDRBq=ku?9y>9Z=E%@vvRzd7andIFN~FZeigjS&7f)q;t>0Tu;_l!VRc; z%ddJj{6IPd#PME~kUJjqs?+!M6Y=M|J@^ooOF_oJ=h*EwraVDUOQHQvn%;Og=o1+& zlIR0HtV}xq@`1bH*py&{mj$1o;1J7vXt&!uiM^7h6xET}%C^uI)w#UkR@XfEvp+o) z)J@d=Y1=bMGmzcH-->fJh;aZ%u(Ujvm65q568A+lrV+FOj}+Szf)}2i$u->#K(#!Nw>;(e zAQJb~$cPe*4^Fd>DFu50H~j2e8yW5jDjgTMke{~uQ2Emv68^Dkw19i^n?S?>S==%$ z4NQ{rD=M;0d=s;exTU@2CU#b%Y&p=KdwhKQUfNwWRd-i?JVJVXZ(5rBJU;aZ+|> z!W$v0h)HbJCivxk{#mPHn-F+e?uWmWm6g?|KPHA=+nNQ#31%3AX!soWH4hzD@ay*1 z$3I#OteTIPs-Q8p*m&bD!WU73%#of648NpN;nE8ff}c9nz~#?9C)?aLe-fHU*%6rOril!1W(_rW@WV;Oex0B7XR)htT{ zv*JwnqnXBy#zeVys!Xd#=sq0Vw=&wJaRfJ11Yr}?a00>qi1XkGmrN4 zl=OR8A%xU*K?@MRpuqb_71urCDSKyt+r`leGodoeNx_F1?q_I;!?QIffO1j%8`=cj z+)Ja`Wo@o7$D^a8K&Q!sTv3Og!tOx%)poXc6V;Mj_$I=-v%A~)0P_~OCd?KJDl<$U za-z=E)#Xq#2>C}`J}py8mYysru?o{Cv&t$PmuwE=XZh{5afJElF$#Kmyb7%rvx{uL z|6b)~xGg;VOgC;@7@!TOU8YtJ`^U)OxfkeE@ zi%dng8?4hlU3S9nw=rEgQy=A2vCNuyD+N8>_vt&RnF zJ*^Y_#>k@+t@HZ=c|#qHVe!b70wqmRpO>HL71q%M*rLM09Hk3`bNV_#FFnP*HG}?* zIbfmwkZpX%0G`GYw!UQysxN-MhAjmKpJH-Yp$m+K8+ zBGBy=2G_6lIc+p)zC1xmC5O%z4Anv%kIssBo?n!op|`$#FC6^f5CrmET2U(RsqUBm E0v6%3*Z=?k diff --git a/doc/salome/gui/GEOM/input/creating_curve.doc b/doc/salome/gui/GEOM/input/creating_curve.doc index 9c3371826..e70a6279c 100644 --- a/doc/salome/gui/GEOM/input/creating_curve.doc +++ b/doc/salome/gui/GEOM/input/creating_curve.doc @@ -70,10 +70,15 @@ closed edge.
  • If Reorder vertices taking into account distances is checked, the interpolation algorithm does not follow the order of vertices but searches for the closest vertex.
  • +
  • Tangents are two vectors, defining direction of curve at +its ends. Both or none vectors must be set. This option available only +if two above check boxes are not checked. +
  • \n TUI Command: geompy.MakeInterpol(ListOfShapes,isClosed,doReordering) +geompy.MakeInterpolWithTangents(ListOfShapes,Vector1,Vector2) Analytical Definition diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index f35c7935e..de18e7ee1 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -2804,6 +2804,17 @@ module GEOM in boolean theIsClosed, in boolean theDoReordering); + /*! + * \brief Create B-Spline curve on the set of points. + * \param thePoints Sequence of points for the B-Spline curve. + * \param theFirstVec Vector object, defining the curve direction at its first point. + * \param theLastVec Vector object, defining the curve direction at its last point. + * \return New GEOM_Object, containing the created B-Spline curve. + */ + GEOM_Object MakeSplineInterpolWithTangents (in ListOfGO thePoints, + in GEOM_Object theFirstVec, + in GEOM_Object theLastVec); + /*! * \brief Creates a curve using the parametric definition of the basic points. * \param thexExpr parametric equation of the coordinates X. diff --git a/src/BasicGUI/BasicGUI_CircleDlg.cxx b/src/BasicGUI/BasicGUI_CircleDlg.cxx index b69c3660c..90488fa74 100644 --- a/src/BasicGUI/BasicGUI_CircleDlg.cxx +++ b/src/BasicGUI/BasicGUI_CircleDlg.cxx @@ -280,7 +280,6 @@ void BasicGUI_CircleDlg::ConstructorsClicked( int constructorId ) qApp->processEvents(); updateGeometry(); resize( minimumSizeHint() ); - SelectionIntoArgument(); myEditCurrentArgument->setFocus(); globalSelection(); // close local contexts, if any @@ -289,7 +288,7 @@ void BasicGUI_CircleDlg::ConstructorsClicked( int constructorId ) connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - displayPreview(true); + SelectionIntoArgument(); } //================================================================================= diff --git a/src/BasicGUI/BasicGUI_CurveDlg.cxx b/src/BasicGUI/BasicGUI_CurveDlg.cxx index c964983ae..ffb3f7ebf 100644 --- a/src/BasicGUI/BasicGUI_CurveDlg.cxx +++ b/src/BasicGUI/BasicGUI_CurveDlg.cxx @@ -18,7 +18,6 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // GEOM GEOMGUI : GUI for Geometry component // File : BasicGUI_CurveDlg.cxx @@ -59,66 +58,101 @@ BasicGUI_CurveDlg::BasicGUI_CurveDlg( GeometryGUI* theGeometryGUI, QWidget* pare bool modal, Qt::WindowFlags fl ) : GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl ) { - QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_POLYLINE" ) ) ); - QPixmap image2( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_SPLINE" ) ) ); - QPixmap image3( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_BEZIER" ) ) ); - QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); + QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_POLYLINE"))); + QPixmap image2 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SPLINE"))); + QPixmap image3 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BEZIER"))); + QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); - setWindowTitle( tr( "GEOM_CURVE_TITLE" ) ); + setWindowTitle(tr("GEOM_CURVE_TITLE")); /***************************************************************/ - mainFrame()->RadioButton1->setIcon( image0 ); - mainFrame()->RadioButton2->setIcon( image3 ); - mainFrame()->RadioButton3->setIcon( image2 ); + mainFrame()->RadioButton1->setIcon(image0); + mainFrame()->RadioButton2->setIcon(image3); + mainFrame()->RadioButton3->setIcon(image2); - QGroupBox* creationModeCroup = new QGroupBox(this); - QButtonGroup* bg = new QButtonGroup(this); + // Creation mode + QGroupBox* creationModeGroup = new QGroupBox (this); + QButtonGroup* bg = new QButtonGroup (this); - creationModeCroup->setTitle( tr( "GEOM_CURVE_CRMODE" ) ); - QHBoxLayout * creationModeLayout = new QHBoxLayout(creationModeCroup); - myBySelectionBtn = new QRadioButton( tr( "GEOM_CURVE_SELECTION" ) ,creationModeCroup ); - myAnaliticalBtn = new QRadioButton( tr( "GEOM_CURVE_ANALITICAL" ) ,creationModeCroup ); + creationModeGroup->setTitle(tr("GEOM_CURVE_CRMODE")); + QHBoxLayout * creationModeLayout = new QHBoxLayout (creationModeGroup); + myBySelectionBtn = new QRadioButton (tr("GEOM_CURVE_SELECTION") ,creationModeGroup); + myAnaliticalBtn = new QRadioButton (tr("GEOM_CURVE_ANALITICAL") ,creationModeGroup); bg->addButton(myBySelectionBtn); bg->addButton(myAnaliticalBtn); - + creationModeLayout->addWidget(myBySelectionBtn); creationModeLayout->addWidget(myAnaliticalBtn); - GroupPoints = new DlgRef_1Sel3Check( centralWidget() ); - - GroupPoints->GroupBox1->setTitle( tr( "GEOM_NODES" ) ); - GroupPoints->TextLabel1->setText( tr( "GEOM_POINTS" ) ); - GroupPoints->PushButton1->setIcon( image1 ); - GroupPoints->PushButton1->setDown( true ); - - GroupPoints->LineEdit1->setReadOnly( true ); - - GroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) ); - GroupPoints->CheckButton1->setChecked(false); - //GroupPoints->CheckButton1->hide(); - - GroupPoints->CheckButton2->setText( tr( "GEOM_IS_REORDER" ) ); - GroupPoints->CheckButton2->setChecked(false); - GroupPoints->CheckButton2->hide(); - - GroupPoints->CheckButton3->hide(); - - myParams = new BasicGUI_ParamCurveWidget( centralWidget() ); - - QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); - layout->setMargin( 0 ); layout->setSpacing( 6 ); - layout->addWidget( creationModeCroup ); - layout->addWidget( GroupPoints ); - layout->addWidget( myParams ); + // Points and flags + myGroupPoints = new DlgRef_1Sel3Check (centralWidget()); + + myGroupPoints->GroupBox1->setTitle(tr("GEOM_NODES")); + myGroupPoints->TextLabel1->setText(tr("GEOM_POINTS")); + myGroupPoints->PushButton1->setIcon(image1); + myGroupPoints->PushButton1->setDown(true); + + myGroupPoints->LineEdit1->setReadOnly( true ); + + myGroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) ); + myGroupPoints->CheckButton1->setChecked(false); + //myGroupPoints->CheckButton1->hide(); + + myGroupPoints->CheckButton2->setText( tr( "GEOM_IS_REORDER" ) ); + myGroupPoints->CheckButton2->setChecked(false); + myGroupPoints->CheckButton2->hide(); + + myGroupPoints->CheckButton3->hide(); + + // Parametrical mode + myGroupParams = new BasicGUI_ParamCurveWidget( centralWidget() ); + + // Tangents (only for Interpolation constructor and only not closed and no reordering) + myGroupTangents = new QGroupBox (this); + myGroupTangents->setCheckable(true); + myGroupTangents->setChecked(false); + myGroupTangents->setTitle(tr("GEOM_INTERPOL_TANGENTS")); + + QGridLayout* tangentsLayout = new QGridLayout (myGroupTangents); + + myPushBtnV1 = new QPushButton (myGroupTangents); + myPushBtnV2 = new QPushButton (myGroupTangents); + myPushBtnV1->setIcon(image1); + myPushBtnV2->setIcon(image1); + + myLineEditV1 = new QLineEdit (myGroupTangents); + myLineEditV2 = new QLineEdit (myGroupTangents); + myLineEditV1->setReadOnly(true); + myLineEditV2->setReadOnly(true); + + QLabel* aTextLabelV1 = new QLabel (myGroupTangents); + QLabel* aTextLabelV2 = new QLabel (myGroupTangents); + aTextLabelV1->setText(tr("GEOM_INTERPOL_FIRST_VEC")); + aTextLabelV2->setText(tr("GEOM_INTERPOL_LAST_VEC")); + + tangentsLayout->addWidget(aTextLabelV1, 0, 0); + tangentsLayout->addWidget(myPushBtnV1 , 0, 1); + tangentsLayout->addWidget(myLineEditV1, 0, 2); + tangentsLayout->addWidget(aTextLabelV2, 1, 0); + tangentsLayout->addWidget(myPushBtnV2 , 1, 1); + tangentsLayout->addWidget(myLineEditV2, 1, 2); + + // Layout + QVBoxLayout* layout = new QVBoxLayout (centralWidget()); + layout->setMargin(0); + layout->setSpacing(6); + layout->addWidget(creationModeGroup); + layout->addWidget(myGroupPoints); + layout->addWidget(myGroupParams); + layout->addWidget(myGroupTangents); /***************************************************************/ - setHelpFileName( "create_curve_page.html" ); + setHelpFileName("create_curve_page.html"); Init(); } - //================================================================================= // function : ~BasicGUI_CurveDlg() // purpose : Destroys the object and frees any allocated resources @@ -127,7 +161,6 @@ BasicGUI_CurveDlg::~BasicGUI_CurveDlg() { } - //================================================================================= // function : Init() // purpose : @@ -135,13 +168,6 @@ BasicGUI_CurveDlg::~BasicGUI_CurveDlg() void BasicGUI_CurveDlg::Init() { /* init variables */ - myEditCurrentArgument = GroupPoints->LineEdit1; - - myPoints.clear(); - - globalSelection(); // close local contexts, if any - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); - showOnlyPreviewControl(); myBySelectionBtn->setChecked(true); @@ -152,87 +178,94 @@ void BasicGUI_CurveDlg::Init() double aMax( 100. ), aMin( 0.0 ); /* min, max, step and decimals for spin boxes & initial values */ - initSpinBox( myParams->myPMin, COORD_MIN, COORD_MAX, step, "length_precision" ); - initSpinBox( myParams->myPMax, COORD_MIN, COORD_MAX, step, "length_precision" ); - myParams->myPStep->setValue( 10 ); - myParams->myPStep->setMaximum( 999 ); - myParams->myPStep->setSingleStep( 10 ); - myParams->myPMin->setValue( aMin ); - myParams->myPMax->setValue( aMax ); - myParams->myPStep->setValue( step ); - myParams->myXExpr->setText("t"); - myParams->myYExpr->setText("t"); - myParams->myZExpr->setText("t"); - - myParams->hide(); + initSpinBox( myGroupParams->myPMin, COORD_MIN, COORD_MAX, step, "length_precision" ); + initSpinBox( myGroupParams->myPMax, COORD_MIN, COORD_MAX, step, "length_precision" ); + myGroupParams->myPStep->setValue( 10 ); + myGroupParams->myPStep->setMaximum( 999 ); + myGroupParams->myPStep->setSingleStep( 10 ); + myGroupParams->myPMin->setValue( aMin ); + myGroupParams->myPMax->setValue( aMax ); + myGroupParams->myPStep->setValue( step ); + myGroupParams->myXExpr->setText("t"); + myGroupParams->myYExpr->setText("t"); + myGroupParams->myZExpr->setText("t"); + + myGroupParams->hide(); /* signals and slots connections */ - connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog( ) ) ); - connect( myGeomGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ); + connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); + connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); + connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect( this, SIGNAL( constructorsClicked( int ) ), this, SLOT( ConstructorsClicked( int ) ) ); + connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int))); - connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect(myGroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(myPushBtnV1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(myPushBtnV2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect( GroupPoints->CheckButton1, SIGNAL( toggled(bool) ), this, SLOT( CheckButtonToggled() ) ); - connect( GroupPoints->CheckButton2, SIGNAL( toggled(bool) ), this, SLOT( CheckButtonToggled() ) ); + connect(myGroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(CheckButtonToggled())); + connect(myGroupPoints->CheckButton2, SIGNAL(toggled(bool)), this, SLOT(CheckButtonToggled())); - connect( myGeomGUI->getApp()->selectionMgr(), - SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); - connect( myBySelectionBtn, SIGNAL( clicked() ), this, SLOT( CreationModeChanged() ) ); - connect( myAnaliticalBtn, SIGNAL( clicked() ), this, SLOT( CreationModeChanged() ) ); + connect(myBySelectionBtn, SIGNAL(clicked()), this, SLOT(CreationModeChanged())); + connect(myAnaliticalBtn, SIGNAL(clicked()), this, SLOT(CreationModeChanged())); - connect(myParams->myPMin, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); - connect(myParams->myPMax, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); - connect(myParams->myPStep, SIGNAL(valueChanged(int)), this, SLOT(ValueChangedInSpinBox(int))); + connect(myGroupParams->myPMin, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); + connect(myGroupParams->myPMax, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); + connect(myGroupParams->myPStep, SIGNAL(valueChanged(int)), this, SLOT(ValueChangedInSpinBox(int))); - connect(myParams->myXExpr, SIGNAL(editingFinished()), this, SLOT(OnEditingFinished())); - connect(myParams->myYExpr, SIGNAL(editingFinished()), this, SLOT(OnEditingFinished())); - connect(myParams->myZExpr, SIGNAL(editingFinished()), this, SLOT(OnEditingFinished())); + connect(myGroupParams->myXExpr, SIGNAL(editingFinished()), this, SLOT(OnEditingFinished())); + connect(myGroupParams->myYExpr, SIGNAL(editingFinished()), this, SLOT(OnEditingFinished())); + connect(myGroupParams->myZExpr, SIGNAL(editingFinished()), this, SLOT(OnEditingFinished())); - initName( tr( "GEOM_CURVE" ) ); - resize(100,100); - ConstructorsClicked( 0 ); + initName(tr("GEOM_CURVE")); + //resize(100, 100); + ConstructorsClicked(0); } //================================================================================= // function : ConstructorsClicked() // purpose : //================================================================================= -void BasicGUI_CurveDlg::ConstructorsClicked( int id ) +void BasicGUI_CurveDlg::ConstructorsClicked (int id) { - QString aTitle = tr( id == 0 ? "GEOM_POLYLINE" : id == 1 ? "GEOM_BEZIER" : "GEOM_INTERPOL" ); - mainFrame()->GroupConstructors->setTitle( aTitle ); + QString aTitle = tr(id == 0 ? "GEOM_POLYLINE" : id == 1 ? "GEOM_BEZIER" : "GEOM_INTERPOL"); + mainFrame()->GroupConstructors->setTitle(aTitle); if (id == 0) { // polyline (wire) - //GroupPoints->CheckButton1->hide(); - GroupPoints->CheckButton1->setText( tr( "GEOM_BUILD_CLOSED_WIRE" ) ); - GroupPoints->CheckButton2->hide(); + myGroupPoints->CheckButton1->setText( tr( "GEOM_BUILD_CLOSED_WIRE" ) ); + myGroupPoints->CheckButton2->hide(); + myGroupTangents->hide(); } else if (id == 1) { // bezier - //GroupPoints->CheckButton1->hide(); - GroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) ); - GroupPoints->CheckButton2->hide(); + myGroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) ); + myGroupPoints->CheckButton2->hide(); + myGroupTangents->hide(); } else { // b-spline - //GroupPoints->CheckButton1->show(); - GroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) ); - GroupPoints->CheckButton2->show(); + myGroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) ); + myGroupPoints->CheckButton2->show(); + myGroupTangents->setVisible(myBySelectionBtn->isChecked()); } myPoints.clear(); + myVec1.nullify(); + myVec2.nullify(); + + myGroupPoints->LineEdit1->setText(""); + myLineEditV1->setText(""); + myLineEditV2->setText(""); - myEditCurrentArgument->setText( "" ); qApp->processEvents(); updateGeometry(); - resize( minimumSizeHint() ); - SelectionIntoArgument(); -} + resize(minimumSizeHint()); + myGroupPoints->PushButton1->click(); +} //================================================================================= // function : SetEditCurrentArgument() @@ -240,9 +273,28 @@ void BasicGUI_CurveDlg::ConstructorsClicked( int id ) //================================================================================= void BasicGUI_CurveDlg::SetEditCurrentArgument() { - if ( sender() == GroupPoints->PushButton1 ) - myEditCurrentArgument = GroupPoints->LineEdit1; + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + + globalSelection(); // close local contexts, if any + + if (sender() == myGroupPoints->PushButton1) { + myEditCurrentArgument = myGroupPoints->LineEdit1; + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX); + } + else if (sender() == myPushBtnV1) { + myEditCurrentArgument = myLineEditV1; + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE); + } + else if (sender() == myPushBtnV2) { + myEditCurrentArgument = myLineEditV2; + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE); + } + myEditCurrentArgument->setFocus(); + + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + SelectionIntoArgument(); } @@ -252,6 +304,11 @@ void BasicGUI_CurveDlg::SetEditCurrentArgument() //================================================================================= void BasicGUI_CurveDlg::CheckButtonToggled() { + if (getConstructorId() == 2) { // Interpolation + bool disableTangents = (myGroupPoints->CheckButton1->isChecked() || + myGroupPoints->CheckButton2->isChecked()); + myGroupTangents->setEnabled(!disableTangents); + } processPreview(); } @@ -261,8 +318,8 @@ void BasicGUI_CurveDlg::CheckButtonToggled() //================================================================================= void BasicGUI_CurveDlg::ClickOnOk() { - setIsApplyAndClose( true ); - if ( ClickOnApply() ) + setIsApplyAndClose(true); + if (ClickOnApply()) ClickOnCancel(); } @@ -272,20 +329,23 @@ void BasicGUI_CurveDlg::ClickOnOk() //================================================================================= bool BasicGUI_CurveDlg::ClickOnApply() { - if ( !onAccept() ) + if (!onAccept()) return false; initName(); - globalSelection(); // close local contexts, if any - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); + ConstructorsClicked(getConstructorId()); return true; } -static void synchronize( QList& left, QList& right ) +//================================================================================= +// function : SelectionIntoArgument() +// purpose : Called when selection as changed or other case +//================================================================================= +static void synchronize (QList& left, QList& right) { // 1. remove items from the "left" list that are not in the "right" list - QMutableListIterator it1( left ); - while ( it1.hasNext() ) { + QMutableListIterator it1 (left); + while (it1.hasNext()) { GEOM::GeomObjPtr o1 = it1.next(); bool found = false; QMutableListIterator it2( right ); @@ -307,22 +367,38 @@ static void synchronize( QList& left, QList& } } -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= void BasicGUI_CurveDlg::SelectionIntoArgument() { - QList points = getSelected( TopAbs_VERTEX, -1 ); - synchronize( myPoints, points ); - if ( !myPoints.isEmpty() ) - GroupPoints->LineEdit1->setText( QString::number( myPoints.count() ) + "_" + tr( "GEOM_POINT" ) + tr( "_S_" ) ); - else - GroupPoints->LineEdit1->setText( "" ); + myEditCurrentArgument->setText(""); + + if (myEditCurrentArgument == myGroupPoints->LineEdit1) { + QList points = getSelected(TopAbs_VERTEX, -1); + synchronize(myPoints, points); + if (!myPoints.isEmpty()) + myGroupPoints->LineEdit1->setText(QString::number(myPoints.count()) + "_" + + tr("GEOM_POINT") + tr("_S_")); + } + else { + QList vecs = getSelected(TopAbs_EDGE, -1); + if (vecs.count() != 1) { + if (myEditCurrentArgument == myLineEditV1) myVec1.nullify(); + else if (myEditCurrentArgument == myLineEditV2) myVec2.nullify(); + } + else { + if (myEditCurrentArgument == myLineEditV1) { + myVec1 = vecs.first(); + } + else if (myEditCurrentArgument == myLineEditV2) { + myVec2 = vecs.first(); + } + QString aName = GEOMBase::GetName(vecs.first().get()); + myEditCurrentArgument->setText(aName); + } + } + processPreview(); } - //================================================================================= // function : ActivateThisDialog() // purpose : @@ -330,13 +406,11 @@ void BasicGUI_CurveDlg::SelectionIntoArgument() void BasicGUI_CurveDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), - this, SLOT( SelectionIntoArgument() ) ); - globalSelection(); // close local contexts, if any - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); - ConstructorsClicked( getConstructorId() ); + ConstructorsClicked(getConstructorId()); } //================================================================================= @@ -353,9 +427,9 @@ void BasicGUI_CurveDlg::DeactivateActiveDialog() // function : enterEvent() // purpose : //================================================================================= -void BasicGUI_CurveDlg::enterEvent( QEvent* ) +void BasicGUI_CurveDlg::enterEvent (QEvent*) { - if ( !mainFrame()->GroupConstructors->isEnabled() ) + if (!mainFrame()->GroupConstructors->isEnabled()) ActivateThisDialog(); } @@ -365,24 +439,34 @@ void BasicGUI_CurveDlg::enterEvent( QEvent* ) //================================================================================= GEOM::GEOM_IOperations_ptr BasicGUI_CurveDlg::createOperation() { - return myGeomGUI->GetGeomGen()->GetICurvesOperations( getStudyId() ); + return myGeomGUI->GetGeomGen()->GetICurvesOperations(getStudyId()); } //================================================================================= // function : isValid // purpose : //================================================================================= -bool BasicGUI_CurveDlg::isValid( QString& msg ) +bool BasicGUI_CurveDlg::isValid (QString& msg) { - if( myBySelectionBtn->isChecked() ) - return myPoints.count() > 1; + if (myBySelectionBtn->isChecked()) { + bool ok = true; + if (getConstructorId() == 2) { // Interpolation + bool disableTangents = (myGroupPoints->CheckButton1->isChecked() || + myGroupPoints->CheckButton2->isChecked()); + if (!disableTangents && myGroupTangents->isChecked()) { + ok = (myVec1 && myVec2); + if (!ok) msg = tr("GEOM_BOTH_TANGENTS_REQUIRED"); + } + } + return ok && myPoints.count() > 1; + } else { - bool ok = myParams->myPMin->isValid( msg, !IsPreview() ) && - myParams->myPMax->isValid( msg, !IsPreview() ) && - myParams->myPStep->isValid( msg, !IsPreview() ); - ok &= !myParams->myXExpr->text().isEmpty(); - ok &= !myParams->myYExpr->text().isEmpty(); - ok &= !myParams->myZExpr->text().isEmpty(); + bool ok = myGroupParams->myPMin->isValid( msg, !IsPreview() ) && + myGroupParams->myPMax->isValid( msg, !IsPreview() ) && + myGroupParams->myPStep->isValid( msg, !IsPreview() ); + ok &= !myGroupParams->myXExpr->text().isEmpty(); + ok &= !myGroupParams->myYExpr->text().isEmpty(); + ok &= !myGroupParams->myZExpr->text().isEmpty(); return ok; } } @@ -391,79 +475,85 @@ bool BasicGUI_CurveDlg::isValid( QString& msg ) // function : execute // purpose : //================================================================================= -bool BasicGUI_CurveDlg::execute( ObjectList& objects ) +bool BasicGUI_CurveDlg::execute (ObjectList& objects) { bool res = false; GEOM::GEOM_Object_var anObj; - GEOM::GEOM_ICurvesOperations_var anOper = GEOM::GEOM_ICurvesOperations::_narrow( getOperation() ); + GEOM::GEOM_ICurvesOperations_var anOper = GEOM::GEOM_ICurvesOperations::_narrow(getOperation()); GEOM::ListOfGO_var points = new GEOM::ListOfGO(); - points->length( myPoints.count() ); - for ( int i = 0; i < myPoints.count(); i++ ) + points->length(myPoints.count()); + for (int i = 0; i < myPoints.count(); i++) points[i] = myPoints[i].copy(); - switch ( getConstructorId() ) { + switch (getConstructorId()) { case 0 : - if( myBySelectionBtn->isChecked() ) - anObj = anOper->MakePolyline( points.in(), GroupPoints->CheckButton1->isChecked() ); + if (myBySelectionBtn->isChecked()) + anObj = anOper->MakePolyline(points.in(), myGroupPoints->CheckButton1->isChecked()); else - anObj = anOper->MakeCurveParametricNew(qPrintable(myParams->myXExpr->text()), - qPrintable(myParams->myYExpr->text()), - qPrintable(myParams->myZExpr->text()), - myParams->myPMin->value(), - myParams->myPMax->value(), - myParams->myPStep->value(), - GEOM::Polyline); + anObj = anOper->MakeCurveParametricNew(qPrintable(myGroupParams->myXExpr->text()), + qPrintable(myGroupParams->myYExpr->text()), + qPrintable(myGroupParams->myZExpr->text()), + myGroupParams->myPMin->value(), + myGroupParams->myPMax->value(), + myGroupParams->myPStep->value(), + GEOM::Polyline); res = true; break; case 1 : - if( myBySelectionBtn->isChecked() ) - anObj = anOper->MakeSplineBezier( points.in(), GroupPoints->CheckButton1->isChecked() ); + if (myBySelectionBtn->isChecked()) + anObj = anOper->MakeSplineBezier(points.in(), myGroupPoints->CheckButton1->isChecked()); else - anObj = anOper->MakeCurveParametricNew(qPrintable(myParams->myXExpr->text()), - qPrintable(myParams->myYExpr->text()), - qPrintable(myParams->myZExpr->text()), - myParams->myPMin->value(), - myParams->myPMax->value(), - myParams->myPStep->value(), - GEOM::Bezier); - + anObj = anOper->MakeCurveParametricNew(qPrintable(myGroupParams->myXExpr->text()), + qPrintable(myGroupParams->myYExpr->text()), + qPrintable(myGroupParams->myZExpr->text()), + myGroupParams->myPMin->value(), + myGroupParams->myPMax->value(), + myGroupParams->myPStep->value(), + GEOM::Bezier); res = true; break; case 2 : - if( myBySelectionBtn->isChecked() ) - anObj = anOper->MakeSplineInterpolation( points.in(), GroupPoints->CheckButton1->isChecked(), - GroupPoints->CheckButton2->isChecked() ); + if (myBySelectionBtn->isChecked()) { + bool disableTangents = (myGroupPoints->CheckButton1->isChecked() || + myGroupPoints->CheckButton2->isChecked()); + if (!disableTangents && myGroupTangents->isChecked()) { + anObj = anOper->MakeSplineInterpolWithTangents(points.in(), myVec1.get(), myVec2.get()); + } + else + anObj = anOper->MakeSplineInterpolation(points.in(), myGroupPoints->CheckButton1->isChecked(), + myGroupPoints->CheckButton2->isChecked()); + } else - anObj = anOper->MakeCurveParametricNew(qPrintable(myParams->myXExpr->text()), - qPrintable(myParams->myYExpr->text()), - qPrintable(myParams->myZExpr->text()), - myParams->myPMin->value(), - myParams->myPMax->value(), - myParams->myPStep->value(), - GEOM::Interpolation); + anObj = anOper->MakeCurveParametricNew(qPrintable(myGroupParams->myXExpr->text()), + qPrintable(myGroupParams->myYExpr->text()), + qPrintable(myGroupParams->myZExpr->text()), + myGroupParams->myPMin->value(), + myGroupParams->myPMax->value(), + myGroupParams->myPStep->value(), + GEOM::Interpolation); res = true; break; } - if ( !anObj->_is_nil() ) { - if(myAnaliticalBtn->isChecked() && !IsPreview()) { + if (!anObj->_is_nil()) { + if (myAnaliticalBtn->isChecked() && !IsPreview()) { QStringList aParameters; - aParameters<myPMin->text(); - aParameters<myPMax->text(); - aParameters<myPStep->text(); + aParameters<myPMin->text(); + aParameters<myPMax->text(); + aParameters<myPStep->text(); anObj->SetParameters(aParameters.join(":").toLatin1().constData()); } - objects.push_back( anObj._retn() ); + objects.push_back(anObj._retn()); } - + return res; } //================================================================================= -// function : addSubshapeToStudy +// function : addSubshapesToStudy // purpose : virtual method to add new SubObjects if local selection //================================================================================= void BasicGUI_CurveDlg::addSubshapesToStudy() @@ -476,19 +566,20 @@ void BasicGUI_CurveDlg::addSubshapesToStudy() // function : CreationModeChanged // purpose : //================================================================================= -void BasicGUI_CurveDlg::CreationModeChanged() { +void BasicGUI_CurveDlg::CreationModeChanged() +{ const QObject* s = sender(); - GroupPoints->setVisible(myBySelectionBtn == s); - myParams->setVisible(myBySelectionBtn != s); - - ConstructorsClicked( getConstructorId() ); + myGroupPoints->setVisible(myBySelectionBtn == s); + myGroupParams->setVisible(myBySelectionBtn != s); + + ConstructorsClicked(getConstructorId()); } //================================================================================= // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void BasicGUI_CurveDlg::ValueChangedInSpinBox(double/*theValue*/) +void BasicGUI_CurveDlg::ValueChangedInSpinBox (double/*theValue*/) { processPreview(); } @@ -497,15 +588,16 @@ void BasicGUI_CurveDlg::ValueChangedInSpinBox(double/*theValue*/) // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void BasicGUI_CurveDlg::ValueChangedInSpinBox(int/*theValue*/) +void BasicGUI_CurveDlg::ValueChangedInSpinBox (int/*theValue*/) { processPreview(); } //================================================================================= -// function : ValueChangedInSpinBox() +// function : OnEditingFinished() // purpose : //================================================================================= -void BasicGUI_CurveDlg::OnEditingFinished() { +void BasicGUI_CurveDlg::OnEditingFinished() +{ processPreview(); } diff --git a/src/BasicGUI/BasicGUI_CurveDlg.h b/src/BasicGUI/BasicGUI_CurveDlg.h index ce9a6a9e7..8d6751b5e 100644 --- a/src/BasicGUI/BasicGUI_CurveDlg.h +++ b/src/BasicGUI/BasicGUI_CurveDlg.h @@ -18,7 +18,6 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // GEOM GEOMGUI : GUI for Geometry component // File : BasicGUI_CurveDlg.h @@ -34,6 +33,9 @@ class DlgRef_1Sel3Check; class QRadioButton; +class QPushButton; +class QLineEdit; +class QGroupBox; class BasicGUI_ParamCurveWidget; //================================================================================= @@ -45,26 +47,34 @@ class BasicGUI_CurveDlg : public GEOMBase_Skeleton Q_OBJECT public: - BasicGUI_CurveDlg( GeometryGUI*, QWidget* = 0, bool = false, Qt::WindowFlags = 0 ); + BasicGUI_CurveDlg (GeometryGUI*, QWidget* = 0, bool = false, Qt::WindowFlags = 0); ~BasicGUI_CurveDlg(); protected: // redefined from GEOMBase_Helper virtual GEOM::GEOM_IOperations_ptr createOperation(); - virtual bool isValid( QString& ); - virtual bool execute( ObjectList& ); + virtual bool isValid (QString&); + virtual bool execute (ObjectList&); virtual void addSubshapesToStudy(); private: void Init(); - void enterEvent( QEvent* ); + void enterEvent (QEvent*); private: - DlgRef_1Sel3Check* GroupPoints; - QList myPoints; QRadioButton* myAnaliticalBtn; QRadioButton* myBySelectionBtn; - BasicGUI_ParamCurveWidget* myParams; + DlgRef_1Sel3Check* myGroupPoints; + BasicGUI_ParamCurveWidget* myGroupParams; + QGroupBox* myGroupTangents; + + QPushButton* myPushBtnV1; + QPushButton* myPushBtnV2; + QLineEdit* myLineEditV1; + QLineEdit* myLineEditV2; + + QList myPoints; + GEOM::GeomObjPtr myVec1, myVec2; private slots: void ClickOnOk(); @@ -73,13 +83,13 @@ private slots: void ActivateThisDialog(); void DeactivateActiveDialog(); - void ConstructorsClicked( int ); + void ConstructorsClicked (int); void CheckButtonToggled(); void SelectionIntoArgument(); void SetEditCurrentArgument(); void CreationModeChanged(); - void ValueChangedInSpinBox(double/*theValue*/); - void ValueChangedInSpinBox(int /*theValue*/); + void ValueChangedInSpinBox (double/*theValue*/); + void ValueChangedInSpinBox (int /*theValue*/); void OnEditingFinished(); }; diff --git a/src/GEOMAlgo/BlockFix.cxx b/src/BlockFix/BlockFix.cxx similarity index 100% rename from src/GEOMAlgo/BlockFix.cxx rename to src/BlockFix/BlockFix.cxx diff --git a/src/GEOMAlgo/BlockFix.hxx b/src/BlockFix/BlockFix.hxx similarity index 78% rename from src/GEOMAlgo/BlockFix.hxx rename to src/BlockFix/BlockFix.hxx index 34007be5c..70d37df65 100644 --- a/src/GEOMAlgo/BlockFix.hxx +++ b/src/BlockFix/BlockFix.hxx @@ -18,14 +18,11 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #ifndef _BlockFix_HeaderFile #define _BlockFix_HeaderFile -#ifndef _Standard_Real_HeaderFile #include -#endif class TopoDS_Shape; class BlockFix_SphereSpaceModifier; @@ -35,36 +32,16 @@ class BlockFix_BlockFixAPI; class BlockFix_PeriodicSurfaceModifier; class BlockFix_CheckTool; -#ifndef _Standard_HeaderFile #include -#endif -#ifndef _Standard_Macro_HeaderFile #include -#endif -class BlockFix { +class BlockFix { public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - Standard_EXPORT static TopoDS_Shape RotateSphereSpace(const TopoDS_Shape& S,const Standard_Real Tol); Standard_EXPORT static TopoDS_Shape RefillProblemFaces(const TopoDS_Shape& S); Standard_EXPORT static TopoDS_Shape FixRanges(const TopoDS_Shape& S,const Standard_Real Tol); -protected: - private: friend class BlockFix_SphereSpaceModifier; @@ -76,6 +53,4 @@ friend class BlockFix_CheckTool; }; -// other Inline functions and methods (like "C++: function call" methods) - #endif diff --git a/src/GEOMAlgo/BlockFix_BlockFixAPI.cxx b/src/BlockFix/BlockFix_BlockFixAPI.cxx similarity index 85% rename from src/GEOMAlgo/BlockFix_BlockFixAPI.cxx rename to src/BlockFix/BlockFix_BlockFixAPI.cxx index 3c82e4a84..376632b4f 100644 --- a/src/GEOMAlgo/BlockFix_BlockFixAPI.cxx +++ b/src/BlockFix/BlockFix_BlockFixAPI.cxx @@ -23,7 +23,7 @@ // Created: Tue Dec 7 11:59:05 2004 // Author: Pavel DURANDIN -#include +#include #include #include @@ -35,11 +35,13 @@ #include +IMPLEMENT_STANDARD_HANDLE(BlockFix_BlockFixAPI, MMgt_TShared); +IMPLEMENT_STANDARD_RTTIEXT(BlockFix_BlockFixAPI, MMgt_TShared); + //======================================================================= -//function : ShapeConvert_CanonicAPI +//function : BlockFix_BlockFixAPI //purpose : //======================================================================= - BlockFix_BlockFixAPI::BlockFix_BlockFixAPI() { myTolerance = Precision::Confusion(); @@ -47,10 +49,15 @@ BlockFix_BlockFixAPI::BlockFix_BlockFixAPI() } //======================================================================= -//function : Perform +//function : ~BlockFix_BlockFixAPI //purpose : //======================================================================= +BlockFix_BlockFixAPI::~BlockFix_BlockFixAPI() {} +//======================================================================= +//function : Perform +//purpose : +//======================================================================= void BlockFix_BlockFixAPI::Perform() { // processing spheres with degenerativities diff --git a/src/GEOMAlgo/BlockFix_BlockFixAPI.lxx b/src/BlockFix/BlockFix_BlockFixAPI.hxx similarity index 72% rename from src/GEOMAlgo/BlockFix_BlockFixAPI.lxx rename to src/BlockFix/BlockFix_BlockFixAPI.hxx index 5992e1794..84140aff5 100644 --- a/src/GEOMAlgo/BlockFix_BlockFixAPI.lxx +++ b/src/BlockFix/BlockFix_BlockFixAPI.hxx @@ -18,15 +18,46 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -#include +#ifndef _BlockFix_BlockFixAPI_HeaderFile +#define _BlockFix_BlockFixAPI_HeaderFile + +#include +#include + +#include +#include +#include +#include + +DEFINE_STANDARD_HANDLE(BlockFix_BlockFixAPI, MMgt_TShared); + +class BlockFix_BlockFixAPI : public MMgt_TShared +{ +public: + Standard_EXPORT BlockFix_BlockFixAPI(); + Standard_EXPORT ~BlockFix_BlockFixAPI(); + + void SetShape(const TopoDS_Shape& Shape); + TopoDS_Shape Shape() const; + Handle_ShapeBuild_ReShape& Context(); + Standard_Real& Tolerance(); + Standard_Integer& OptimumNbFaces(); + Standard_EXPORT void Perform(); + + DEFINE_STANDARD_RTTI(BlockFix_BlockFixAPI); + +private: + Handle_ShapeBuild_ReShape myContext; + TopoDS_Shape myShape; + Standard_Real myTolerance; + Standard_Integer myOptimumNbFaces; +}; //======================================================================= //function : SetShape //purpose : //======================================================================= - inline void BlockFix_BlockFixAPI::SetShape(const TopoDS_Shape& Shape) { myShape = Shape; @@ -36,7 +67,6 @@ inline void BlockFix_BlockFixAPI::SetShape(const TopoDS_Shape& Shape) //function : Shape //purpose : //======================================================================= - inline TopoDS_Shape BlockFix_BlockFixAPI::Shape() const { return myShape; @@ -46,7 +76,6 @@ inline TopoDS_Shape BlockFix_BlockFixAPI::Shape() const //function : Context //purpose : //======================================================================= - inline Handle(ShapeBuild_ReShape)& BlockFix_BlockFixAPI::Context() { return myContext; @@ -56,7 +85,6 @@ inline Handle(ShapeBuild_ReShape)& BlockFix_BlockFixAPI::Context() //function : Tolerance //purpose : //======================================================================= - inline Standard_Real& BlockFix_BlockFixAPI::Tolerance() { return myTolerance; @@ -66,8 +94,9 @@ inline Standard_Real& BlockFix_BlockFixAPI::Tolerance() //function : OptimumNbFaces //purpose : //======================================================================= - inline Standard_Integer& BlockFix_BlockFixAPI::OptimumNbFaces() { return myOptimumNbFaces; } + +#endif diff --git a/src/GEOMAlgo/BlockFix_CheckTool.cxx b/src/BlockFix/BlockFix_CheckTool.cxx similarity index 98% rename from src/GEOMAlgo/BlockFix_CheckTool.cxx rename to src/BlockFix/BlockFix_CheckTool.cxx index 674ef69dd..ba1c5c6af 100644 --- a/src/GEOMAlgo/BlockFix_CheckTool.cxx +++ b/src/BlockFix/BlockFix_CheckTool.cxx @@ -18,48 +18,43 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: BlockFix_CheckTool.cxx // Created: 17.12.04 11:15:25 // Author: Sergey KUUL -// -#include -//#include -//#include +#include #include #include #include + #include #include #include #include +#include + #include #include #include #include - //======================================================================= //function : BlockFix_CheckTool() //purpose : Constructor //======================================================================= - BlockFix_CheckTool::BlockFix_CheckTool( ) { myHasCheck = Standard_False; myPossibleBlocks.Clear(); } - //======================================================================= //function : SetShape //purpose : //======================================================================= - void BlockFix_CheckTool::SetShape(const TopoDS_Shape& aShape) { myHasCheck = Standard_False; @@ -67,12 +62,10 @@ void BlockFix_CheckTool::SetShape(const TopoDS_Shape& aShape) myPossibleBlocks.Clear(); } - //======================================================================= //function : Perform //purpose : //======================================================================= - void BlockFix_CheckTool::Perform() { myNbSolids=0; @@ -229,23 +222,19 @@ void BlockFix_CheckTool::Perform() myHasCheck = Standard_True; } - //======================================================================= //function : NbPossibleBlocks //purpose : //======================================================================= - Standard_Integer BlockFix_CheckTool::NbPossibleBlocks() const { return myPossibleBlocks.Length(); } - //======================================================================= //function : PossibleBlock //purpose : //======================================================================= - TopoDS_Shape BlockFix_CheckTool::PossibleBlock(const Standard_Integer num) const { TopoDS_Shape res; @@ -254,12 +243,10 @@ TopoDS_Shape BlockFix_CheckTool::PossibleBlock(const Standard_Integer num) const return res; } - //======================================================================= //function : DumpCheckResult //purpose : //======================================================================= - void BlockFix_CheckTool::DumpCheckResult(Standard_OStream& S) const { if(!myHasCheck) diff --git a/src/GEOMAlgo/BlockFix_CheckTool.jxx b/src/BlockFix/BlockFix_CheckTool.hxx similarity index 52% rename from src/GEOMAlgo/BlockFix_CheckTool.jxx rename to src/BlockFix/BlockFix_CheckTool.hxx index 7574af057..9378b25d1 100644 --- a/src/GEOMAlgo/BlockFix_CheckTool.jxx +++ b/src/BlockFix/BlockFix_CheckTool.hxx @@ -18,11 +18,42 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif #ifndef _BlockFix_CheckTool_HeaderFile -#include +#define _BlockFix_CheckTool_HeaderFile + +#include +#include +#include +#include +#include + +class TopoDS_Shape; + +#include +#include + +class BlockFix_CheckTool { + +public: + Standard_EXPORT BlockFix_CheckTool(); + Standard_EXPORT void SetShape(const TopoDS_Shape& aShape) ; + Standard_EXPORT void Perform() ; + Standard_EXPORT Standard_Integer NbPossibleBlocks() const; + Standard_EXPORT TopoDS_Shape PossibleBlock(const Standard_Integer num) const; + Standard_EXPORT void DumpCheckResult(Standard_OStream& S) const; + +private: + TopoDS_Shape myShape; + Standard_Boolean myHasCheck; + Standard_Integer myNbSolids; + Standard_Integer myNbBlocks; + TopTools_SequenceOfShape myPossibleBlocks; + Standard_Integer myNbDegen; + Standard_Integer myNbUF; + Standard_Integer myNbUE; + Standard_Integer myNbUFUE; + Standard_Integer myBadRanges; +}; + #endif diff --git a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.cxx b/src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx similarity index 92% rename from src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.cxx rename to src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx index 1e9f33ca0..3894c353f 100644 --- a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.cxx +++ b/src/BlockFix/BlockFix_PeriodicSurfaceModifier.cxx @@ -18,51 +18,71 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: BlockFix_PeriodicSurfaceModifier.cxx // Created: 15.12.04 10:08:50 // Author: Sergey KUUL -#include +#include + +#include + +#include + +#include +#include +#include + +#include #include #include + #include + #include #include -#include -#include +#include +#include + +#include + +#include +IMPLEMENT_STANDARD_HANDLE(BlockFix_PeriodicSurfaceModifier, BRepTools_Modification); +IMPLEMENT_STANDARD_RTTIEXT(BlockFix_PeriodicSurfaceModifier, BRepTools_Modification); //======================================================================= //function : BlockFix_PeriodicSurfaceModifier() //purpose : Constructor //======================================================================= - -BlockFix_PeriodicSurfaceModifier::BlockFix_PeriodicSurfaceModifier ( ) +BlockFix_PeriodicSurfaceModifier::BlockFix_PeriodicSurfaceModifier() { myMapOfFaces.Clear(); myMapOfSurfaces.Clear(); } +//======================================================================= +//function : ~BlockFix_PeriodicSurfaceModifier() +//purpose : Destructor +//======================================================================= +BlockFix_PeriodicSurfaceModifier::~BlockFix_PeriodicSurfaceModifier() +{ +} //======================================================================= //function : SetTolerance //purpose : //======================================================================= - void BlockFix_PeriodicSurfaceModifier::SetTolerance(const Standard_Real Tol) { myTolerance = Tol; } - //======================================================================= //function : ModifySurface //purpose : auxilary //======================================================================= - static Standard_Boolean ModifySurface(const TopoDS_Face& aFace, const Handle(Geom_Surface)& aSurface, Handle(Geom_Surface)& aNewSurface) @@ -102,12 +122,10 @@ static Standard_Boolean ModifySurface(const TopoDS_Face& aFace, return Standard_False; } - //======================================================================= //function : NewSurface //purpose : //======================================================================= - Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewSurface(const TopoDS_Face& F, Handle(Geom_Surface)& S, TopLoc_Location& L,Standard_Real& Tol, @@ -133,12 +151,10 @@ Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewSurface(const TopoDS_Face& return Standard_False; } - //======================================================================= //function : NewCurve //purpose : //======================================================================= - Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewCurve(const TopoDS_Edge& /*E*/, Handle(Geom_Curve)& /*C*/, TopLoc_Location& /*L*/, @@ -147,12 +163,10 @@ Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewCurve(const TopoDS_Edge& / return Standard_False; } - //======================================================================= //function : NewPoint //purpose : //======================================================================= - Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewPoint(const TopoDS_Vertex& /*V*/, gp_Pnt& /*P*/, Standard_Real& /*Tol*/) @@ -160,12 +174,10 @@ Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewPoint(const TopoDS_Vertex& return Standard_False; } - //======================================================================= //function : NewCurve2d //purpose : //======================================================================= - Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewCurve2d(const TopoDS_Edge& E, const TopoDS_Face& F, const TopoDS_Edge& /*NewE*/, @@ -219,12 +231,10 @@ Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewCurve2d(const TopoDS_Edge& return Standard_False; } - //======================================================================= //function : NewParameter //purpose : //======================================================================= - Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewParameter(const TopoDS_Vertex& /*V*/, const TopoDS_Edge& /*E*/, Standard_Real& /*P*/, @@ -233,12 +243,10 @@ Standard_Boolean BlockFix_PeriodicSurfaceModifier::NewParameter(const TopoDS_Ver return Standard_False; } - //======================================================================= //function : Continuity //purpose : //======================================================================= - GeomAbs_Shape BlockFix_PeriodicSurfaceModifier::Continuity(const TopoDS_Edge& E, const TopoDS_Face& F1, const TopoDS_Face& F2, @@ -248,4 +256,3 @@ GeomAbs_Shape BlockFix_PeriodicSurfaceModifier::Continuity(const TopoDS_Edge& E, { return BRep_Tool::Continuity(E,F1,F2); } - diff --git a/src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx b/src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx new file mode 100644 index 000000000..0223b25e2 --- /dev/null +++ b/src/BlockFix/BlockFix_PeriodicSurfaceModifier.hxx @@ -0,0 +1,95 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +#ifndef _BlockFix_PeriodicSurfaceModifier_HeaderFile +#define _BlockFix_PeriodicSurfaceModifier_HeaderFile + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TopoDS_Face; +class Geom_Surface; +class TopLoc_Location; +class TopoDS_Edge; +class Geom_Curve; +class TopoDS_Vertex; +class gp_Pnt; +class Geom2d_Curve; + +DEFINE_STANDARD_HANDLE(BlockFix_PeriodicSurfaceModifier, BRepTools_Modification); + +class BlockFix_PeriodicSurfaceModifier : public BRepTools_Modification { + +public: + Standard_EXPORT BlockFix_PeriodicSurfaceModifier(); + Standard_EXPORT ~BlockFix_PeriodicSurfaceModifier(); + + Standard_EXPORT void SetTolerance (const Standard_Real Toler) ; + Standard_EXPORT Standard_Boolean NewSurface (const TopoDS_Face& F, + Handle(Geom_Surface)& S, + TopLoc_Location& L, + Standard_Real& Tol, + Standard_Boolean& RevWires, + Standard_Boolean& RevFace); + Standard_EXPORT Standard_Boolean NewCurve (const TopoDS_Edge& E, + Handle(Geom_Curve)& C, + TopLoc_Location& L, + Standard_Real& Tol) ; + Standard_EXPORT Standard_Boolean NewPoint (const TopoDS_Vertex& V, gp_Pnt& P, Standard_Real& Tol); + Standard_EXPORT Standard_Boolean NewCurve2d (const TopoDS_Edge& E, + const TopoDS_Face& F, + const TopoDS_Edge& NewE, + const TopoDS_Face& NewF, + Handle(Geom2d_Curve)& C, + Standard_Real& Tol); + Standard_EXPORT Standard_Boolean NewParameter (const TopoDS_Vertex& V, + const TopoDS_Edge& E, + Standard_Real& P, + Standard_Real& Tol); + Standard_EXPORT GeomAbs_Shape Continuity (const TopoDS_Edge& E, + const TopoDS_Face& F1, + const TopoDS_Face& F2, + const TopoDS_Edge& NewE, + const TopoDS_Face& NewF1, + const TopoDS_Face& NewF2); + + DEFINE_STANDARD_RTTI(BlockFix_PeriodicSurfaceModifier); + +private: + Standard_Real myTolerance; + TopTools_DataMapOfShapeInteger myMapOfFaces; + TColStd_IndexedMapOfTransient myMapOfSurfaces; + +}; + +#endif diff --git a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.cxx b/src/BlockFix/BlockFix_SphereSpaceModifier.cxx similarity index 94% rename from src/GEOMAlgo/BlockFix_SphereSpaceModifier.cxx rename to src/BlockFix/BlockFix_SphereSpaceModifier.cxx index 2abc08316..4a984cd45 100644 --- a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.cxx +++ b/src/BlockFix/BlockFix_SphereSpaceModifier.cxx @@ -18,37 +18,50 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: BlockFix.cxx // Created: Tue Dec 7 11:59:05 2004 // Author: Pavel DURANDIN -#include +#include + +#include + +#include + +#include #include + +#include +#include +#include +#include + #include +#include + +#include +#include + #include #include -#include -#include -#include -#include -#include -#include -#include -#include + #include +#include + #include -#include -#include +#include +#include + +IMPLEMENT_STANDARD_HANDLE(BlockFix_SphereSpaceModifier, BRepTools_Modification); +IMPLEMENT_STANDARD_RTTIEXT(BlockFix_SphereSpaceModifier, BRepTools_Modification); //======================================================================= //function : BlockFix_SphereSpaceModifier //purpose : //======================================================================= - BlockFix_SphereSpaceModifier::BlockFix_SphereSpaceModifier() { myMapOfFaces.Clear(); @@ -56,22 +69,24 @@ BlockFix_SphereSpaceModifier::BlockFix_SphereSpaceModifier() } //======================================================================= -//function : SetTolerance +//function : ~BlockFix_SphereSpaceModifier //purpose : //======================================================================= +BlockFix_SphereSpaceModifier::~BlockFix_SphereSpaceModifier() {} +//======================================================================= +//function : SetTolerance +//purpose : +//======================================================================= void BlockFix_SphereSpaceModifier::SetTolerance(const Standard_Real Tol) { myTolerance = Tol; } - //======================================================================= //function : NewSurface //purpose : //======================================================================= - - static Standard_Boolean ModifySurface(const TopoDS_Face& aFace, const Handle(Geom_Surface)& aSurface, Handle(Geom_Surface)& aNewSurface) @@ -132,7 +147,6 @@ static Standard_Boolean ModifySurface(const TopoDS_Face& aFace, return Standard_False; } - Standard_Boolean BlockFix_SphereSpaceModifier::NewSurface(const TopoDS_Face& F, Handle(Geom_Surface)& S, TopLoc_Location& L,Standard_Real& Tol, @@ -163,7 +177,6 @@ Standard_Boolean BlockFix_SphereSpaceModifier::NewSurface(const TopoDS_Face& F, //function : NewCurve //purpose : //======================================================================= - Standard_Boolean BlockFix_SphereSpaceModifier::NewCurve(const TopoDS_Edge& /*E*/,Handle(Geom_Curve)& /*C*/, TopLoc_Location& /*L*/,Standard_Real& /*Tol*/) { @@ -174,7 +187,6 @@ Standard_Boolean BlockFix_SphereSpaceModifier::NewCurve(const TopoDS_Edge& /*E*/ //function : NewPoint //purpose : //======================================================================= - Standard_Boolean BlockFix_SphereSpaceModifier::NewPoint(const TopoDS_Vertex& /*V*/, gp_Pnt& /*P*/, Standard_Real& /*Tol*/) @@ -186,7 +198,6 @@ Standard_Boolean BlockFix_SphereSpaceModifier::NewPoint(const TopoDS_Vertex& /*V //function : NewCurve2d //purpose : //======================================================================= - Standard_Boolean BlockFix_SphereSpaceModifier::NewCurve2d(const TopoDS_Edge& E,const TopoDS_Face& F, const TopoDS_Edge& /*NewE*/,const TopoDS_Face& /*NewF*/, Handle(Geom2d_Curve)& C,Standard_Real& Tol) @@ -249,24 +260,20 @@ Standard_Boolean BlockFix_SphereSpaceModifier::NewCurve2d(const TopoDS_Edge& E,c return Standard_False; } - //======================================================================= //function : NewParameter //purpose : //======================================================================= - Standard_Boolean BlockFix_SphereSpaceModifier::NewParameter(const TopoDS_Vertex& /*V*/,const TopoDS_Edge& /*E*/, Standard_Real& /*P*/,Standard_Real& /*Tol*/) { return Standard_False; } - //======================================================================= //function : Continuity //purpose : //======================================================================= - GeomAbs_Shape BlockFix_SphereSpaceModifier::Continuity(const TopoDS_Edge& E,const TopoDS_Face& F1, const TopoDS_Face& F2,const TopoDS_Edge& /*NewE*/, const TopoDS_Face& /*NewF1*/,const TopoDS_Face& /*NewF2*/) diff --git a/src/BlockFix/BlockFix_SphereSpaceModifier.hxx b/src/BlockFix/BlockFix_SphereSpaceModifier.hxx new file mode 100644 index 000000000..fa620b4e3 --- /dev/null +++ b/src/BlockFix/BlockFix_SphereSpaceModifier.hxx @@ -0,0 +1,82 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +#ifndef _BlockFix_SphereSpaceModifier_HeaderFile +#define _BlockFix_SphereSpaceModifier_HeaderFile + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TopoDS_Face; +class Geom_Surface; +class TopLoc_Location; +class TopoDS_Edge; +class Geom_Curve; +class TopoDS_Vertex; +class gp_Pnt; +class Geom2d_Curve; + +DEFINE_STANDARD_HANDLE(BlockFix_SphereSpaceModifier, BRepTools_Modification); + +class BlockFix_SphereSpaceModifier : public BRepTools_Modification { + +public: + Standard_EXPORT BlockFix_SphereSpaceModifier(); + Standard_EXPORT ~BlockFix_SphereSpaceModifier(); + + Standard_EXPORT void SetTolerance (const Standard_Real Toler); + Standard_EXPORT Standard_Boolean NewSurface (const TopoDS_Face& F, Handle(Geom_Surface)& S, + TopLoc_Location& L, Standard_Real& Tol, + Standard_Boolean& RevWires, Standard_Boolean& RevFace); + Standard_EXPORT Standard_Boolean NewCurve (const TopoDS_Edge& E, Handle(Geom_Curve)& C, + TopLoc_Location& L, Standard_Real& Tol); + Standard_EXPORT Standard_Boolean NewPoint (const TopoDS_Vertex& V, gp_Pnt& P, Standard_Real& Tol); + Standard_EXPORT Standard_Boolean NewCurve2d (const TopoDS_Edge& E, const TopoDS_Face& F, + const TopoDS_Edge& NewE, const TopoDS_Face& NewF, + Handle(Geom2d_Curve)& C, Standard_Real& Tol); + Standard_EXPORT Standard_Boolean NewParameter (const TopoDS_Vertex& V, const TopoDS_Edge& E, + Standard_Real& P, Standard_Real& Tol); + Standard_EXPORT GeomAbs_Shape Continuity (const TopoDS_Edge& E, + const TopoDS_Face& F1,const TopoDS_Face& F2, + const TopoDS_Edge& NewE, + const TopoDS_Face& NewF1, const TopoDS_Face& NewF2); + Standard_EXPORT Standard_Boolean ForRotation (const TopoDS_Face& F); + + DEFINE_STANDARD_RTTI(BlockFix_SphereSpaceModifier); + +private: + Standard_Real myTolerance; + TopTools_DataMapOfShapeInteger myMapOfFaces; + TColStd_IndexedMapOfTransient myMapOfSpheres; + +}; + +#endif diff --git a/src/GEOMAlgo/BlockFix_UnionEdges.cxx b/src/BlockFix/BlockFix_UnionEdges.cxx similarity index 99% rename from src/GEOMAlgo/BlockFix_UnionEdges.cxx rename to src/BlockFix/BlockFix_UnionEdges.cxx index 95a1a713e..531d30a5a 100644 --- a/src/GEOMAlgo/BlockFix_UnionEdges.cxx +++ b/src/BlockFix/BlockFix_UnionEdges.cxx @@ -23,10 +23,12 @@ // Created: 07.12.04 15:27:30 // Author: Sergey KUUL -#include +#include #include +#include + #include #include #include @@ -57,6 +59,7 @@ #include #include #include +#include #include diff --git a/src/GEOMAlgo/BlockFix_UnionEdges.jxx b/src/BlockFix/BlockFix_UnionEdges.hxx similarity index 72% rename from src/GEOMAlgo/BlockFix_UnionEdges.jxx rename to src/BlockFix/BlockFix_UnionEdges.hxx index 558e8d82b..b63f5c7e2 100644 --- a/src/GEOMAlgo/BlockFix_UnionEdges.jxx +++ b/src/BlockFix/BlockFix_UnionEdges.hxx @@ -18,14 +18,30 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -#ifndef _ShapeBuild_ReShape_HeaderFile -#include -#endif -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif #ifndef _BlockFix_UnionEdges_HeaderFile -#include +#define _BlockFix_UnionEdges_HeaderFile + +#include + +#include + +#include +#include + +class TopoDS_Shape; + +class BlockFix_UnionEdges { + +public: + Standard_EXPORT BlockFix_UnionEdges(); + + Standard_EXPORT TopoDS_Shape Perform (const TopoDS_Shape& Shape,const Standard_Real Tol); + +private: + Standard_Real myTolerance; + Handle_ShapeBuild_ReShape myContext; + +}; + #endif diff --git a/src/GEOMAlgo/BlockFix_UnionFaces.cxx b/src/BlockFix/BlockFix_UnionFaces.cxx similarity index 99% rename from src/GEOMAlgo/BlockFix_UnionFaces.cxx rename to src/BlockFix/BlockFix_UnionFaces.cxx index c800fd421..aae28cab6 100644 --- a/src/GEOMAlgo/BlockFix_UnionFaces.cxx +++ b/src/BlockFix/BlockFix_UnionFaces.cxx @@ -18,13 +18,12 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: BlockFix_UnionFaces.cxx // Created: Tue Dec 7 17:15:42 2004 // Author: Pavel DURANDIN -#include +#include #include @@ -73,6 +72,7 @@ #include #include #include +#include #include @@ -104,43 +104,37 @@ //function : BlockFix_UnionFaces //purpose : //======================================================================= - BlockFix_UnionFaces::BlockFix_UnionFaces() : myTolerance(Precision::Confusion()), myOptimumNbFaces(6) { } - //======================================================================= //function : GetTolerance //purpose : //======================================================================= - Standard_Real& BlockFix_UnionFaces::GetTolerance() { return myTolerance; } - //======================================================================= //function : GetOptimumNbFaces //purpose : //======================================================================= - Standard_Integer& BlockFix_UnionFaces::GetOptimumNbFaces() { return myOptimumNbFaces; } - //======================================================================= //function : AddOrdinaryEdges //purpose : auxilary +// adds edges from the shape to the sequence +// seams and equal edges are dropped +// Returns true if one of original edges dropped //======================================================================= -// adds edges from the shape to the sequence -// seams and equal edges are dropped -// Returns true if one of original edges dropped static Standard_Boolean AddOrdinaryEdges(TopTools_SequenceOfShape& edges, const TopoDS_Shape aShape, Standard_Integer& anIndex) @@ -180,7 +174,6 @@ static Standard_Boolean AddOrdinaryEdges(TopTools_SequenceOfShape& edges, return isDropped; } - //======================================================================= //function : ClearRts //purpose : auxilary @@ -195,12 +188,10 @@ static Handle(Geom_Surface) ClearRts(const Handle(Geom_Surface)& aSurface) return aSurface; } - //======================================================================= //function : Perform //purpose : //======================================================================= - TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) { Handle(ShapeBuild_ReShape) myContext = new ShapeBuild_ReShape; @@ -519,12 +510,10 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape) return aResShape; } - //======================================================================= //function : IsSameDomain //purpose : //======================================================================= - bool getCylinder (Handle(Geom_Surface)& theInSurface, gp_Cylinder& theOutCylinder) { bool isCylinder = false; @@ -683,12 +672,10 @@ Standard_Boolean BlockFix_UnionFaces::IsSameDomain(const TopoDS_Face& aFace, return false; } - //======================================================================= //function : MovePCurves //purpose : //======================================================================= - void BlockFix_UnionFaces::MovePCurves(TopoDS_Face& aTarget, const TopoDS_Face& aSource) const { diff --git a/src/GEOMAlgo/BlockFix_UnionFaces.hxx b/src/BlockFix/BlockFix_UnionFaces.hxx similarity index 64% rename from src/GEOMAlgo/BlockFix_UnionFaces.hxx rename to src/BlockFix/BlockFix_UnionFaces.hxx index f676d5bcf..83140b08b 100644 --- a/src/GEOMAlgo/BlockFix_UnionFaces.hxx +++ b/src/BlockFix/BlockFix_UnionFaces.hxx @@ -18,23 +18,14 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #ifndef _BlockFix_UnionFaces_HeaderFile #define _BlockFix_UnionFaces_HeaderFile -#ifndef _Standard_Real_HeaderFile #include -#endif -#ifndef _Standard_Boolean_HeaderFile #include -#endif -#ifndef _Standard_HeaderFile #include -#endif -#ifndef _Standard_Macro_HeaderFile #include -#endif class TopoDS_Shape; class TopoDS_Face; @@ -42,24 +33,9 @@ class TopoDS_Face; class BlockFix_UnionFaces { public: - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - - // Methods PUBLIC - // Standard_EXPORT BlockFix_UnionFaces(); - Standard_EXPORT Standard_Real& GetTolerance(); + Standard_EXPORT Standard_Real& GetTolerance(); /* \brief To get/set the OptimumNbFaces parameter * @@ -71,18 +47,17 @@ public: * negative - do not perform any unions, regardless the faces quantity. * */ - Standard_EXPORT Standard_Integer& GetOptimumNbFaces(); + Standard_EXPORT Standard_Integer& GetOptimumNbFaces(); + + Standard_EXPORT TopoDS_Shape Perform(const TopoDS_Shape& Shape); - Standard_EXPORT TopoDS_Shape Perform(const TopoDS_Shape& Shape); + Standard_EXPORT virtual Standard_Boolean IsSameDomain(const TopoDS_Face& aFace, + const TopoDS_Face& aChekedFace) const; - Standard_EXPORT virtual Standard_Boolean IsSameDomain(const TopoDS_Face& aFace, - const TopoDS_Face& aChekedFace) const; - Standard_EXPORT virtual void MovePCurves(TopoDS_Face& aTarget, - const TopoDS_Face& aSource) const; + Standard_EXPORT virtual void MovePCurves(TopoDS_Face& aTarget, + const TopoDS_Face& aSource) const; private: - // Fields PRIVATE - // Standard_Real myTolerance; Standard_Integer myOptimumNbFaces; }; diff --git a/src/BlockFix/Makefile.am b/src/BlockFix/Makefile.am new file mode 100644 index 000000000..a3b37223d --- /dev/null +++ b/src/BlockFix/Makefile.am @@ -0,0 +1,55 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +# GEOM BlockFix : tools for Blocks algorithms +# File : Makefile.am +# Author : Julia DOROVSKIKH +# Module : GEOM + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# Libraries targets +lib_LTLIBRARIES = libBlockFix.la + +dist_libBlockFix_la_SOURCES = \ + BlockFix_BlockFixAPI.cxx \ + BlockFix_CheckTool.cxx \ + BlockFix.cxx \ + BlockFix_PeriodicSurfaceModifier.cxx \ + BlockFix_SphereSpaceModifier.cxx \ + BlockFix_UnionEdges.cxx \ + BlockFix_UnionFaces.cxx + +# header files +salomeinclude_HEADERS = \ + BlockFix.hxx \ + BlockFix_BlockFixAPI.hxx \ + BlockFix_CheckTool.hxx \ + BlockFix_PeriodicSurfaceModifier.hxx \ + BlockFix_SphereSpaceModifier.hxx \ + BlockFix_UnionEdges.hxx \ + BlockFix_UnionFaces.hxx + +libBlockFix_la_CPPFLAGS = \ + $(CAS_CPPFLAGS) \ + $(KERNEL_CXXFLAGS) + +libBlockFix_la_LDFLAGS = \ + $(STDLIB) \ + $(CAS_LDPATH) -lTKBO -lTKShHealing -lTKBool -lTKMesh -lTKOffset \ + $(KERNEL_LDFLAGS) -lSALOMELocalTrace diff --git a/src/GEOMAlgo/BlockFix.cdl b/src/GEOMAlgo/BlockFix.cdl deleted file mode 100644 index 961af6625..000000000 --- a/src/GEOMAlgo/BlockFix.cdl +++ /dev/null @@ -1,67 +0,0 @@ --- Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE --- --- Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, --- CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS --- --- This library is free software; you can redistribute it and/or --- modify it under the terms of the GNU Lesser General Public --- License as published by the Free Software Foundation; either --- version 2.1 of the License. --- --- This library is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --- Lesser General Public License for more details. --- --- You should have received a copy of the GNU Lesser General Public --- License along with this library; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --- --- See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com --- - --- File: BlockFix.cdl --- Created: Tue Dec 7 11:59:05 2004 --- Author: Pavel Durandin --- -package BlockFix - -uses - - TColStd, - gp, - Geom, - Geom2d, - GeomAbs, - TopLoc, - TopoDS, - BRepTools, - TopTools, - ShapeBuild - -is - - class SphereSpaceModifier; - - class UnionFaces; - - class UnionEdges; - - class BlockFixAPI; - ---Purpose: API class to perform the fixing of the - -- block - - class PeriodicSurfaceModifier; - - class CheckTool; - - RotateSphereSpace (S: Shape from TopoDS; Tol: Real) - returns Shape from TopoDS; - - FixRanges (S: Shape from TopoDS; Tol: Real) - returns Shape from TopoDS; - ---Purpose: checking and fixing cases where parametric - -- boundaries of face based on periodic surface are not - -- contained in the range of this surface. - -end BlockFix; diff --git a/src/GEOMAlgo/BlockFix.ixx b/src/GEOMAlgo/BlockFix.ixx deleted file mode 100644 index 2ea228ff7..000000000 --- a/src/GEOMAlgo/BlockFix.ixx +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - - - - diff --git a/src/GEOMAlgo/BlockFix.jxx b/src/GEOMAlgo/BlockFix.jxx deleted file mode 100644 index 8649f8895..000000000 --- a/src/GEOMAlgo/BlockFix.jxx +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif -#ifndef _BlockFix_HeaderFile -#include -#endif diff --git a/src/GEOMAlgo/BlockFix_BlockFixAPI.cdl b/src/GEOMAlgo/BlockFix_BlockFixAPI.cdl deleted file mode 100644 index 8cb4c49ce..000000000 --- a/src/GEOMAlgo/BlockFix_BlockFixAPI.cdl +++ /dev/null @@ -1,68 +0,0 @@ --- Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE --- --- Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, --- CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS --- --- This library is free software; you can redistribute it and/or --- modify it under the terms of the GNU Lesser General Public --- License as published by the Free Software Foundation; either --- version 2.1 of the License. --- --- This library is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --- Lesser General Public License for more details. --- --- You should have received a copy of the GNU Lesser General Public --- License along with this library; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --- --- See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com --- - --- File: BlockFix_BlockFixAPI.cdl --- Created: Tue Dec 7 17:56:09 2004 --- Author: Pavel Durandin --- -class BlockFixAPI from BlockFix inherits TShared from MMgt - - ---Purpose: - -uses - - Shape from TopoDS, - ReShape from ShapeBuild - -is - Create returns BlockFixAPI from BlockFix; - ---Purpose: Empty constructor - - SetShape(me: mutable; Shape: Shape from TopoDS); - ---Purpose: Sets the shape to be operated on - ---C++: inline - - Perform(me: mutable); - ---Purpose: - - Shape(me) returns Shape from TopoDS; - ---Purpose: Returns resulting shape. - ---C++: inline - - Context(me:mutable) returns ReShape from ShapeBuild; - ---Purpose: Returns modifiable context for storing the - -- mofifications - ---C++: inline - ---C++: return & - - Tolerance (me:mutable) returns Real; - ---Purpose: Returns modifiable tolerance of recognition - ---C++: inline - ---C++: return & - -fields - - myContext : ReShape from ShapeBuild; - myShape : Shape from TopoDS; - myTolerance : Real from Standard; - -end BlockFixAPI from BlockFix; diff --git a/src/GEOMAlgo/BlockFix_BlockFixAPI.hxx b/src/GEOMAlgo/BlockFix_BlockFixAPI.hxx deleted file mode 100644 index 7be25cc57..000000000 --- a/src/GEOMAlgo/BlockFix_BlockFixAPI.hxx +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _BlockFix_BlockFixAPI_HeaderFile -#define _BlockFix_BlockFixAPI_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_BlockFix_BlockFixAPI_HeaderFile -#include -#endif - -#ifndef _Handle_ShapeBuild_ReShape_HeaderFile -#include -#endif -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif -#ifndef _Standard_Real_HeaderFile -#include -#endif -#ifndef _MMgt_TShared_HeaderFile -#include -#endif - -class ShapeBuild_ReShape; -class TopoDS_Shape; - - -class BlockFix_BlockFixAPI : public MMgt_TShared -{ -public: - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - - // Methods PUBLIC - // - Standard_EXPORT BlockFix_BlockFixAPI(); - void SetShape(const TopoDS_Shape& Shape); - Standard_EXPORT void Perform(); - TopoDS_Shape Shape() const; - Handle_ShapeBuild_ReShape& Context(); - Standard_Real& Tolerance(); - Standard_Integer& OptimumNbFaces(); - Standard_EXPORT ~BlockFix_BlockFixAPI(); - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& BlockFix_BlockFixAPI_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -private: - // Fields PRIVATE - // - Handle_ShapeBuild_ReShape myContext; - TopoDS_Shape myShape; - Standard_Real myTolerance; - Standard_Integer myOptimumNbFaces; -}; - -#include - -#endif diff --git a/src/GEOMAlgo/BlockFix_BlockFixAPI.ixx b/src/GEOMAlgo/BlockFix_BlockFixAPI.ixx deleted file mode 100644 index 4d06a875e..000000000 --- a/src/GEOMAlgo/BlockFix_BlockFixAPI.ixx +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -BlockFix_BlockFixAPI::~BlockFix_BlockFixAPI() {} - - - -Standard_EXPORT Handle_Standard_Type& BlockFix_BlockFixAPI_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(MMgt_TShared); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType2 = STANDARD_TYPE(Standard_Transient); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("BlockFix_BlockFixAPI", - sizeof(BlockFix_BlockFixAPI), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(BlockFix_BlockFixAPI) Handle(BlockFix_BlockFixAPI)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(BlockFix_BlockFixAPI) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(BlockFix_BlockFixAPI))) { - _anOtherObject = Handle(BlockFix_BlockFixAPI)((Handle(BlockFix_BlockFixAPI)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& BlockFix_BlockFixAPI::DynamicType() const -{ - return STANDARD_TYPE(BlockFix_BlockFixAPI) ; -} -Standard_Boolean BlockFix_BlockFixAPI::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(BlockFix_BlockFixAPI) == AType || MMgt_TShared::IsKind(AType)); -} -Handle_BlockFix_BlockFixAPI::~Handle_BlockFix_BlockFixAPI() {} - diff --git a/src/GEOMAlgo/BlockFix_BlockFixAPI.jxx b/src/GEOMAlgo/BlockFix_BlockFixAPI.jxx deleted file mode 100644 index 945a6ed88..000000000 --- a/src/GEOMAlgo/BlockFix_BlockFixAPI.jxx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _ShapeBuild_ReShape_HeaderFile -#include -#endif -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif -#ifndef _BlockFix_BlockFixAPI_HeaderFile -#include -#endif diff --git a/src/GEOMAlgo/BlockFix_CheckTool.cdl b/src/GEOMAlgo/BlockFix_CheckTool.cdl deleted file mode 100644 index c5423377f..000000000 --- a/src/GEOMAlgo/BlockFix_CheckTool.cdl +++ /dev/null @@ -1,67 +0,0 @@ --- Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE --- --- Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, --- CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS --- --- This library is free software; you can redistribute it and/or --- modify it under the terms of the GNU Lesser General Public --- License as published by the Free Software Foundation; either --- version 2.1 of the License. --- --- This library is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --- Lesser General Public License for more details. --- --- You should have received a copy of the GNU Lesser General Public --- License along with this library; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --- --- See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com --- - --- File: BlockFix_CheckTool.cdl --- Created: Fri Dec 17 10:36:58 2004 --- Author: Sergey KUUL --- -class CheckTool from BlockFix - - ---Purpose: - -uses - - Shape from TopoDS, - SequenceOfShape from TopTools - -is - - Create returns CheckTool from BlockFix; - ---Purpose: Empty constructor - - SetShape(me: in out; aShape: Shape from TopoDS); - - Perform(me: in out); - ---Purpose: - - NbPossibleBlocks(me) returns Integer; - - PossibleBlock(me; num: Integer) returns Shape from TopoDS; - - DumpCheckResult(me; S : in out OStream); - ---Purpose: Dumps results of checking - - -fields - - myShape : Shape from TopoDS; - myHasCheck : Boolean; - myNbSolids : Integer; - myNbBlocks : Integer; - myPossibleBlocks : SequenceOfShape from TopTools; - myNbDegen : Integer; - myNbUF : Integer; - myNbUE : Integer; - myNbUFUE : Integer; - myBadRanges : Integer; - -end CheckTool; diff --git a/src/GEOMAlgo/BlockFix_CheckTool.hxx b/src/GEOMAlgo/BlockFix_CheckTool.hxx deleted file mode 100644 index 652319e42..000000000 --- a/src/GEOMAlgo/BlockFix_CheckTool.hxx +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _BlockFix_CheckTool_HeaderFile -#define _BlockFix_CheckTool_HeaderFile - -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _Standard_Integer_HeaderFile -#include -#endif -#ifndef _TopTools_SequenceOfShape_HeaderFile -#include -#endif -#ifndef _Standard_OStream_HeaderFile -#include -#endif -class TopoDS_Shape; - - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -class BlockFix_CheckTool { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -Standard_EXPORT BlockFix_CheckTool(); -Standard_EXPORT void SetShape(const TopoDS_Shape& aShape) ; -Standard_EXPORT void Perform() ; -Standard_EXPORT Standard_Integer NbPossibleBlocks() const; -Standard_EXPORT TopoDS_Shape PossibleBlock(const Standard_Integer num) const; -Standard_EXPORT void DumpCheckResult(Standard_OStream& S) const; - - - - - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -TopoDS_Shape myShape; -Standard_Boolean myHasCheck; -Standard_Integer myNbSolids; -Standard_Integer myNbBlocks; -TopTools_SequenceOfShape myPossibleBlocks; -Standard_Integer myNbDegen; -Standard_Integer myNbUF; -Standard_Integer myNbUE; -Standard_Integer myNbUFUE; -Standard_Integer myBadRanges; - - -}; - - - - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/GEOMAlgo/BlockFix_CheckTool.ixx b/src/GEOMAlgo/BlockFix_CheckTool.ixx deleted file mode 100644 index d44f98056..000000000 --- a/src/GEOMAlgo/BlockFix_CheckTool.ixx +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - - - - diff --git a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.cdl b/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.cdl deleted file mode 100644 index 374af919c..000000000 --- a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.cdl +++ /dev/null @@ -1,135 +0,0 @@ --- Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE --- --- Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, --- CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS --- --- This library is free software; you can redistribute it and/or --- modify it under the terms of the GNU Lesser General Public --- License as published by the Free Software Foundation; either --- version 2.1 of the License. --- --- This library is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --- Lesser General Public License for more details. --- --- You should have received a copy of the GNU Lesser General Public --- License along with this library; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --- --- See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com --- - --- File: BlockFix_PeriodicSurfaceModifier.cdl --- Created: Wed Dec 15 10:03:50 2004 --- Author: Sergey KUUL --- -class PeriodicSurfaceModifier from BlockFix inherits Modification from BRepTools - - ---Purpose: - -uses - Vertex from TopoDS, - Edge from TopoDS, - Face from TopoDS, - Location from TopLoc, - Shape from GeomAbs, - Pnt from gp, - Curve from Geom, - Curve from Geom2d, - Surface from Geom, - IndexedMapOfTransient from TColStd, - DataMapOfShapeInteger from TopTools - -is - - Create returns mutable PeriodicSurfaceModifier from BlockFix; - - SetTolerance(me: mutable; Toler: Real); - ---Purpose: Sets the tolerance for recognition of geometry - - NewSurface(me: mutable; F : Face from TopoDS; - S : out Surface from Geom; - L : out Location from TopLoc; - Tol: out Real from Standard; - RevWires : out Boolean from Standard; - RevFace : out Boolean from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the face has been - -- modified. In this case, is the new geometric - -- support of the face, the new location, - -- the new tolerance. Otherwise, returns - -- Standard_False, and , , are not - -- significant. - - NewCurve(me: mutable; E : Edge from TopoDS; - C : out Curve from Geom; - L : out Location from TopLoc; - Tol: out Real from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the edge has been - -- modified. In this case, is the new geometric - -- support of the edge, the new location, - -- the new tolerance. Otherwise, returns - -- Standard_False, and , , are not - -- significant. - - NewPoint(me: mutable; V : Vertex from TopoDS; - P : out Pnt from gp; - Tol: out Real from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the vertex has been - -- modified. In this case,

    is the new geometric - -- support of the vertex, the new tolerance. - -- Otherwise, returns Standard_False, and

    , - -- are not significant. - - NewCurve2d(me: mutable; E : Edge from TopoDS; - F : Face from TopoDS; - NewE : Edge from TopoDS; - NewF : Face from TopoDS; - C : out Curve from Geom2d; - Tol : out Real from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the edge has a new - -- curve on surface on the face .In this case, - -- is the new geometric support of the edge, the - -- new location, the new tolerance. - -- - -- Otherwise, returns Standard_False, and , , - -- are not significant. - -- - -- is the new edge created from . - -- is the new face created from . They may be usefull. - - NewParameter(me: mutable; V : Vertex from TopoDS; - E : Edge from TopoDS; - P : out Real from Standard; - Tol: out Real from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the Vertex has a new - -- parameter on the edge . In this case,

    is - -- the parameter, the new tolerance. - -- Otherwise, returns Standard_False, and

    , - -- are not significant. - - Continuity(me: mutable; E : Edge from TopoDS; - F1,F2 : Face from TopoDS; - NewE : Edge from TopoDS; - NewF1,NewF2: Face from TopoDS) - returns Shape from GeomAbs; - ---Purpose: Returns the continuity of between - -- and . - -- - -- is the new edge created from . - -- (resp. ) is the new face created from - -- (resp. ). - - -fields - - myTolerance : Real; - myMapOfFaces : DataMapOfShapeInteger from TopTools; - myMapOfSurfaces: IndexedMapOfTransient from TColStd; - -end PeriodicSurfaceModifier; diff --git a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.hxx b/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.hxx deleted file mode 100644 index 39d2062ea..000000000 --- a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.hxx +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _BlockFix_PeriodicSurfaceModifier_HeaderFile -#define _BlockFix_PeriodicSurfaceModifier_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_BlockFix_PeriodicSurfaceModifier_HeaderFile -#include -#endif - -#ifndef _Standard_Real_HeaderFile -#include -#endif -#ifndef _TopTools_DataMapOfShapeInteger_HeaderFile -#include -#endif -#ifndef _TColStd_IndexedMapOfTransient_HeaderFile -#include -#endif -#ifndef _BRepTools_Modification_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _Handle_Geom_Surface_HeaderFile -#include -#endif -#ifndef _Handle_Geom_Curve_HeaderFile -#include -#endif -#ifndef _Handle_Geom2d_Curve_HeaderFile -#include -#endif -#ifndef _GeomAbs_Shape_HeaderFile -#include -#endif -class TopoDS_Face; -class Geom_Surface; -class TopLoc_Location; -class TopoDS_Edge; -class Geom_Curve; -class TopoDS_Vertex; -class gp_Pnt; -class Geom2d_Curve; - - -class BlockFix_PeriodicSurfaceModifier : public BRepTools_Modification { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -Standard_EXPORT BlockFix_PeriodicSurfaceModifier(); -Standard_EXPORT void SetTolerance(const Standard_Real Toler) ; -Standard_EXPORT Standard_Boolean NewSurface(const TopoDS_Face& F,Handle(Geom_Surface)& S,TopLoc_Location& L,Standard_Real& Tol,Standard_Boolean& RevWires,Standard_Boolean& RevFace) ; -Standard_EXPORT Standard_Boolean NewCurve(const TopoDS_Edge& E,Handle(Geom_Curve)& C,TopLoc_Location& L,Standard_Real& Tol) ; -Standard_EXPORT Standard_Boolean NewPoint(const TopoDS_Vertex& V,gp_Pnt& P,Standard_Real& Tol) ; -Standard_EXPORT Standard_Boolean NewCurve2d(const TopoDS_Edge& E,const TopoDS_Face& F,const TopoDS_Edge& NewE,const TopoDS_Face& NewF,Handle(Geom2d_Curve)& C,Standard_Real& Tol) ; -Standard_EXPORT Standard_Boolean NewParameter(const TopoDS_Vertex& V,const TopoDS_Edge& E,Standard_Real& P,Standard_Real& Tol) ; -Standard_EXPORT GeomAbs_Shape Continuity(const TopoDS_Edge& E,const TopoDS_Face& F1,const TopoDS_Face& F2,const TopoDS_Edge& NewE,const TopoDS_Face& NewF1,const TopoDS_Face& NewF2) ; -Standard_EXPORT ~BlockFix_PeriodicSurfaceModifier(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& BlockFix_PeriodicSurfaceModifier_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -Standard_Real myTolerance; -TopTools_DataMapOfShapeInteger myMapOfFaces; -TColStd_IndexedMapOfTransient myMapOfSurfaces; - - -}; - - - - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.ixx b/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.ixx deleted file mode 100644 index da3bdc95e..000000000 --- a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.ixx +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -BlockFix_PeriodicSurfaceModifier::~BlockFix_PeriodicSurfaceModifier() {} - - - -Standard_EXPORT Handle_Standard_Type& BlockFix_PeriodicSurfaceModifier_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(BRepTools_Modification); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(BRepTools_Modification); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("BlockFix_PeriodicSurfaceModifier", - sizeof(BlockFix_PeriodicSurfaceModifier), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(BlockFix_PeriodicSurfaceModifier) Handle(BlockFix_PeriodicSurfaceModifier)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(BlockFix_PeriodicSurfaceModifier) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(BlockFix_PeriodicSurfaceModifier))) { - _anOtherObject = Handle(BlockFix_PeriodicSurfaceModifier)((Handle(BlockFix_PeriodicSurfaceModifier)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& BlockFix_PeriodicSurfaceModifier::DynamicType() const -{ - return STANDARD_TYPE(BlockFix_PeriodicSurfaceModifier) ; -} -Standard_Boolean BlockFix_PeriodicSurfaceModifier::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(BlockFix_PeriodicSurfaceModifier) == AType || BRepTools_Modification::IsKind(AType)); -} -Handle_BlockFix_PeriodicSurfaceModifier::~Handle_BlockFix_PeriodicSurfaceModifier() {} - diff --git a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.jxx b/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.jxx deleted file mode 100644 index 29c1c1e34..000000000 --- a/src/GEOMAlgo/BlockFix_PeriodicSurfaceModifier.jxx +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _TopoDS_Face_HeaderFile -#include -#endif -#ifndef _Geom_Surface_HeaderFile -#include -#endif -#ifndef _TopLoc_Location_HeaderFile -#include -#endif -#ifndef _TopoDS_Edge_HeaderFile -#include -#endif -#ifndef _Geom_Curve_HeaderFile -#include -#endif -#ifndef _TopoDS_Vertex_HeaderFile -#include -#endif -#ifndef _gp_Pnt_HeaderFile -#include -#endif -#ifndef _Geom2d_Curve_HeaderFile -#include -#endif -#ifndef _BlockFix_PeriodicSurfaceModifier_HeaderFile -#include -#endif diff --git a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.cdl b/src/GEOMAlgo/BlockFix_SphereSpaceModifier.cdl deleted file mode 100644 index da614611b..000000000 --- a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.cdl +++ /dev/null @@ -1,139 +0,0 @@ --- Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE --- --- Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, --- CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS --- --- This library is free software; you can redistribute it and/or --- modify it under the terms of the GNU Lesser General Public --- License as published by the Free Software Foundation; either --- version 2.1 of the License. --- --- This library is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --- Lesser General Public License for more details. --- --- You should have received a copy of the GNU Lesser General Public --- License along with this library; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --- --- See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com --- - --- File: BlockFix_SphereSpaceModifier.cdl --- Created: Tue Dec 7 12:01:49 2004 --- Author: Pavel Durandin --- -class SphereSpaceModifier from BlockFix inherits Modification from BRepTools - - ---Purpose: Rotation of the parametric space of the sphere in order - -- to avoid the seam and degenerared edge within it - -uses - Vertex from TopoDS, - Edge from TopoDS, - Face from TopoDS, - Location from TopLoc, - Shape from GeomAbs, - Pnt from gp, - Curve from Geom, - Curve from Geom2d, - Surface from Geom, - IndexedMapOfTransient from TColStd, - DataMapOfShapeInteger from TopTools - -is - - Create returns mutable SphereSpaceModifier from BlockFix; - - SetTolerance(me: mutable; Toler: Real); - ---Purpose: Sets the tolerance for recognition of geometry - - NewSurface(me: mutable; F : Face from TopoDS; - S : out Surface from Geom; - L : out Location from TopLoc; - Tol: out Real from Standard; - RevWires : out Boolean from Standard; - RevFace : out Boolean from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the face has been - -- modified. In this case, is the new geometric - -- support of the face, the new location, - -- the new tolerance. Otherwise, returns - -- Standard_False, and , , are not - -- significant. - - NewCurve(me: mutable; E : Edge from TopoDS; - C : out Curve from Geom; - L : out Location from TopLoc; - Tol: out Real from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the edge has been - -- modified. In this case, is the new geometric - -- support of the edge, the new location, - -- the new tolerance. Otherwise, returns - -- Standard_False, and , , are not - -- significant. - - NewPoint(me: mutable; V : Vertex from TopoDS; - P : out Pnt from gp; - Tol: out Real from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the vertex has been - -- modified. In this case,

    is the new geometric - -- support of the vertex, the new tolerance. - -- Otherwise, returns Standard_False, and

    , - -- are not significant. - - NewCurve2d(me: mutable; E : Edge from TopoDS; - F : Face from TopoDS; - NewE : Edge from TopoDS; - NewF : Face from TopoDS; - C : out Curve from Geom2d; - Tol : out Real from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the edge has a new - -- curve on surface on the face .In this case, - -- is the new geometric support of the edge, the - -- new location, the new tolerance. - -- - -- Otherwise, returns Standard_False, and , , - -- are not significant. - -- - -- is the new edge created from . - -- is the new face created from . They may be usefull. - - NewParameter(me: mutable; V : Vertex from TopoDS; - E : Edge from TopoDS; - P : out Real from Standard; - Tol: out Real from Standard) - returns Boolean from Standard; - ---Purpose: Returns Standard_True if the Vertex has a new - -- parameter on the edge . In this case,

    is - -- the parameter, the new tolerance. - -- Otherwise, returns Standard_False, and

    , - -- are not significant. - - Continuity(me: mutable; E : Edge from TopoDS; - F1,F2 : Face from TopoDS; - NewE : Edge from TopoDS; - NewF1,NewF2: Face from TopoDS) - returns Shape from GeomAbs; - ---Purpose: Returns the continuity of between - -- and . - -- - -- is the new edge created from . - -- (resp. ) is the new face created from - -- (resp. ). - - ForRotation(me: mutable; F: Face from TopoDS) returns Boolean; - -fields - - myTolerance : Real; - myMapOfFaces : DataMapOfShapeInteger from TopTools; - myMapOfSpheres: IndexedMapOfTransient from TColStd; - --myMapOfGeom: MapOfShapeTransient from TColStd; - -end SphereSpaceModifier; - diff --git a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.hxx b/src/GEOMAlgo/BlockFix_SphereSpaceModifier.hxx deleted file mode 100644 index fb11fdbae..000000000 --- a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.hxx +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _BlockFix_SphereSpaceModifier_HeaderFile -#define _BlockFix_SphereSpaceModifier_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_BlockFix_SphereSpaceModifier_HeaderFile -#include -#endif - -#ifndef _Standard_Real_HeaderFile -#include -#endif -#ifndef _TopTools_DataMapOfShapeInteger_HeaderFile -#include -#endif -#ifndef _TColStd_IndexedMapOfTransient_HeaderFile -#include -#endif -#ifndef _BRepTools_Modification_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _Handle_Geom_Surface_HeaderFile -#include -#endif -#ifndef _Handle_Geom_Curve_HeaderFile -#include -#endif -#ifndef _Handle_Geom2d_Curve_HeaderFile -#include -#endif -#ifndef _GeomAbs_Shape_HeaderFile -#include -#endif -class TopoDS_Face; -class Geom_Surface; -class TopLoc_Location; -class TopoDS_Edge; -class Geom_Curve; -class TopoDS_Vertex; -class gp_Pnt; -class Geom2d_Curve; - - -class BlockFix_SphereSpaceModifier : public BRepTools_Modification { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -Standard_EXPORT BlockFix_SphereSpaceModifier(); -Standard_EXPORT void SetTolerance(const Standard_Real Toler) ; -Standard_EXPORT Standard_Boolean NewSurface(const TopoDS_Face& F,Handle(Geom_Surface)& S,TopLoc_Location& L,Standard_Real& Tol,Standard_Boolean& RevWires,Standard_Boolean& RevFace) ; -Standard_EXPORT Standard_Boolean NewCurve(const TopoDS_Edge& E,Handle(Geom_Curve)& C,TopLoc_Location& L,Standard_Real& Tol) ; -Standard_EXPORT Standard_Boolean NewPoint(const TopoDS_Vertex& V,gp_Pnt& P,Standard_Real& Tol) ; -Standard_EXPORT Standard_Boolean NewCurve2d(const TopoDS_Edge& E,const TopoDS_Face& F,const TopoDS_Edge& NewE,const TopoDS_Face& NewF,Handle(Geom2d_Curve)& C,Standard_Real& Tol) ; -Standard_EXPORT Standard_Boolean NewParameter(const TopoDS_Vertex& V,const TopoDS_Edge& E,Standard_Real& P,Standard_Real& Tol) ; -Standard_EXPORT GeomAbs_Shape Continuity(const TopoDS_Edge& E,const TopoDS_Face& F1,const TopoDS_Face& F2,const TopoDS_Edge& NewE,const TopoDS_Face& NewF1,const TopoDS_Face& NewF2) ; -Standard_EXPORT Standard_Boolean ForRotation(const TopoDS_Face& F) ; -Standard_EXPORT ~BlockFix_SphereSpaceModifier(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& BlockFix_SphereSpaceModifier_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -Standard_Real myTolerance; -TopTools_DataMapOfShapeInteger myMapOfFaces; -TColStd_IndexedMapOfTransient myMapOfSpheres; - - -}; - - - - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.ixx b/src/GEOMAlgo/BlockFix_SphereSpaceModifier.ixx deleted file mode 100644 index 482241f6d..000000000 --- a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.ixx +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -BlockFix_SphereSpaceModifier::~BlockFix_SphereSpaceModifier() {} - - - -Standard_EXPORT Handle_Standard_Type& BlockFix_SphereSpaceModifier_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(BRepTools_Modification); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(BRepTools_Modification); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("BlockFix_SphereSpaceModifier", - sizeof(BlockFix_SphereSpaceModifier), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(BlockFix_SphereSpaceModifier) Handle(BlockFix_SphereSpaceModifier)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(BlockFix_SphereSpaceModifier) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(BlockFix_SphereSpaceModifier))) { - _anOtherObject = Handle(BlockFix_SphereSpaceModifier)((Handle(BlockFix_SphereSpaceModifier)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& BlockFix_SphereSpaceModifier::DynamicType() const -{ - return STANDARD_TYPE(BlockFix_SphereSpaceModifier) ; -} -Standard_Boolean BlockFix_SphereSpaceModifier::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(BlockFix_SphereSpaceModifier) == AType || BRepTools_Modification::IsKind(AType)); -} -Handle_BlockFix_SphereSpaceModifier::~Handle_BlockFix_SphereSpaceModifier() {} - diff --git a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.jxx b/src/GEOMAlgo/BlockFix_SphereSpaceModifier.jxx deleted file mode 100644 index 050734179..000000000 --- a/src/GEOMAlgo/BlockFix_SphereSpaceModifier.jxx +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _TopoDS_Face_HeaderFile -#include -#endif -#ifndef _Geom_Surface_HeaderFile -#include -#endif -#ifndef _TopLoc_Location_HeaderFile -#include -#endif -#ifndef _TopoDS_Edge_HeaderFile -#include -#endif -#ifndef _Geom_Curve_HeaderFile -#include -#endif -#ifndef _TopoDS_Vertex_HeaderFile -#include -#endif -#ifndef _gp_Pnt_HeaderFile -#include -#endif -#ifndef _Geom2d_Curve_HeaderFile -#include -#endif -#ifndef _BlockFix_SphereSpaceModifier_HeaderFile -#include -#endif diff --git a/src/GEOMAlgo/BlockFix_UnionEdges.cdl b/src/GEOMAlgo/BlockFix_UnionEdges.cdl deleted file mode 100644 index 05a9f3870..000000000 --- a/src/GEOMAlgo/BlockFix_UnionEdges.cdl +++ /dev/null @@ -1,49 +0,0 @@ --- Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE --- --- Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, --- CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS --- --- This library is free software; you can redistribute it and/or --- modify it under the terms of the GNU Lesser General Public --- License as published by the Free Software Foundation; either --- version 2.1 of the License. --- --- This library is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --- Lesser General Public License for more details. --- --- You should have received a copy of the GNU Lesser General Public --- License along with this library; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --- --- See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com --- - --- File: BlockFix_UnionEdges.cdl --- Created: Tue Dec 7 15:24:51 2004 --- Author: Sergey KUUL --- -class UnionEdges from BlockFix - - ---Purpose: - -uses - - Shape from TopoDS, - ReShape from ShapeBuild - -is - - Create returns UnionEdges from BlockFix; - - Perform(me: in out; Shape: Shape from TopoDS; - Tol : Real) - returns Shape from TopoDS; - -fields - - myTolerance : Real; - myContext : ReShape from ShapeBuild; - -end UnionEdges; diff --git a/src/GEOMAlgo/BlockFix_UnionEdges.hxx b/src/GEOMAlgo/BlockFix_UnionEdges.hxx deleted file mode 100644 index b38e941fb..000000000 --- a/src/GEOMAlgo/BlockFix_UnionEdges.hxx +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _BlockFix_UnionEdges_HeaderFile -#define _BlockFix_UnionEdges_HeaderFile - -#ifndef _Standard_Real_HeaderFile -#include -#endif -#ifndef _Handle_ShapeBuild_ReShape_HeaderFile -#include -#endif -class ShapeBuild_ReShape; -class TopoDS_Shape; - - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -class BlockFix_UnionEdges { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -Standard_EXPORT BlockFix_UnionEdges(); -Standard_EXPORT TopoDS_Shape Perform(const TopoDS_Shape& Shape,const Standard_Real Tol) ; - - - - - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -Standard_Real myTolerance; -Handle_ShapeBuild_ReShape myContext; - - -}; - - - - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/GEOMAlgo/BlockFix_UnionEdges.ixx b/src/GEOMAlgo/BlockFix_UnionEdges.ixx deleted file mode 100644 index 27e87ac6c..000000000 --- a/src/GEOMAlgo/BlockFix_UnionEdges.ixx +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - - - - diff --git a/src/GEOMAlgo/BlockFix_UnionFaces.cdl b/src/GEOMAlgo/BlockFix_UnionFaces.cdl deleted file mode 100644 index 371cb25ea..000000000 --- a/src/GEOMAlgo/BlockFix_UnionFaces.cdl +++ /dev/null @@ -1,65 +0,0 @@ --- Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE --- --- Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, --- CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS --- --- This library is free software; you can redistribute it and/or --- modify it under the terms of the GNU Lesser General Public --- License as published by the Free Software Foundation; either --- version 2.1 of the License. --- --- This library is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --- Lesser General Public License for more details. --- --- You should have received a copy of the GNU Lesser General Public --- License along with this library; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --- --- See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com --- - --- File: BlockFix_UnionFaces.cdl --- Created: Tue Dec 7 17:15:42 2004 --- Author: Pavel Durandin --- -class UnionFaces from BlockFix - -uses - - Face from TopoDS, - Shape from TopoDS - -is - - Create returns UnionFaces from BlockFix; - ---Purpose: Empty constructor - - GetTolerance(me: in out) returns Real; - ---Purpose: Returns modifiable tolerance - ---C++: return& - - Perform (me: in out; Shape: Shape from TopoDS) returns Shape from TopoDS; - ---Purpose: Performs the unification of the fsces - -- whith the same geometry - - IsSameDomain(me; aFace : Face from TopoDS; - aChekedFace: Face from TopoDS) - returns Boolean is virtual; - ---Purpose: Returns true is surfaces have same geometrically domain - -- with given tolerance - - MovePCurves(me; aTarget: in out Face from TopoDS; - aSource: Face from TopoDS) - is virtual; - ---Purpose: Creates pcurves on aTarget face for each edge from - -- aSource one. - -fields - - myTolerance: Real; - -end; - - diff --git a/src/GEOMAlgo/BlockFix_UnionFaces.ixx b/src/GEOMAlgo/BlockFix_UnionFaces.ixx deleted file mode 100644 index c5299ca40..000000000 --- a/src/GEOMAlgo/BlockFix_UnionFaces.ixx +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include - - - - diff --git a/src/GEOMAlgo/BlockFix_UnionFaces.jxx b/src/GEOMAlgo/BlockFix_UnionFaces.jxx deleted file mode 100644 index c89fc31fb..000000000 --- a/src/GEOMAlgo/BlockFix_UnionFaces.jxx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif -#ifndef _TopoDS_Face_HeaderFile -#include -#endif -#ifndef _BlockFix_UnionFaces_HeaderFile -#include -#endif diff --git a/src/GEOMAlgo/FILES b/src/GEOMAlgo/FILES index 44aeb0c17..102101794 100644 --- a/src/GEOMAlgo/FILES +++ b/src/GEOMAlgo/FILES @@ -140,30 +140,3 @@ GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx GEOMAlgo_IndexedDataMapOfShapeState.hxx GEOMAlgo_IndexedDataMapOfIntegerShape.hxx GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/GEOMAlgo/Handle_BlockFix_BlockFixAPI.hxx b/src/GEOMAlgo/Handle_BlockFix_BlockFixAPI.hxx deleted file mode 100644 index 3fce5be46..000000000 --- a/src/GEOMAlgo/Handle_BlockFix_BlockFixAPI.hxx +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _Handle_BlockFix_BlockFixAPI_HeaderFile -#define _Handle_BlockFix_BlockFixAPI_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_MMgt_TShared_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(MMgt_TShared); -class BlockFix_BlockFixAPI; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(BlockFix_BlockFixAPI); - -class Handle(BlockFix_BlockFixAPI) : public Handle(MMgt_TShared) { - public: - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - Handle(BlockFix_BlockFixAPI)():Handle(MMgt_TShared)() {} - Handle(BlockFix_BlockFixAPI)(const Handle(BlockFix_BlockFixAPI)& aHandle) : Handle(MMgt_TShared)(aHandle) - { - } - - Handle(BlockFix_BlockFixAPI)(const BlockFix_BlockFixAPI* anItem) : Handle(MMgt_TShared)((MMgt_TShared *)anItem) - { - } - - Handle(BlockFix_BlockFixAPI)& operator=(const Handle(BlockFix_BlockFixAPI)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(BlockFix_BlockFixAPI)& operator=(const BlockFix_BlockFixAPI* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - BlockFix_BlockFixAPI* operator->() - { - return (BlockFix_BlockFixAPI *)ControlAccess(); - } - - BlockFix_BlockFixAPI* operator->() const - { - return (BlockFix_BlockFixAPI *)ControlAccess(); - } - - Standard_EXPORT ~Handle(BlockFix_BlockFixAPI)(); - - Standard_EXPORT static const Handle(BlockFix_BlockFixAPI) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/GEOMAlgo/Handle_BlockFix_PeriodicSurfaceModifier.hxx b/src/GEOMAlgo/Handle_BlockFix_PeriodicSurfaceModifier.hxx deleted file mode 100644 index 1cb29e022..000000000 --- a/src/GEOMAlgo/Handle_BlockFix_PeriodicSurfaceModifier.hxx +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _Handle_BlockFix_PeriodicSurfaceModifier_HeaderFile -#define _Handle_BlockFix_PeriodicSurfaceModifier_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_BRepTools_Modification_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(BRepTools_Modification); -class BlockFix_PeriodicSurfaceModifier; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(BlockFix_PeriodicSurfaceModifier); - -class Handle(BlockFix_PeriodicSurfaceModifier) : public Handle(BRepTools_Modification) { - public: - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - Handle(BlockFix_PeriodicSurfaceModifier)():Handle(BRepTools_Modification)() {} - Handle(BlockFix_PeriodicSurfaceModifier)(const Handle(BlockFix_PeriodicSurfaceModifier)& aHandle) : Handle(BRepTools_Modification)(aHandle) - { - } - - Handle(BlockFix_PeriodicSurfaceModifier)(const BlockFix_PeriodicSurfaceModifier* anItem) : Handle(BRepTools_Modification)((BRepTools_Modification *)anItem) - { - } - - Handle(BlockFix_PeriodicSurfaceModifier)& operator=(const Handle(BlockFix_PeriodicSurfaceModifier)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(BlockFix_PeriodicSurfaceModifier)& operator=(const BlockFix_PeriodicSurfaceModifier* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - BlockFix_PeriodicSurfaceModifier* operator->() - { - return (BlockFix_PeriodicSurfaceModifier *)ControlAccess(); - } - - BlockFix_PeriodicSurfaceModifier* operator->() const - { - return (BlockFix_PeriodicSurfaceModifier *)ControlAccess(); - } - - Standard_EXPORT ~Handle(BlockFix_PeriodicSurfaceModifier)(); - - Standard_EXPORT static const Handle(BlockFix_PeriodicSurfaceModifier) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/GEOMAlgo/Handle_BlockFix_SphereSpaceModifier.hxx b/src/GEOMAlgo/Handle_BlockFix_SphereSpaceModifier.hxx deleted file mode 100644 index 33dc8a198..000000000 --- a/src/GEOMAlgo/Handle_BlockFix_SphereSpaceModifier.hxx +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef _Handle_BlockFix_SphereSpaceModifier_HeaderFile -#define _Handle_BlockFix_SphereSpaceModifier_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_BRepTools_Modification_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(BRepTools_Modification); -class BlockFix_SphereSpaceModifier; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(BlockFix_SphereSpaceModifier); - -class Handle(BlockFix_SphereSpaceModifier) : public Handle(BRepTools_Modification) { - public: - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - Handle(BlockFix_SphereSpaceModifier)():Handle(BRepTools_Modification)() {} - Handle(BlockFix_SphereSpaceModifier)(const Handle(BlockFix_SphereSpaceModifier)& aHandle) : Handle(BRepTools_Modification)(aHandle) - { - } - - Handle(BlockFix_SphereSpaceModifier)(const BlockFix_SphereSpaceModifier* anItem) : Handle(BRepTools_Modification)((BRepTools_Modification *)anItem) - { - } - - Handle(BlockFix_SphereSpaceModifier)& operator=(const Handle(BlockFix_SphereSpaceModifier)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(BlockFix_SphereSpaceModifier)& operator=(const BlockFix_SphereSpaceModifier* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - BlockFix_SphereSpaceModifier* operator->() - { - return (BlockFix_SphereSpaceModifier *)ControlAccess(); - } - - BlockFix_SphereSpaceModifier* operator->() const - { - return (BlockFix_SphereSpaceModifier *)ControlAccess(); - } - - Standard_EXPORT ~Handle(BlockFix_SphereSpaceModifier)(); - - Standard_EXPORT static const Handle(BlockFix_SphereSpaceModifier) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/GEOMAlgo/Makefile.am b/src/GEOMAlgo/Makefile.am index dacba0542..f54398d11 100644 --- a/src/GEOMAlgo/Makefile.am +++ b/src/GEOMAlgo/Makefile.am @@ -15,7 +15,6 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# # GEOM GEOMAlgo : tools for Glue Faces algorithm # File : Makefile.am @@ -28,13 +27,6 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am lib_LTLIBRARIES = libGEOMAlgo.la dist_libGEOMAlgo_la_SOURCES = \ - BlockFix_BlockFixAPI.cxx \ - BlockFix_CheckTool.cxx \ - BlockFix.cxx \ - BlockFix_PeriodicSurfaceModifier.cxx \ - BlockFix_SphereSpaceModifier.cxx \ - BlockFix_UnionEdges.cxx \ - BlockFix_UnionFaces.cxx \ GEOMAlgo_Algo.cxx \ GEOMAlgo_Builder_0.cxx \ GEOMAlgo_Builder_1.cxx \ @@ -96,31 +88,6 @@ dist_libGEOMAlgo_la_SOURCES = \ # header files salomeinclude_HEADERS = \ - BlockFix.hxx \ - BlockFix.ixx \ - BlockFix.jxx \ - BlockFix_BlockFixAPI.hxx \ - BlockFix_BlockFixAPI.ixx \ - BlockFix_BlockFixAPI.jxx \ - BlockFix_BlockFixAPI.lxx \ - BlockFix_CheckTool.hxx \ - BlockFix_CheckTool.ixx \ - BlockFix_CheckTool.jxx \ - BlockFix_PeriodicSurfaceModifier.hxx \ - BlockFix_PeriodicSurfaceModifier.ixx \ - BlockFix_PeriodicSurfaceModifier.jxx \ - BlockFix_SphereSpaceModifier.hxx \ - BlockFix_SphereSpaceModifier.ixx \ - BlockFix_SphereSpaceModifier.jxx \ - BlockFix_UnionEdges.hxx \ - BlockFix_UnionEdges.ixx \ - BlockFix_UnionEdges.jxx \ - BlockFix_UnionFaces.hxx \ - BlockFix_UnionFaces.ixx \ - BlockFix_UnionFaces.jxx \ - Handle_BlockFix_BlockFixAPI.hxx \ - Handle_BlockFix_SphereSpaceModifier.hxx \ - Handle_BlockFix_PeriodicSurfaceModifier.hxx \ GEOMAlgo_Algo.hxx \ GEOMAlgo_BuilderArea.hxx \ GEOMAlgo_BuilderFace.hxx \ @@ -211,15 +178,7 @@ libGEOMAlgo_la_LDFLAGS = \ $(KERNEL_LDFLAGS) -lSALOMELocalTrace # extra distributed files -CDL_FILES = \ - BlockFix.cdl \ - BlockFix_BlockFixAPI.cdl \ - BlockFix_CheckTool.cdl \ - BlockFix_PeriodicSurfaceModifier.cdl \ - BlockFix_SphereSpaceModifier.cdl \ - BlockFix_UnionEdges.cdl \ - BlockFix_UnionFaces.cdl \ - GEOMAlgo.cdl +CDL_FILES = GEOMAlgo.cdl EXTRA_DIST += \ $(CDL_FILES) \ diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index ed57921e0..4b0d81c5c 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -4871,6 +4871,22 @@ be specified in meters). GEOM_IS_REORDER Reorder vertices taking into account distances + + GEOM_INTERPOL_TANGENTS + Tangents + + + GEOM_INTERPOL_FIRST_VEC + First tangent vector + + + GEOM_INTERPOL_LAST_VEC + Last tangent vector + + + GEOM_BOTH_TANGENTS_REQUIRED + Both tangent vectors must be defined + GEOM_CURVE_CRMODE Creation Mode diff --git a/src/GEOMImpl/GEOMImpl_CircleDriver.cxx b/src/GEOMImpl/GEOMImpl_CircleDriver.cxx index b26507e88..e0c33a478 100644 --- a/src/GEOMImpl/GEOMImpl_CircleDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_CircleDriver.cxx @@ -18,17 +18,19 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include #include + #include #include + #include +#include + #include #include + #include #include #include @@ -48,29 +50,29 @@ //======================================================================= //function : GetID //purpose : -//======================================================================= +//======================================================================= const Standard_GUID& GEOMImpl_CircleDriver::GetID() { static Standard_GUID aCircleDriver("FF1BBB32-5D14-4df2-980B-3A668264EA16"); - return aCircleDriver; + return aCircleDriver; } //======================================================================= //function : GEOMImpl_CircleDriver -//purpose : +//purpose : //======================================================================= -GEOMImpl_CircleDriver::GEOMImpl_CircleDriver() +GEOMImpl_CircleDriver::GEOMImpl_CircleDriver() { } //======================================================================= //function : Execute //purpose : -//======================================================================= +//======================================================================= Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const { - if (Label().IsNull()) return 0; + if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); GEOMImpl_ICircle aCI (aFunction); @@ -95,20 +97,7 @@ Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const Handle(GEOM_Function) aRefVector = aCI.GetVector(); if (!aRefVector.IsNull()) { TopoDS_Shape aShapeVec = aRefVector->GetValue(); - if (aShapeVec.ShapeType() != TopAbs_EDGE) { - Standard_ConstructionError::Raise - ("Circle creation aborted: invalid vector argument, must be a vector or an edge"); - } - TopoDS_Edge anE = TopoDS::Edge(aShapeVec); - TopoDS_Vertex V1, V2; - TopExp::Vertices(anE, V1, V2, Standard_True); - if (!V1.IsNull() && !V2.IsNull()) { - aV = gp_Vec(BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2)); - if (aV.Magnitude() < gp::Resolution()) { - Standard_ConstructionError::Raise - ("Circle creation aborted: vector of zero length is given"); - } - } + aV = GEOMUtils::GetVector(aShapeVec); } // Axes gp_Ax2 anAxes (aP, aV); @@ -163,7 +152,7 @@ Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const //Make Circle gp_Ax2 anAxes (aP1, aDir); gp_Circ aCirc (anAxes, aRadius); - aShape = BRepBuilderAPI_MakeEdge(aCirc).Edge(); + aShape = BRepBuilderAPI_MakeEdge(aCirc).Edge(); } } else if (aType == CIRCLE_THREE_PNT) { @@ -187,7 +176,7 @@ Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const Standard_ConstructionError::Raise("Circle creation aborted: points lay on one line"); Handle(Geom_Circle) aCirc = GC_MakeCircle(aP1, aP2, aP3).Value(); aShape = BRepBuilderAPI_MakeEdge(aCirc).Edge(); - } + } } else { } @@ -196,26 +185,26 @@ Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const aFunction->SetValue(aShape); - log.SetTouched(Label()); + log.SetTouched(Label()); - return 1; + return 1; } //======================================================================= //function : GEOMImpl_CircleDriver_Type_ //purpose : -//======================================================================= +//======================================================================= Standard_EXPORT Handle_Standard_Type& GEOMImpl_CircleDriver_Type_() { static Handle_Standard_Type aType1 = STANDARD_TYPE(TFunction_Driver); if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TFunction_Driver); static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); + if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - + static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; static Handle_Standard_Type _aType = new Standard_Type("GEOMImpl_CircleDriver", @@ -230,7 +219,7 @@ Standard_EXPORT Handle_Standard_Type& GEOMImpl_CircleDriver_Type_() //======================================================================= //function : DownCast //purpose : -//======================================================================= +//======================================================================= const Handle(GEOMImpl_CircleDriver) Handle(GEOMImpl_CircleDriver)::DownCast(const Handle(Standard_Transient)& AnObject) { Handle(GEOMImpl_CircleDriver) _anOtherObject; diff --git a/src/GEOMImpl/GEOMImpl_FaceDriver.cxx b/src/GEOMImpl/GEOMImpl_FaceDriver.cxx index 4aafb7114..708f8f450 100755 --- a/src/GEOMImpl/GEOMImpl_FaceDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_FaceDriver.cxx @@ -15,16 +15,15 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include #include + #include #include + #include -#include +#include #include #include @@ -89,7 +88,7 @@ Standard_Integer GEOMImpl_FaceDriver::Execute(TFunction_Logbook& log) const } else if (aRefShape.ShapeType() == TopAbs_FACE) { double aH = aFI.GetH() / 2.0; double aW = aFI.GetW() / 2.0; - gp_Ax3 anAx = GEOMImpl_IMeasureOperations::GetPosition(aRefShape); + gp_Ax3 anAx = GEOMUtils::GetPosition(aRefShape); gp_Pln aPln (anAx); aShape = BRepBuilderAPI_MakeFace(aPln, -aH, +aH, -aW, +aW).Shape(); } diff --git a/src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx b/src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx index f781f228e..38a0ba318 100644 --- a/src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx @@ -23,10 +23,12 @@ #include #include #include -#include #include + #include +#include + #include #include #include @@ -352,7 +354,7 @@ bool GEOMImpl_Fillet1dDriver::MakeFillet(const TopoDS_Wire& aWire, aListOfNewEdge.Append(anEdgeToEdgeMap.Find(anEdge)); } - GEOMImpl_IShapesOperations::SortShapes(aListOfNewEdge); + GEOMUtils::SortShapes(aListOfNewEdge); BRepBuilderAPI_MakeWire aWireTool; aWireTool.Add(aListOfNewEdge); diff --git a/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx b/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx index efb69f42c..65b2ea018 100644 --- a/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx @@ -34,7 +34,8 @@ #include #include #include -#include + +#include #include #include @@ -3492,13 +3493,13 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IBlocksOperations::Propagate } // while (listPrevEdges.Extent() > 0) // Sort shapes in current chain (Mantis issue 21053) - GEOMImpl_IShapesOperations::SortShapes(currentChain, Standard_False); + GEOMUtils::SortShapes(currentChain, Standard_False); aFirstInChains.Append(currentChain.First()); aMapChains.Bind(currentChain.First(), currentChain); } // Sort chains (Mantis issue 21053) - GEOMImpl_IShapesOperations::SortShapes(aFirstInChains, Standard_False); + GEOMUtils::SortShapes(aFirstInChains, Standard_False); // Store sorted chains in the document TopTools_ListIteratorOfListOfShape aChainsIt (aFirstInChains); diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx index 22237b786..60983a177 100644 --- a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx @@ -736,19 +736,19 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineBezier GEOMImpl_ISpline aCI (aFunction); - int aLen = thePoints.size(); - aCI.SetLength(aLen); aCI.SetConstructorType(POINT_CONSTRUCTOR); - int ind = 1; + Handle(TColStd_HSequenceOfTransient) aPoints = new TColStd_HSequenceOfTransient; std::list::iterator it = thePoints.begin(); - for (; it != thePoints.end(); it++, ind++) { + for (; it != thePoints.end(); it++) { Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction(); - - if (aRefPnt.IsNull()) return NULL; - - aCI.SetPoint(ind, aRefPnt); + if (aRefPnt.IsNull()) { + SetErrorCode("NULL point for Besier curve"); + return NULL; + } + aPoints->Append(aRefPnt); } + aCI.SetPoints(aPoints); aCI.SetIsClosed(theIsClosed); @@ -798,7 +798,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation //Add a new Spline object Handle(GEOM_Object) aSpline = GetEngine()->AddObject(GetDocID(), GEOM_SPLINE); - //Add a new Spline function for creation a bezier curve relatively to points set + //Add a new Spline function for interpolation type Handle(GEOM_Function) aFunction = aSpline->AddFunction(GEOMImpl_SplineDriver::GetID(), SPLINE_INTERPOLATION); if (aFunction.IsNull()) return NULL; @@ -808,19 +808,18 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation GEOMImpl_ISpline aCI (aFunction); - int aLen = thePoints.size(); aCI.SetConstructorType(POINT_CONSTRUCTOR); - aCI.SetLength(aLen); - int ind = 1; + Handle(TColStd_HSequenceOfTransient) aPoints = new TColStd_HSequenceOfTransient; std::list::iterator it = thePoints.begin(); - for (; it != thePoints.end(); it++, ind++) { + for (; it != thePoints.end(); it++) { Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction(); - - if (aRefPnt.IsNull()) return NULL; - - aCI.SetPoint(ind, aRefPnt); + if (aRefPnt.IsNull()) { + return NULL; + } + aPoints->Append(aRefPnt); } + aCI.SetPoints(aPoints); aCI.SetIsClosed(theIsClosed); aCI.SetDoReordering(theDoReordering); @@ -856,6 +855,85 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation return aSpline; } + +//============================================================================= +/*! + * MakeSplineInterpolWithTangents + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolWithTangents + (std::list thePoints, + Handle(GEOM_Object) theFirstVec, + Handle(GEOM_Object) theLastVec) +{ + SetErrorCode(KO); + + //Add a new Spline object + Handle(GEOM_Object) aSpline = GetEngine()->AddObject(GetDocID(), GEOM_SPLINE); + + //Add a new Spline function for interpolation type + Handle(GEOM_Function) aFunction = + aSpline->AddFunction(GEOMImpl_SplineDriver::GetID(), SPLINE_INTERPOL_TANGENTS); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_SplineDriver::GetID()) return NULL; + + GEOMImpl_ISpline aCI (aFunction); + + aCI.SetConstructorType(POINT_CONSTRUCTOR); + + Handle(TColStd_HSequenceOfTransient) aPoints = new TColStd_HSequenceOfTransient; + std::list::iterator it = thePoints.begin(); + for (; it != thePoints.end(); it++) { + Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction(); + if (aRefPnt.IsNull()) { + SetErrorCode("NULL point for Interpolation"); + return NULL; + } + aPoints->Append(aRefPnt); + } + aCI.SetPoints(aPoints); + + Handle(GEOM_Function) aVec1 = theFirstVec->GetLastFunction(); + Handle(GEOM_Function) aVec2 = theLastVec->GetLastFunction(); + + if (aVec1.IsNull() || aVec2.IsNull()) return NULL; + + aCI.SetFirstVector(aVec1); + aCI.SetLastVector(aVec2); + + //Compute the Spline value + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Spline driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump pd (aFunction); + pd << aSpline << " = geompy.MakeInterpolWithTangents(["; + + it = thePoints.begin(); + pd << (*it++); + while (it != thePoints.end()) { + pd << ", " << (*it++); + } + pd << "], " << theFirstVec << ", " << theLastVec << ")"; + + SetErrorCode(OK); + return aSpline; +} + //============================================================================= /*! * MakeCurveParametric @@ -864,7 +942,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric (const char* thexExpr, const char* theyExpr, const char* thezExpr, double theParamMin, double theParamMax, double theParamStep, - CurveType theCurveType, + CurveType theCurveType, int theParamNbStep, bool theNewMethod) { TCollection_AsciiString aPyScript; @@ -958,7 +1036,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric coords = PyObject_CallFunction(func,(char*)"(d, d, i)", theParamMin, theParamMax, theParamNbStep ); else coords = PyObject_CallFunction(func,(char*)"(d, d, d)", theParamMin, theParamMax, theParamStep ); - + PyObject* new_stderr = NULL; if (coords == NULL){ @@ -1038,7 +1116,6 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric GEOMImpl_ISpline aCI (aFunction); - aCI.SetLength(lsize); aCI.SetConstructorType(COORD_CONSTRUCTOR); aCI.SetIsClosed(false); aCI.SetCoordinates(aCoordsArray); @@ -1058,7 +1135,6 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric GEOMImpl_ISpline aCI (aFunction); aCI.SetConstructorType(COORD_CONSTRUCTOR); - aCI.SetLength(lsize); aCI.SetIsClosed(false); aCI.SetDoReordering(false); aCI.SetCoordinates(aCoordsArray); diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx index 829f9cc5d..f3e93170d 100644 --- a/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx @@ -32,11 +32,11 @@ class GEOM_Engine; class Handle(GEOM_Object); class GEOMImpl_ICurvesOperations : public GEOM_IOperations { - + public: enum CurveType { Polyline, Bezier, Interpolation }; - + Standard_EXPORT GEOMImpl_ICurvesOperations(GEOM_Engine* theEngine, int theDocID); Standard_EXPORT ~GEOMImpl_ICurvesOperations(); @@ -57,7 +57,7 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations { Standard_EXPORT Handle(GEOM_Object) MakeArc (Handle(GEOM_Object) thePnt1, Handle(GEOM_Object) thePnt2, Handle(GEOM_Object) thePnt3); - + Standard_EXPORT Handle(GEOM_Object) MakeArcCenter (Handle(GEOM_Object) thePnt1, Handle(GEOM_Object) thePnt2, Handle(GEOM_Object) thePnt3, @@ -77,9 +77,14 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations { bool theIsClosed = false, bool theDoReordering = false); + Standard_EXPORT Handle(GEOM_Object) MakeSplineInterpolWithTangents + (std::list thePoints, + Handle(GEOM_Object) theFirstVec, + Handle(GEOM_Object) theLastVec); + Standard_EXPORT Handle(GEOM_Object) MakeCurveParametric - (const char* thexExpr, const char* theyExpr, const char* thezExpr, - double theParamMin, double theParamMax, double theParamStep, + (const char* thexExpr, const char* theyExpr, const char* thezExpr, + double theParamMin, double theParamMax, double theParamStep, CurveType theCurveType, int theParamNbStep=0, bool theNewMethod=false); Standard_EXPORT Handle(GEOM_Object) MakeSketcher (const char* theCommand, diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx index df3a87a49..0d08e6dcd 100644 --- a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx @@ -28,6 +28,8 @@ #include #include +#include + #include #include @@ -765,69 +767,6 @@ GEOMImpl_IMeasureOperations::ShapeKind GEOMImpl_IMeasureOperations::KindOfShape return aKind; } -//============================================================================= -/*! Get LCS, corresponding to the given shape. - * Origin of the LCS is situated at the shape's center of mass. - * Axes of the LCS are obtained from shape's location or, - * if the shape is a planar face, from position of its plane. - */ -//============================================================================= -gp_Ax3 GEOMImpl_IMeasureOperations::GetPosition (const TopoDS_Shape& theShape) -{ - gp_Ax3 aResult; - - if (theShape.IsNull()) - return aResult; - - // Axes - aResult.Transform(theShape.Location().Transformation()); - if (theShape.ShapeType() == TopAbs_FACE) { - Handle(Geom_Surface) aGS = BRep_Tool::Surface(TopoDS::Face(theShape)); - if (!aGS.IsNull() && aGS->IsKind(STANDARD_TYPE(Geom_Plane))) { - Handle(Geom_Plane) aGPlane = Handle(Geom_Plane)::DownCast(aGS); - gp_Pln aPln = aGPlane->Pln(); - aResult = aPln.Position(); - // In case of reverse orinetation of the face invert the plane normal - // (the face's normal does not mathc the plane's normal in this case) - if(theShape.Orientation() == TopAbs_REVERSED) - { - gp_Dir Vx = aResult.XDirection(); - gp_Dir N = aResult.Direction().Mirrored(Vx); - gp_Pnt P = aResult.Location(); - aResult = gp_Ax3(P, N, Vx); - } - } - } - - // Origin - gp_Pnt aPnt; - - TopAbs_ShapeEnum aShType = theShape.ShapeType(); - - if (aShType == TopAbs_VERTEX) { - aPnt = BRep_Tool::Pnt(TopoDS::Vertex(theShape)); - } - else { - if (aShType == TopAbs_COMPOUND) { - aShType = GEOMImpl_IShapesOperations::GetTypeOfSimplePart(theShape); - } - - GProp_GProps aSystem; - if (aShType == TopAbs_EDGE || aShType == TopAbs_WIRE) - BRepGProp::LinearProperties(theShape, aSystem); - else if (aShType == TopAbs_FACE || aShType == TopAbs_SHELL) - BRepGProp::SurfaceProperties(theShape, aSystem); - else - BRepGProp::VolumeProperties(theShape, aSystem); - - aPnt = aSystem.CentreOfMass(); - } - - aResult.SetLocation(aPnt); - - return aResult; -} - //============================================================================= /*! * GetPosition @@ -861,7 +800,7 @@ void GEOMImpl_IMeasureOperations::GetPosition OCC_CATCH_SIGNALS; #endif - gp_Ax3 anAx3 = GetPosition(aShape); + gp_Ax3 anAx3 = GEOMUtils::GetPosition(aShape); gp_Pnt anOri = anAx3.Location(); gp_Dir aDirZ = anAx3.Direction(); diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx index d84b8743c..fbcdcfa9e 100644 --- a/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx @@ -18,7 +18,6 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #ifndef _GEOMImpl_IMeasureOperations_HXX_ #define _GEOMImpl_IMeasureOperations_HXX_ @@ -168,9 +167,6 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations { Standard_EXPORT Standard_Real MinSurfaceCurvatureByPoint (Handle(GEOM_Object) theSurf, Handle(GEOM_Object) thePoint); - public: - Standard_EXPORT static gp_Ax3 GetPosition (const TopoDS_Shape& theShape); - private: void StructuralDump (const BRepCheck_Analyzer& theAna, const TopoDS_Shape& theShape, diff --git a/src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx b/src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx index dbdb52601..393e65a47 100644 --- a/src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx +++ b/src/GEOMImpl/GEOMImpl_IPipeDiffSect.hxx @@ -18,15 +18,16 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// //NOTE: This is an intreface to a function for the Pipe creation. -// + #ifndef _GEOMImpl_IPIPEDIFFSECT_HXX_ #define _GEOMImpl_IPIPEDIFFSECT_HXX_ #include "GEOM_Function.hxx" +#include + #ifndef _GEOMImpl_IPIPE_HXX_ #include "GEOMImpl_IPipe.hxx" #endif diff --git a/src/GEOMImpl/GEOMImpl_IPipePath.hxx b/src/GEOMImpl/GEOMImpl_IPipePath.hxx index 028ab2f53..7b2ccd40a 100644 --- a/src/GEOMImpl/GEOMImpl_IPipePath.hxx +++ b/src/GEOMImpl/GEOMImpl_IPipePath.hxx @@ -23,6 +23,8 @@ #include "GEOM_Function.hxx" +#include + class GEOMImpl_IPipePath { public: diff --git a/src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx b/src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx index 0b3f35fd4..3061153f0 100644 --- a/src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx +++ b/src/GEOMImpl/GEOMImpl_IPipeShellSect.hxx @@ -15,10 +15,9 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// //NOTE: This is an intreface to a function for the Pipe creation. -// + #ifndef _GEOMImpl_IPIPESHELLSECT_HXX_ #define _GEOMImpl_IPIPESHELLSECT_HXX_ @@ -28,6 +27,8 @@ #include "GEOMImpl_IPipeDiffSect.hxx" #endif +#include + #define PIPEDS_LIST_SUBBASES 6 diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index 682311302..eb8ec50fc 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -48,6 +48,8 @@ #include "GEOM_ISubShape.hxx" #include "GEOM_PythonDump.hxx" +#include "GEOMUtils.hxx" + #include "GEOMAlgo_ClsfBox.hxx" #include "GEOMAlgo_ClsfSolid.hxx" #include "GEOMAlgo_CoupleOfShapes.hxx" @@ -141,8 +143,6 @@ #include #include -#define STD_SORT_ALGO 1 - //============================================================================= /*! * constructor: @@ -1023,7 +1023,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetGlueShapes } // for stable order of returned entities - GEOMImpl_IShapesOperations::SortShapes(listOnePerSet, Standard_False); + GEOMUtils::SortShapes(listOnePerSet, Standard_False); TopTools_ListIteratorOfListOfShape aListIt (listOnePerSet); for (; aListIt.More(); aListIt.Next()) { @@ -1267,7 +1267,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::MakeExplode bool isOldSorting = false; if (theExplodeType == EXPLODE_OLD_INCLUDE_MAIN) isOldSorting = true; - SortShapes(listShape, isOldSorting); + GEOMUtils::SortShapes(listShape, isOldSorting); } TopTools_IndexedMapOfShape anIndices; @@ -1391,7 +1391,7 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::SubShapeAllIDs bool isOldSorting = false; if (theExplodeType == EXPLODE_OLD_INCLUDE_MAIN) isOldSorting = true; - SortShapes(listShape, isOldSorting); + GEOMUtils::SortShapes(listShape, isOldSorting); } TopTools_IndexedMapOfShape anIndices; @@ -2217,7 +2217,7 @@ Handle(TColStd_HSequenceOfInteger) TopoDS_Shape aShape = theShape->GetValue(); // Check presence of triangulation, build if need - if (!CheckTriangulation(aShape)) { + if (!GEOMUtils::CheckTriangulation(aShape)) { SetErrorCode("Cannot build triangulation on the shape"); return aSeqOfIDs; } @@ -2384,7 +2384,7 @@ Handle(TColStd_HSequenceOfInteger) TopTools_ListOfShape res; // Check presence of triangulation, build if need - if (!CheckTriangulation(aShape)) { + if (!GEOMUtils::CheckTriangulation(aShape)) { SetErrorCode("Cannot build triangulation on the shape"); return aSeqOfIDs; } @@ -2604,7 +2604,7 @@ Handle(TColStd_HSequenceOfInteger) Handle(TColStd_HSequenceOfInteger) aSeqOfIDs; // Check presence of triangulation, build if need - if (!CheckTriangulation(theShape)) { + if (!GEOMUtils::CheckTriangulation(theShape)) { SetErrorCode("Cannot build triangulation on the shape"); return aSeqOfIDs; } @@ -3385,7 +3385,7 @@ Handle(TColStd_HSequenceOfInteger) Handle(TColStd_HSequenceOfInteger) aSeqOfIDs; // Check presence of triangulation, build if need - if (!CheckTriangulation(aShape)) { + if (!GEOMUtils::CheckTriangulation(aShape)) { SetErrorCode("Cannot build triangulation on the shape"); return aSeqOfIDs; } @@ -3776,28 +3776,6 @@ namespace { } } -//================================================================================ -/*! - * \brief Return type of shape for explode. In case of compound it will be a type of sub-shape. - */ -//================================================================================ -TopAbs_ShapeEnum GEOMImpl_IShapesOperations::GetTypeOfSimplePart (const TopoDS_Shape& theShape) -{ - TopAbs_ShapeEnum aType = theShape.ShapeType(); - if (aType == TopAbs_VERTEX) return TopAbs_VERTEX; - else if (aType == TopAbs_EDGE || aType == TopAbs_WIRE) return TopAbs_EDGE; - else if (aType == TopAbs_FACE || aType == TopAbs_SHELL) return TopAbs_FACE; - else if (aType == TopAbs_SOLID || aType == TopAbs_COMPSOLID) return TopAbs_SOLID; - else if (aType == TopAbs_COMPOUND) { - // Only the iType of the first shape in the compound is taken into account - TopoDS_Iterator It (theShape, Standard_False, Standard_False); - if (It.More()) { - return GetTypeOfSimplePart(It.Value()); - } - } - return TopAbs_SHAPE; -} - //============================================================================= /*! * case GetInPlace: @@ -3839,7 +3817,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlace (Handle(GEOM_Object) GProp_GProps aProps; // Find the iType of the aWhat shape - iType = GetTypeOfSimplePart(aWhat); + iType = GEOMUtils::GetTypeOfSimplePart(aWhat); if (iType == TopAbs_SHAPE) { SetErrorCode("Error: An attempt to extract a shape of not supported type."); return NULL; @@ -4041,7 +4019,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlaceOld (Handle(GEOM_Objec return NULL; } */ - iType = GetTypeOfSimplePart(aWhat); + iType = GEOMUtils::GetTypeOfSimplePart(aWhat); if (iType == TopAbs_SHAPE) { SetErrorCode("Error: An attempt to extract a shape of not supported type."); return NULL; @@ -4266,321 +4244,6 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlaceByHistory return aResult; } -//======================================================================= -//function : ShapeToDouble -//purpose : used by CompareShapes::operator() -//======================================================================= -std::pair ShapeToDouble (const TopoDS_Shape& S, bool isOldSorting) -{ - // Computing of CentreOfMass - gp_Pnt GPoint; - double Len; - - if (S.ShapeType() == TopAbs_VERTEX) { - GPoint = BRep_Tool::Pnt(TopoDS::Vertex(S)); - Len = (double)S.Orientation(); - } - else { - GProp_GProps GPr; - // BEGIN: fix for Mantis issue 0020842 - if (isOldSorting) { - BRepGProp::LinearProperties(S, GPr); - } - else { - if (S.ShapeType() == TopAbs_EDGE || S.ShapeType() == TopAbs_WIRE) { - BRepGProp::LinearProperties(S, GPr); - } - else if (S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SHELL) { - BRepGProp::SurfaceProperties(S, GPr); - } - else { - BRepGProp::VolumeProperties(S, GPr); - } - } - // END: fix for Mantis issue 0020842 - GPoint = GPr.CentreOfMass(); - Len = GPr.Mass(); - } - - double dMidXYZ = GPoint.X() * 999.0 + GPoint.Y() * 99.0 + GPoint.Z() * 0.9; - return std::make_pair(dMidXYZ, Len); -} - -//======================================================================= -//function : CompareShapes::operator() -//purpose : used by std::sort(), called from SortShapes() -//======================================================================= -bool GEOMImpl_IShapesOperations::CompareShapes::operator()(const TopoDS_Shape& theShape1, - const TopoDS_Shape& theShape2) -{ - if (!myMap.IsBound(theShape1)) { - myMap.Bind(theShape1, ShapeToDouble(theShape1, myIsOldSorting)); - } - - if (!myMap.IsBound(theShape2)) { - myMap.Bind(theShape2, ShapeToDouble(theShape2, myIsOldSorting)); - } - - std::pair val1 = myMap.Find(theShape1); - std::pair val2 = myMap.Find(theShape2); - - double tol = Precision::Confusion(); - bool exchange = Standard_False; - - double dMidXYZ = val1.first - val2.first; - if (dMidXYZ >= tol) { - exchange = Standard_True; - } - else if (Abs(dMidXYZ) < tol) { - double dLength = val1.second - val2.second; - if (dLength >= tol) { - exchange = Standard_True; - } - else if (Abs(dLength) < tol && theShape1.ShapeType() <= TopAbs_FACE) { - // PAL17233 - // equal values possible on shapes such as two halves of a sphere and - // a membrane inside the sphere - Bnd_Box box1,box2; - BRepBndLib::Add(theShape1, box1); - if (!box1.IsVoid()) { - BRepBndLib::Add(theShape2, box2); - Standard_Real dSquareExtent = box1.SquareExtent() - box2.SquareExtent(); - if (dSquareExtent >= tol) { - exchange = Standard_True; - } - else if (Abs(dSquareExtent) < tol) { - Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax, val1, val2; - box1.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax); - val1 = (aXmin+aXmax)*999.0 + (aYmin+aYmax)*99.0 + (aZmin+aZmax)*0.9; - box2.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax); - val2 = (aXmin+aXmax)*999.0 + (aYmin+aYmax)*99.0 + (aZmin+aZmax)*0.9; - if ((val1 - val2) >= tol) { - exchange = Standard_True; - } - } - } - } - } - - //return val1 < val2; - return !exchange; -} - -//======================================================================= -//function : SortShapes -//purpose : -//======================================================================= -void GEOMImpl_IShapesOperations::SortShapes(TopTools_ListOfShape& SL, - const Standard_Boolean isOldSorting) -{ -#ifdef STD_SORT_ALGO - std::vector aShapesVec; - aShapesVec.reserve(SL.Extent()); - - TopTools_ListIteratorOfListOfShape it (SL); - for (; it.More(); it.Next()) { - aShapesVec.push_back(it.Value()); - } - SL.Clear(); - - CompareShapes shComp (isOldSorting); - std::stable_sort(aShapesVec.begin(), aShapesVec.end(), shComp); - //std::sort(aShapesVec.begin(), aShapesVec.end(), shComp); - - std::vector::const_iterator anIter = aShapesVec.begin(); - for (; anIter != aShapesVec.end(); ++anIter) { - SL.Append(*anIter); - } -#else - // old implementation - Standard_Integer MaxShapes = SL.Extent(); - TopTools_Array1OfShape aShapes (1,MaxShapes); - TColStd_Array1OfInteger OrderInd(1,MaxShapes); - TColStd_Array1OfReal MidXYZ (1,MaxShapes); //X,Y,Z; - TColStd_Array1OfReal Length (1,MaxShapes); //X,Y,Z; - - // Computing of CentreOfMass - Standard_Integer Index; - GProp_GProps GPr; - gp_Pnt GPoint; - TopTools_ListIteratorOfListOfShape it(SL); - for (Index=1; it.More(); Index++) - { - TopoDS_Shape S = it.Value(); - SL.Remove( it ); // == it.Next() - aShapes(Index) = S; - OrderInd.SetValue (Index, Index); - if (S.ShapeType() == TopAbs_VERTEX) { - GPoint = BRep_Tool::Pnt( TopoDS::Vertex( S )); - Length.SetValue( Index, (Standard_Real) S.Orientation()); - } - else { - // BEGIN: fix for Mantis issue 0020842 - if (isOldSorting) { - BRepGProp::LinearProperties (S, GPr); - } - else { - if (S.ShapeType() == TopAbs_EDGE || S.ShapeType() == TopAbs_WIRE) { - BRepGProp::LinearProperties (S, GPr); - } - else if (S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SHELL) { - BRepGProp::SurfaceProperties(S, GPr); - } - else { - BRepGProp::VolumeProperties(S, GPr); - } - } - // END: fix for Mantis issue 0020842 - GPoint = GPr.CentreOfMass(); - Length.SetValue(Index, GPr.Mass()); - } - MidXYZ.SetValue(Index, GPoint.X()*999.0 + GPoint.Y()*99.0 + GPoint.Z()*0.9); - //cout << Index << " L: " << Length(Index) << "CG: " << MidXYZ(Index) << endl; - } - - // Sorting - Standard_Integer aTemp; - Standard_Boolean exchange, Sort = Standard_True; - Standard_Real tol = Precision::Confusion(); - while (Sort) - { - Sort = Standard_False; - for (Index=1; Index < MaxShapes; Index++) - { - exchange = Standard_False; - Standard_Real dMidXYZ = MidXYZ(OrderInd(Index)) - MidXYZ(OrderInd(Index+1)); - Standard_Real dLength = Length(OrderInd(Index)) - Length(OrderInd(Index+1)); - if ( dMidXYZ >= tol ) { -// cout << "MidXYZ: " << MidXYZ(OrderInd(Index))<< " > " <= tol ) { -// cout << "Length: " << Length(OrderInd(Index))<< " > " <= tol ) { -// cout << "SquareExtent: " << box1.SquareExtent()<<" > "< val2; - if ((val1 - val2) >= tol) { - exchange = Standard_True; - } - //cout << "box: " << val1<<" > "< - { - CompareShapes (bool isOldSorting) - : myIsOldSorting(isOldSorting) {} - - bool operator()(const TopoDS_Shape& lhs, const TopoDS_Shape& rhs); - - typedef NCollection_DataMap > NCollection_DataMapOfShapeDouble; - NCollection_DataMapOfShapeDouble myMap; - bool myIsOldSorting; - }; - - Standard_EXPORT static void SortShapes (TopTools_ListOfShape& SL, - const Standard_Boolean isOldSorting = Standard_True); - - /*! - * \brief Convert TopoDS_COMPSOLID to TopoDS_COMPOUND. - * - * If the argument shape is not of type TopoDS_COMPSOLID, this method returns it as is. - * - * \param theCompsolid The compsolid to be converted. - * \retval TopoDS_Shape Returns the resulting compound. - */ - Standard_EXPORT static TopoDS_Shape CompsolidToCompound (const TopoDS_Shape& theCompsolid); - - /*! - * \brief Build a triangulation on \a theShape if it is absent. - * \param theShape The shape to check/build triangulation on. - * \retval bool Returns false if the shape has no faces, i.e. impossible to build triangulation. - */ - Standard_EXPORT static bool CheckTriangulation (const TopoDS_Shape& theShape); - - /*! - * \brief Return type of shape for explode. In case of compound it will be a type of its first sub shape. - * \param theShape The shape to get type of. - * \retval TopAbs_ShapeEnum Return type of shape for explode. - */ - Standard_EXPORT static TopAbs_ShapeEnum GetTypeOfSimplePart (const TopoDS_Shape& theShape); - private: Handle(GEOM_Object) MakeShape (std::list theShapes, const Standard_Integer theObjectType, diff --git a/src/GEOMImpl/GEOMImpl_ISpline.hxx b/src/GEOMImpl/GEOMImpl_ISpline.hxx index b20a7e6dc..e7f8b076a 100644 --- a/src/GEOMImpl/GEOMImpl_ISpline.hxx +++ b/src/GEOMImpl/GEOMImpl_ISpline.hxx @@ -18,53 +18,84 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // NOTE: This is an interface to a function for the Spline creation. -#include "GEOM_Function.hxx" -#include +#include -#define SPL_ARG_LENG 1 -#define SPL_ARG_CLOS 2 -#define SPL_ARG_REOR 3 -#define SPL_ARG_LAST 2 - -#define SPL_CONSTRUCTOR 4 -#define SPL_ARG_ARRAY 5 +#include +#include class GEOMImpl_ISpline { public: + enum { + ARG_POINTS = 1, + ARG_CLOSED = 2, + ARG_REORDER = 3, + CONSTRUCTOR = 4, + ARG_ARRAY = 5, + ARG_VEC_1 = 6, + ARG_VEC_2 = 7 + }; + GEOMImpl_ISpline(Handle(GEOM_Function) theFunction): _func(theFunction) {} - void SetLength(int theLen) { _func->SetInteger(SPL_ARG_LENG, theLen); } + // Set - void SetIsClosed(bool theIsClosed) { _func->SetInteger(SPL_ARG_CLOS, (int)theIsClosed); } + void SetPoints (const Handle(TColStd_HSequenceOfTransient)& thePoints) + { _func->SetReferenceList(ARG_POINTS, thePoints); } - void SetDoReordering(bool theDoReordering) { _func->SetInteger(SPL_ARG_REOR, (int)theDoReordering); } + void SetIsClosed (bool theIsClosed) { _func->SetInteger(ARG_CLOSED, (int)theIsClosed); } + void SetDoReordering (bool theDoReordering) { _func->SetInteger(ARG_REORDER, (int)theDoReordering); } - void SetPoint(int theId, Handle(GEOM_Function) theP) { _func->SetReference(SPL_ARG_LAST + theId, theP); } + void SetConstructorType (int theConstructor) { _func->SetInteger(CONSTRUCTOR, theConstructor); } - int GetLength() { return _func->GetInteger(SPL_ARG_LENG); } + void SetCoordinates (const Handle(TColStd_HArray1OfReal)& theValue) + { _func->SetRealArray(ARG_ARRAY, theValue); } - bool GetIsClosed() { return (bool)_func->GetInteger(SPL_ARG_CLOS); } + void SetFirstVector (Handle(GEOM_Function) theVec) { _func->SetReference(ARG_VEC_1, theVec); } + void SetLastVector (Handle(GEOM_Function) theVec) { _func->SetReference(ARG_VEC_2, theVec); } - bool GetDoReordering() { return (bool)_func->GetInteger(SPL_ARG_REOR); } + // Get - Handle(GEOM_Function) GetPoint(int theId) { return _func->GetReference(SPL_ARG_LAST + theId); } + Handle(TColStd_HSequenceOfTransient) GetPoints() { return _func->GetReferenceList(ARG_POINTS); } + bool GetIsClosed() { return (bool)_func->GetInteger(ARG_CLOSED); } + bool GetDoReordering() { return (bool)_func->GetInteger(ARG_REORDER); } - void SetConstructorType(int theConstructor) {_func->SetInteger(SPL_CONSTRUCTOR,theConstructor); } + int GetConstructorType() { return _func->GetInteger(CONSTRUCTOR); } - int GetConstructorType() { return _func->GetInteger(SPL_CONSTRUCTOR); } + Handle(TColStd_HArray1OfReal) GetCoordinates() { return _func->GetRealArray(ARG_ARRAY); } + Handle(GEOM_Function) GetFirstVector () { return _func->GetReference(ARG_VEC_1); } + Handle(GEOM_Function) GetLastVector () { return _func->GetReference(ARG_VEC_2); } + + /* Old implementation (Salome 6.6.0 and earlier) +#define SPL_ARG_LENG 1 +#define SPL_ARG_CLOS 2 +#define SPL_ARG_REOR 3 +#define SPL_ARG_LAST 2 + +#define SPL_CONSTRUCTOR 4 +#define SPL_ARG_ARRAY 5 + + void SetLength(int theLen) { _func->SetInteger(SPL_ARG_LENG, theLen); } + void SetIsClosed(bool theIsClosed) { _func->SetInteger(SPL_ARG_CLOS, (int)theIsClosed); } + void SetDoReordering(bool theDoReordering) { _func->SetInteger(SPL_ARG_REOR, (int)theDoReordering); } + void SetConstructorType(int theConstructor) {_func->SetInteger(SPL_CONSTRUCTOR,theConstructor); } + void SetPoint(int theId, Handle(GEOM_Function) theP) { _func->SetReference(SPL_ARG_LAST + theId, theP); } void SetCoordinates(const Handle(TColStd_HArray1OfReal)& theValue) { _func->SetRealArray(SPL_ARG_ARRAY, theValue); } - + int GetLength() { return _func->GetInteger(SPL_ARG_LENG); } + bool GetIsClosed() { return (bool)_func->GetInteger(SPL_ARG_CLOS); } + bool GetDoReordering() { return (bool)_func->GetInteger(SPL_ARG_REOR); } + int GetConstructorType() { return _func->GetInteger(SPL_CONSTRUCTOR); } + Handle(GEOM_Function) GetPoint(int theId) { return _func->GetReference(SPL_ARG_LAST + theId); } Handle(TColStd_HArray1OfReal) GetCoordinates() { return _func->GetRealArray(SPL_ARG_ARRAY); } + */ private: diff --git a/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx b/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx index 25f22d214..604d65da1 100644 --- a/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx @@ -18,15 +18,16 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #include #include #include #include + #include -#include + +#include #include #include @@ -109,7 +110,7 @@ Standard_Integer GEOMImpl_MarkerDriver::Execute(TFunction_Logbook& log) const } else if (aType == MARKER_SHAPE) { Handle(GEOM_Function) aRefShape = aPI.GetShape(); TopoDS_Shape aSh = aRefShape->GetValue(); - gp_Ax3 anAx3 = GEOMImpl_IMeasureOperations::GetPosition(aSh); + gp_Ax3 anAx3 = GEOMUtils::GetPosition(aSh); gp_Pln aPln (anAx3); double aTrimSize = 100.0; diff --git a/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx b/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx index 5e014b4eb..7aa6fb5f8 100644 --- a/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx @@ -18,16 +18,17 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #include #include #include -#include #include + #include +#include + #include #include #include @@ -96,7 +97,7 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const Standard_NullObject::Raise("Shape for centre of mass calculation is null"); } - gp_Ax3 aPos = GEOMImpl_IMeasureOperations::GetPosition(aShapeBase); + gp_Ax3 aPos = GEOMUtils::GetPosition(aShapeBase); gp_Pnt aCenterMass = aPos.Location(); aShape = BRepBuilderAPI_MakeVertex(aCenterMass).Shape(); } @@ -189,7 +190,7 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const } else { - gp_Ax3 aPos = GEOMImpl_IMeasureOperations::GetPosition(aFace); + gp_Ax3 aPos = GEOMUtils::GetPosition(aFace); p1 = aPos.Location(); } diff --git a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx index 400c2a03c..530d38012 100644 --- a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx @@ -19,11 +19,8 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -#include - #include -#include #include #include #include @@ -31,8 +28,11 @@ #include #include #include + #include +#include + #include #include #include @@ -2491,7 +2491,7 @@ Standard_Integer GEOMImpl_PipeDriver::Execute (TFunction_Logbook& log) const //aShape = GEOMImpl_GlueDriver::GlueFaces(aShape, Precision::Confusion(), Standard_True); } - TopoDS_Shape aRes = GEOMImpl_IShapesOperations::CompsolidToCompound(aShape); + TopoDS_Shape aRes = GEOMUtils::CompsolidToCompound(aShape); aFunction->SetValue(aRes); log.SetTouched(Label()); diff --git a/src/GEOMImpl/GEOMImpl_PipeTShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_PipeTShapeDriver.cxx index 025042282..f28ff1f27 100644 --- a/src/GEOMImpl/GEOMImpl_PipeTShapeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PipeTShapeDriver.cxx @@ -15,20 +15,20 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include #include + #include #include - #include + #include +#include + +#include -#include -#include "GEOMAlgo_FinderShapeOn1.hxx" -#include "GEOMAlgo_FinderShapeOn2.hxx" +#include +#include #include #include @@ -106,7 +106,7 @@ GEOMImpl_PipeTShapeDriver::GetShapesOnBoxIDs(const TopoDS_Shape& aBox, Handle(TColStd_HSequenceOfInteger) aSeqOfIDs; // Check presence of triangulation, build if need - if (!GEOMImpl_IShapesOperations::CheckTriangulation(aShape)) { + if (!GEOMUtils::CheckTriangulation(aShape)) { StdFail_NotDone::Raise("Cannot build triangulation on the shape"); return aSeqOfIDs; } @@ -179,7 +179,7 @@ Handle(TColStd_HSequenceOfInteger) Handle(TColStd_HSequenceOfInteger) aSeqOfIDs; // Check presence of triangulation, build if need - if (!GEOMImpl_IShapesOperations::CheckTriangulation(theShape)) { + if (!GEOMUtils::CheckTriangulation(theShape)) { StdFail_NotDone::Raise("Cannot build triangulation on the shape"); return aSeqOfIDs; } diff --git a/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx b/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx index e1968567b..8fc83e24e 100644 --- a/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PlaneDriver.cxx @@ -18,7 +18,6 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #include @@ -27,7 +26,7 @@ #include #include -#include +#include #include @@ -142,7 +141,7 @@ Standard_Integer GEOMImpl_PlaneDriver::Execute(TFunction_Logbook& log) const // Standard_TypeMismatch::Raise("Plane creation aborted: non-planar face given as argument"); //} //aShape = BRepBuilderAPI_MakeFace(aGS, -aSize, +aSize, -aSize, +aSize).Shape(); - gp_Ax3 anAx3 = GEOMImpl_IMeasureOperations::GetPosition(aRefShape); + gp_Ax3 anAx3 = GEOMUtils::GetPosition(aRefShape); gp_Pln aPln (anAx3); aShape = BRepBuilderAPI_MakeFace(aPln, -aSize, +aSize, -aSize, +aSize).Shape(); } @@ -223,7 +222,7 @@ Standard_Integer GEOMImpl_PlaneDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aRefShape = aRef->GetValue(); if (aRefShape.ShapeType() != TopAbs_FACE) return 0; - anAx3 = GEOMImpl_IMeasureOperations::GetPosition(aRefShape); + anAx3 = GEOMUtils::GetPosition(aRefShape); } if ( anOrientation == 2) diff --git a/src/GEOMImpl/GEOMImpl_PositionDriver.cxx b/src/GEOMImpl/GEOMImpl_PositionDriver.cxx index be11e7dbb..73aed0fa2 100644 --- a/src/GEOMImpl/GEOMImpl_PositionDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PositionDriver.cxx @@ -18,16 +18,15 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -//#include -// #include + #include #include + #include -#include +#include // OCCT Includes #include @@ -117,10 +116,10 @@ Standard_Integer GEOMImpl_PositionDriver::Execute(TFunction_Logbook& log) const gp_Ax3 aStartAx3, aDestAx3; // End LCS - aDestAx3 = GEOMImpl_IMeasureOperations::GetPosition(aShapeEndLCS); + aDestAx3 = GEOMUtils::GetPosition(aShapeEndLCS); // Start LCS - aStartAx3 = GEOMImpl_IMeasureOperations::GetPosition(aShapeStartLCS); + aStartAx3 = GEOMUtils::GetPosition(aShapeStartLCS); // Set transformation aTrsf.SetDisplacement(aStartAx3, aDestAx3); @@ -145,7 +144,7 @@ Standard_Integer GEOMImpl_PositionDriver::Execute(TFunction_Logbook& log) const gp_Ax3 aStartAx3, aDestAx3; // End LCS - aDestAx3 = GEOMImpl_IMeasureOperations::GetPosition(aShapeEndLCS); + aDestAx3 = GEOMUtils::GetPosition(aShapeEndLCS); // Set transformation aTrsf.SetDisplacement(aStartAx3, aDestAx3); diff --git a/src/GEOMImpl/GEOMImpl_PrismDriver.cxx b/src/GEOMImpl/GEOMImpl_PrismDriver.cxx index 87b18275d..ae25ae0b8 100644 --- a/src/GEOMImpl/GEOMImpl_PrismDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PrismDriver.cxx @@ -18,17 +18,18 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #include #include -#include -#include #include #include #include + #include +#include + +#include #include #include @@ -249,7 +250,7 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const } else { - TopoDS_Shape aRes = GEOMImpl_IShapesOperations::CompsolidToCompound(aShape); + TopoDS_Shape aRes = GEOMUtils::CompsolidToCompound(aShape); aFunction->SetValue(aRes); } @@ -275,7 +276,7 @@ TopoDS_Shape GEOMImpl_PrismDriver::MakeScaledPrism (const TopoDS_Shape& theShape // 1. aCDG = geompy.MakeCDG(theBase) gp_Pnt aCDG = theCDG; if (!isCDG) { - gp_Ax3 aPos = GEOMImpl_IMeasureOperations::GetPosition(theShapeBase); + gp_Ax3 aPos = GEOMUtils::GetPosition(theShapeBase); aCDG = aPos.Location(); } TopoDS_Shape aShapeCDG_1 = BRepBuilderAPI_MakeVertex(aCDG).Shape(); diff --git a/src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx b/src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx index ea72dd7c3..44e68d973 100644 --- a/src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx @@ -18,17 +18,18 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #include #include -#include #include #include + #include +#include + #include #include #include @@ -128,7 +129,7 @@ Standard_Integer GEOMImpl_RevolutionDriver::Execute(TFunction_Logbook& log) cons if (aShape.IsNull()) return 0; - TopoDS_Shape aRes = GEOMImpl_IShapesOperations::CompsolidToCompound(aShape); + TopoDS_Shape aRes = GEOMUtils::CompsolidToCompound(aShape); aFunction->SetValue(aRes); log.SetTouched(Label()); diff --git a/src/GEOMImpl/GEOMImpl_SketcherDriver.cxx b/src/GEOMImpl/GEOMImpl_SketcherDriver.cxx index 70e627719..0ebe757d0 100644 --- a/src/GEOMImpl/GEOMImpl_SketcherDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_SketcherDriver.cxx @@ -18,7 +18,6 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #include @@ -27,7 +26,7 @@ #include #include -#include +#include #include @@ -117,7 +116,7 @@ Standard_Integer GEOMImpl_SketcherDriver::Execute(TFunction_Logbook& log) const // return 0; //Handle(Geom_Plane) aGPlane = Handle(Geom_Plane)::DownCast( aGS ); //aWPlane = aGPlane->Pln().Position(); - aWPlane = GEOMImpl_IMeasureOperations::GetPosition(aShape); + aWPlane = GEOMUtils::GetPosition(aShape); } gp_Trsf aTrans; aTrans.SetTransformation(aWPlane); diff --git a/src/GEOMImpl/GEOMImpl_SplineDriver.cxx b/src/GEOMImpl/GEOMImpl_SplineDriver.cxx index c87cdbc09..a94f0a279 100644 --- a/src/GEOMImpl/GEOMImpl_SplineDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_SplineDriver.cxx @@ -18,14 +18,14 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include #include + #include #include + #include +#include #include #include @@ -49,6 +49,10 @@ #include #include +#include + +#include + //======================================================================= //function : GetID //purpose : @@ -82,54 +86,73 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aShape; - if (aType == SPLINE_BEZIER || aType == SPLINE_INTERPOLATION) { + if (aType == SPLINE_BEZIER || + aType == SPLINE_INTERPOLATION || + aType == SPLINE_INTERPOL_TANGENTS) { bool useCoords = aCI.GetConstructorType() == COORD_CONSTRUCTOR; - TColgp_Array1OfPnt points(1, (useCoords ? aCI.GetLength() : 1) ); - if(useCoords) { - Handle(TColStd_HArray1OfReal) aCoordsArray = aCI.GetCoordinates(); + + Handle(TColStd_HArray1OfReal) aCoordsArray; // parametric case + Handle(TColStd_HSequenceOfTransient) aPoints; // points case + + int aLen = 0; + if (useCoords) { + aCoordsArray = aCI.GetCoordinates(); + aLen = aCoordsArray->Length() / 3; + } + else { + aPoints = aCI.GetPoints(); + aLen = aPoints->Length(); + } + + if (aLen < 2) return 0; + + TColgp_Array1OfPnt points (1, (useCoords ? aLen : 1)); + if (useCoords) { int anArrayLength = aCoordsArray->Length(); for (int i = 0, j = 1; i <= (anArrayLength-3); i += 3) { gp_Pnt aPnt = gp_Pnt(aCoordsArray->Value(i+1), aCoordsArray->Value(i+2), aCoordsArray->Value(i+3)); - points.SetValue(j,aPnt); + points.SetValue(j, aPnt); j++; - } + } } - - int ind, aLen = aCI.GetLength(); - if (aLen < 2) return 0; - Standard_Boolean isSeveral = Standard_False; - gp_Pnt aPrevP; int aRealLen = aLen; + if (aType == SPLINE_BEZIER && aCI.GetIsClosed()) { TopoDS_Vertex aV1; - if(useCoords) { + if (useCoords) { aV1 = BRepBuilderAPI_MakeVertex(points.Value(1)); - } else { - Handle(GEOM_Function) aFPoint = aCI.GetPoint(1); + } + else { + Handle(GEOM_Function) aFPoint = Handle(GEOM_Function)::DownCast(aPoints->Value(1)); TopoDS_Shape aFirstPnt = aFPoint->GetValue(); aV1 = TopoDS::Vertex(aFirstPnt); } TopoDS_Vertex aV2; - if(useCoords) { + if (useCoords) { aV2 = BRepBuilderAPI_MakeVertex(points.Value(aLen)); - } else { - Handle(GEOM_Function) aLPoint = aCI.GetPoint(aLen); + } + else { + Handle(GEOM_Function) aLPoint = Handle(GEOM_Function)::DownCast(aPoints->Value(aLen)); TopoDS_Shape aLastPnt = aLPoint->GetValue(); aV2 = TopoDS::Vertex(aLastPnt); } - + if (!aV1.IsNull() && !aV2.IsNull() && !aV1.IsSame(aV2)) { aRealLen++; } } - + + int ind; + Standard_Boolean isSeveral = Standard_False; + gp_Pnt aPrevP; + TColgp_Array1OfPnt CurvePoints (1, aRealLen); for (ind = 1; ind <= aLen; ind++) { gp_Pnt aP; - if( useCoords ) { + if (useCoords) { aP = points.Value(ind); if (!isSeveral && ind > 1) { if (aP.Distance(aPrevP) > Precision::Confusion()) { @@ -138,8 +161,9 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const } CurvePoints.SetValue(ind, aP); aPrevP = aP; - } else { - Handle(GEOM_Function) aRefPoint = aCI.GetPoint(ind); + } + else { + Handle(GEOM_Function) aRefPoint = Handle(GEOM_Function)::DownCast(aPoints->Value(ind)); TopoDS_Shape aShapePnt = aRefPoint->GetValue(); if (aShapePnt.ShapeType() == TopAbs_VERTEX) { aP = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt)); @@ -153,6 +177,7 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const } } } + if (aType == SPLINE_BEZIER) { if (!isSeveral) { Standard_ConstructionError::Raise("Points for Bezier Curve are too close"); @@ -160,13 +185,12 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const if (aRealLen > aLen) { // set last point equal to first for the closed curve CurvePoints.SetValue(aRealLen, CurvePoints.Value(1)); } - Handle(Geom_BezierCurve) GBC = new Geom_BezierCurve(CurvePoints); + Handle(Geom_BezierCurve) GBC = new Geom_BezierCurve (CurvePoints); aShape = BRepBuilderAPI_MakeEdge(GBC).Edge(); - } else { + } + else { //GeomAPI_PointsToBSpline GBC (CurvePoints); //aShape = BRepBuilderAPI_MakeEdge(GBC).Edge(); - - Handle(TColgp_HArray1OfPnt) aHCurvePoints = new TColgp_HArray1OfPnt(1, aLen); if (aCI.GetDoReordering()) { for (int curInd = 1; curInd < aLen - 1; curInd++) { @@ -194,18 +218,35 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const CurvePoints.SetValue(curInd + 1, nearPnt); } } - for (ind = 1; ind <= aLen; ind++) { - aHCurvePoints->SetValue(ind, CurvePoints.Value(ind)); - } } - else { - for (ind = 1; ind <= aLen; ind++) { - aHCurvePoints->SetValue(ind, CurvePoints.Value(ind)); - } + + Handle(TColgp_HArray1OfPnt) aHCurvePoints = new TColgp_HArray1OfPnt (1, aLen); + for (ind = 1; ind <= aLen; ind++) { + aHCurvePoints->SetValue(ind, CurvePoints.Value(ind)); } - - bool isClosed = aCI.GetIsClosed(); + + bool isClosed = Standard_False; + if (aType == SPLINE_INTERPOLATION) + isClosed = aCI.GetIsClosed(); + GeomAPI_Interpolate GBC (aHCurvePoints, isClosed, gp::Resolution()); + + if (aType == SPLINE_INTERPOL_TANGENTS) { + Handle(GEOM_Function) aVec1Ref = aCI.GetFirstVector(); + Handle(GEOM_Function) aVec2Ref = aCI.GetLastVector(); + + if (aVec1Ref.IsNull() || aVec2Ref.IsNull()) + Standard_NullObject::Raise("Null object is given for a vector"); + + TopoDS_Shape aVec1Sh = aVec1Ref->GetValue(); + TopoDS_Shape aVec2Sh = aVec2Ref->GetValue(); + + gp_Vec aV1 = GEOMUtils::GetVector(aVec1Sh); + gp_Vec aV2 = GEOMUtils::GetVector(aVec2Sh); + + GBC.Load(aV1, aV2, /*Scale*/Standard_True); + } + GBC.Perform(); if (GBC.IsDone()) aShape = BRepBuilderAPI_MakeEdge(GBC.Curve()).Edge(); @@ -215,13 +256,13 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const } else { } - + if (aShape.IsNull()) return 0; - + aFunction->SetValue(aShape); - + log.SetTouched(Label()); - + return 1; } diff --git a/src/GEOMImpl/GEOMImpl_Types.hxx b/src/GEOMImpl/GEOMImpl_Types.hxx index 4aeed6398..659158e28 100755 --- a/src/GEOMImpl/GEOMImpl_Types.hxx +++ b/src/GEOMImpl/GEOMImpl_Types.hxx @@ -234,8 +234,9 @@ #define POLYLINE_POINTS 1 -#define SPLINE_BEZIER 1 -#define SPLINE_INTERPOLATION 2 +#define SPLINE_BEZIER 1 +#define SPLINE_INTERPOLATION 2 +#define SPLINE_INTERPOL_TANGENTS 3 #define CIRCLE_THREE_PNT 1 #define CIRCLE_PNT_VEC_R 2 diff --git a/src/GEOMImpl/Makefile.am b/src/GEOMImpl/Makefile.am index 8ce12ca2e..f456551ce 100644 --- a/src/GEOMImpl/Makefile.am +++ b/src/GEOMImpl/Makefile.am @@ -238,14 +238,18 @@ libGEOMimpl_la_CPPFLAGS = \ -I$(srcdir)/../NMTDS \ -I$(srcdir)/../NMTTools \ -I$(srcdir)/../GEOM \ + -I$(srcdir)/../BlockFix \ -I$(srcdir)/../GEOMAlgo \ + -I$(srcdir)/../GEOMUtils \ -I$(srcdir)/../SKETCHER \ -I$(srcdir)/../ARCHIMEDE \ -I$(top_builddir)/idl libGEOMimpl_la_LDFLAGS = \ ../GEOM/libGEOMbasic.la \ + ../BlockFix/libBlockFix.la \ ../GEOMAlgo/libGEOMAlgo.la \ + ../GEOMUtils/libGEOMUtils.la \ ../ShHealOper/libShHealOper.la \ ../ARCHIMEDE/libGEOMArchimede.la \ ../SKETCHER/libGEOMSketcher.la \ diff --git a/src/GEOMUtils/GEOMUtils.cxx b/src/GEOMUtils/GEOMUtils.cxx new file mode 100644 index 000000000..292ab5c44 --- /dev/null +++ b/src/GEOMUtils/GEOMUtils.cxx @@ -0,0 +1,499 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +#include + +#include + +#include + +#include +#include +#include + +// OCCT Includes +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include + +#include +#include +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +#define STD_SORT_ALGO 1 + +//======================================================================= +//function : GetPosition +//purpose : +//======================================================================= +gp_Ax3 GEOMUtils::GetPosition (const TopoDS_Shape& theShape) +{ + gp_Ax3 aResult; + + if (theShape.IsNull()) + return aResult; + + // Axes + aResult.Transform(theShape.Location().Transformation()); + if (theShape.ShapeType() == TopAbs_FACE) { + Handle(Geom_Surface) aGS = BRep_Tool::Surface(TopoDS::Face(theShape)); + if (!aGS.IsNull() && aGS->IsKind(STANDARD_TYPE(Geom_Plane))) { + Handle(Geom_Plane) aGPlane = Handle(Geom_Plane)::DownCast(aGS); + gp_Pln aPln = aGPlane->Pln(); + aResult = aPln.Position(); + // In case of reverse orinetation of the face invert the plane normal + // (the face's normal does not mathc the plane's normal in this case) + if(theShape.Orientation() == TopAbs_REVERSED) + { + gp_Dir Vx = aResult.XDirection(); + gp_Dir N = aResult.Direction().Mirrored(Vx); + gp_Pnt P = aResult.Location(); + aResult = gp_Ax3(P, N, Vx); + } + } + } + + // Origin + gp_Pnt aPnt; + + TopAbs_ShapeEnum aShType = theShape.ShapeType(); + + if (aShType == TopAbs_VERTEX) { + aPnt = BRep_Tool::Pnt(TopoDS::Vertex(theShape)); + } + else { + if (aShType == TopAbs_COMPOUND) { + aShType = GetTypeOfSimplePart(theShape); + } + + GProp_GProps aSystem; + if (aShType == TopAbs_EDGE || aShType == TopAbs_WIRE) + BRepGProp::LinearProperties(theShape, aSystem); + else if (aShType == TopAbs_FACE || aShType == TopAbs_SHELL) + BRepGProp::SurfaceProperties(theShape, aSystem); + else + BRepGProp::VolumeProperties(theShape, aSystem); + + aPnt = aSystem.CentreOfMass(); + } + + aResult.SetLocation(aPnt); + + return aResult; +} + +//======================================================================= +//function : GetVector +//purpose : +//======================================================================= +gp_Vec GEOMUtils::GetVector (const TopoDS_Shape& theShape) +{ + if (theShape.IsNull()) + Standard_NullObject::Raise("Null shape is given for a vector"); + + if (theShape.ShapeType() != TopAbs_EDGE) + Standard_TypeMismatch::Raise("Invalid shape is given, must be a vector or an edge"); + + TopoDS_Edge anE = TopoDS::Edge(theShape); + + TopoDS_Vertex V1, V2; + TopExp::Vertices(anE, V1, V2, Standard_True); + + if (V1.IsNull() || V2.IsNull()) + Standard_NullObject::Raise("Invalid edge is given, it must have two points"); + + gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2)); + if (aV.Magnitude() < gp::Resolution()) { + Standard_ConstructionError::Raise("Vector of zero length is given"); + } + + return aV; +} + +//======================================================================= +//function : ShapeToDouble +//purpose : used by CompareShapes::operator() +//======================================================================= +std::pair ShapeToDouble (const TopoDS_Shape& S, bool isOldSorting) +{ + // Computing of CentreOfMass + gp_Pnt GPoint; + double Len; + + if (S.ShapeType() == TopAbs_VERTEX) { + GPoint = BRep_Tool::Pnt(TopoDS::Vertex(S)); + Len = (double)S.Orientation(); + } + else { + GProp_GProps GPr; + // BEGIN: fix for Mantis issue 0020842 + if (isOldSorting) { + BRepGProp::LinearProperties(S, GPr); + } + else { + if (S.ShapeType() == TopAbs_EDGE || S.ShapeType() == TopAbs_WIRE) { + BRepGProp::LinearProperties(S, GPr); + } + else if (S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SHELL) { + BRepGProp::SurfaceProperties(S, GPr); + } + else { + BRepGProp::VolumeProperties(S, GPr); + } + } + // END: fix for Mantis issue 0020842 + GPoint = GPr.CentreOfMass(); + Len = GPr.Mass(); + } + + double dMidXYZ = GPoint.X() * 999.0 + GPoint.Y() * 99.0 + GPoint.Z() * 0.9; + return std::make_pair(dMidXYZ, Len); +} + +//======================================================================= +//function : CompareShapes::operator() +//purpose : used by std::sort(), called from SortShapes() +//======================================================================= +bool GEOMUtils::CompareShapes::operator() (const TopoDS_Shape& theShape1, + const TopoDS_Shape& theShape2) +{ + if (!myMap.IsBound(theShape1)) { + myMap.Bind(theShape1, ShapeToDouble(theShape1, myIsOldSorting)); + } + + if (!myMap.IsBound(theShape2)) { + myMap.Bind(theShape2, ShapeToDouble(theShape2, myIsOldSorting)); + } + + std::pair val1 = myMap.Find(theShape1); + std::pair val2 = myMap.Find(theShape2); + + double tol = Precision::Confusion(); + bool exchange = Standard_False; + + double dMidXYZ = val1.first - val2.first; + if (dMidXYZ >= tol) { + exchange = Standard_True; + } + else if (Abs(dMidXYZ) < tol) { + double dLength = val1.second - val2.second; + if (dLength >= tol) { + exchange = Standard_True; + } + else if (Abs(dLength) < tol && theShape1.ShapeType() <= TopAbs_FACE) { + // PAL17233 + // equal values possible on shapes such as two halves of a sphere and + // a membrane inside the sphere + Bnd_Box box1,box2; + BRepBndLib::Add(theShape1, box1); + if (!box1.IsVoid()) { + BRepBndLib::Add(theShape2, box2); + Standard_Real dSquareExtent = box1.SquareExtent() - box2.SquareExtent(); + if (dSquareExtent >= tol) { + exchange = Standard_True; + } + else if (Abs(dSquareExtent) < tol) { + Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax, val1, val2; + box1.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax); + val1 = (aXmin+aXmax)*999.0 + (aYmin+aYmax)*99.0 + (aZmin+aZmax)*0.9; + box2.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax); + val2 = (aXmin+aXmax)*999.0 + (aYmin+aYmax)*99.0 + (aZmin+aZmax)*0.9; + if ((val1 - val2) >= tol) { + exchange = Standard_True; + } + } + } + } + } + + //return val1 < val2; + return !exchange; +} + +//======================================================================= +//function : SortShapes +//purpose : +//======================================================================= +void GEOMUtils::SortShapes (TopTools_ListOfShape& SL, + const Standard_Boolean isOldSorting) +{ +#ifdef STD_SORT_ALGO + std::vector aShapesVec; + aShapesVec.reserve(SL.Extent()); + + TopTools_ListIteratorOfListOfShape it (SL); + for (; it.More(); it.Next()) { + aShapesVec.push_back(it.Value()); + } + SL.Clear(); + + CompareShapes shComp (isOldSorting); + std::stable_sort(aShapesVec.begin(), aShapesVec.end(), shComp); + //std::sort(aShapesVec.begin(), aShapesVec.end(), shComp); + + std::vector::const_iterator anIter = aShapesVec.begin(); + for (; anIter != aShapesVec.end(); ++anIter) { + SL.Append(*anIter); + } +#else + // old implementation + Standard_Integer MaxShapes = SL.Extent(); + TopTools_Array1OfShape aShapes (1,MaxShapes); + TColStd_Array1OfInteger OrderInd(1,MaxShapes); + TColStd_Array1OfReal MidXYZ (1,MaxShapes); //X,Y,Z; + TColStd_Array1OfReal Length (1,MaxShapes); //X,Y,Z; + + // Computing of CentreOfMass + Standard_Integer Index; + GProp_GProps GPr; + gp_Pnt GPoint; + TopTools_ListIteratorOfListOfShape it(SL); + for (Index=1; it.More(); Index++) + { + TopoDS_Shape S = it.Value(); + SL.Remove( it ); // == it.Next() + aShapes(Index) = S; + OrderInd.SetValue (Index, Index); + if (S.ShapeType() == TopAbs_VERTEX) { + GPoint = BRep_Tool::Pnt( TopoDS::Vertex( S )); + Length.SetValue( Index, (Standard_Real) S.Orientation()); + } + else { + // BEGIN: fix for Mantis issue 0020842 + if (isOldSorting) { + BRepGProp::LinearProperties (S, GPr); + } + else { + if (S.ShapeType() == TopAbs_EDGE || S.ShapeType() == TopAbs_WIRE) { + BRepGProp::LinearProperties (S, GPr); + } + else if (S.ShapeType() == TopAbs_FACE || S.ShapeType() == TopAbs_SHELL) { + BRepGProp::SurfaceProperties(S, GPr); + } + else { + BRepGProp::VolumeProperties(S, GPr); + } + } + // END: fix for Mantis issue 0020842 + GPoint = GPr.CentreOfMass(); + Length.SetValue(Index, GPr.Mass()); + } + MidXYZ.SetValue(Index, GPoint.X()*999.0 + GPoint.Y()*99.0 + GPoint.Z()*0.9); + //cout << Index << " L: " << Length(Index) << "CG: " << MidXYZ(Index) << endl; + } + + // Sorting + Standard_Integer aTemp; + Standard_Boolean exchange, Sort = Standard_True; + Standard_Real tol = Precision::Confusion(); + while (Sort) + { + Sort = Standard_False; + for (Index=1; Index < MaxShapes; Index++) + { + exchange = Standard_False; + Standard_Real dMidXYZ = MidXYZ(OrderInd(Index)) - MidXYZ(OrderInd(Index+1)); + Standard_Real dLength = Length(OrderInd(Index)) - Length(OrderInd(Index+1)); + if ( dMidXYZ >= tol ) { +// cout << "MidXYZ: " << MidXYZ(OrderInd(Index))<< " > " <= tol ) { +// cout << "Length: " << Length(OrderInd(Index))<< " > " <= tol ) { +// cout << "SquareExtent: " << box1.SquareExtent()<<" > "< val2; + if ((val1 - val2) >= tol) { + exchange = Standard_True; + } + //cout << "box: " << val1<<" > "< + +#include + +#include + +#include +#include + +#include + +inline Standard_Boolean IsEqual (const TopoDS_Shape& S1, const TopoDS_Shape& S2) +{ + return S1.IsSame(S2); +} + +class GEOMUtils { + + public: + /*! + * \brief Get Local Coordinate System, corresponding to the given shape. + * + * Origin of the LCS is situated at the shape's center of mass. + * Axes of the LCS are obtained from shape's location or, + * if the shape is a planar face, from position of its plane. + */ + Standard_EXPORT static gp_Ax3 GetPosition (const TopoDS_Shape& theShape); + + /*! + * \brief Get vector, defined by the given edge. + */ + Standard_EXPORT static gp_Vec GetVector (const TopoDS_Shape& theShape); + + /*! + * \brief Sort shapes in the list by their coordinates. + * \param SL The list of shapes to sort. + */ + struct CompareShapes : public std::binary_function + { + CompareShapes (bool isOldSorting) + : myIsOldSorting(isOldSorting) {} + + bool operator() (const TopoDS_Shape& lhs, const TopoDS_Shape& rhs); + + typedef NCollection_DataMap > GEOMUtils_DataMapOfShapeDouble; + GEOMUtils_DataMapOfShapeDouble myMap; + bool myIsOldSorting; + }; + + /*! + * \brief Sort shapes by their centers of mass, using formula X*999 + Y*99 + Z*0.9 + */ + Standard_EXPORT static void SortShapes (TopTools_ListOfShape& SL, + const Standard_Boolean isOldSorting = Standard_True); + + /*! + * \brief Convert TopoDS_COMPSOLID to TopoDS_COMPOUND. + * + * If the argument shape is not of type TopoDS_COMPSOLID, this method returns it as is. + * + * \param theCompsolid The compsolid to be converted. + * \retval TopoDS_Shape Returns the resulting compound. + */ + Standard_EXPORT static TopoDS_Shape CompsolidToCompound (const TopoDS_Shape& theCompsolid); + + /*! + * \brief Build a triangulation on \a theShape if it is absent. + * \param theShape The shape to check/build triangulation on. + * \retval bool Returns false if the shape has no faces, i.e. impossible to build triangulation. + */ + Standard_EXPORT static bool CheckTriangulation (const TopoDS_Shape& theShape); + + /*! + * \brief Return type of shape for explode. In case of compound it will be a type of its first sub shape. + * \param theShape The shape to get type of. + * \retval TopAbs_ShapeEnum Return type of shape for explode. + */ + Standard_EXPORT static TopAbs_ShapeEnum GetTypeOfSimplePart (const TopoDS_Shape& theShape); + +}; + +#endif diff --git a/src/GEOMUtils/Makefile.am b/src/GEOMUtils/Makefile.am new file mode 100644 index 000000000..844ac94f2 --- /dev/null +++ b/src/GEOMUtils/Makefile.am @@ -0,0 +1,57 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +# GEOMUtils : implementaion of some common methods for GEOMImpl package +# File : Makefile.am +# Author : Julia DOROVSKIKH + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# Libraries targets +lib_LTLIBRARIES = libGEOMUtils.la + +# header files +salomeinclude_HEADERS = \ + GEOMUtils.hxx + +dist_libGEOMUtils_la_SOURCES = \ + GEOMUtils.cxx + +# additional information to compile and link file + +libGEOMUtils_la_CPPFLAGS = \ + $(CAS_CPPFLAGS) \ + $(KERNEL_CXXFLAGS) \ + $(BOOST_CPPFLAGS) \ + -I$(srcdir)/../ShHealOper \ + -I$(srcdir)/../NMTDS \ + -I$(srcdir)/../NMTTools \ + -I$(srcdir)/../BlockFix \ + -I$(srcdir)/../GEOMAlgo \ + -I$(srcdir)/../SKETCHER \ + -I$(srcdir)/../ARCHIMEDE + +libGEOMUtils_la_LDFLAGS = \ + ../BlockFix/libBlockFix.la \ + ../GEOMAlgo/libGEOMAlgo.la \ + ../ShHealOper/libShHealOper.la \ + ../ARCHIMEDE/libGEOMArchimede.la \ + ../SKETCHER/libGEOMSketcher.la \ + $(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSALOMEBasics \ + $(CAS_LDPATH) -lTKCAF -lTKFillet -lTKOffset -lTKFeat \ + $(STDLIB) diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.cc b/src/GEOM_I/GEOM_ICurvesOperations_i.cc index 3f1a67800..88e381681 100644 --- a/src/GEOM_I/GEOM_ICurvesOperations_i.cc +++ b/src/GEOM_I/GEOM_ICurvesOperations_i.cc @@ -427,6 +427,46 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineInterpolation return GetObject(anObject); } +//============================================================================= +/*! + * MakeSplineInterpolWithTangents + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineInterpolWithTangents + (const GEOM::ListOfGO& thePoints, + GEOM::GEOM_Object_ptr theFirstVec, + GEOM::GEOM_Object_ptr theLastVec) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference points + int ind = 0; + int aLen = thePoints.length(); + std::list aPoints; + for (; ind < aLen; ind++) { + Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]); + if (aPnt.IsNull()) return aGEOMObject._retn(); + aPoints.push_back(aPnt); + } + + //Get the reference vectors + Handle(GEOM_Object) aVec1 = GetObjectImpl(theFirstVec); + Handle(GEOM_Object) aVec2 = GetObjectImpl(theLastVec); + + if (aVec1.IsNull() || aVec2.IsNull()) return aGEOMObject._retn(); + + // Make Polyline + Handle(GEOM_Object) anObject = + GetOperations()->MakeSplineInterpolWithTangents(aPoints, aVec1, aVec2); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + //============================================================================= /*! * MakeCurveParametric diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.hh b/src/GEOM_I/GEOM_ICurvesOperations_i.hh index e50ab2111..07f4ce2a0 100644 --- a/src/GEOM_I/GEOM_ICurvesOperations_i.hh +++ b/src/GEOM_I/GEOM_ICurvesOperations_i.hh @@ -85,6 +85,10 @@ class GEOM_I_EXPORT GEOM_ICurvesOperations_i : CORBA::Boolean theIsClosed, CORBA::Boolean theDoReordering); + GEOM::GEOM_Object_ptr MakeSplineInterpolWithTangents (const GEOM::ListOfGO& thePoints, + GEOM::GEOM_Object_ptr theFirstVec, + GEOM::GEOM_Object_ptr theLastVec); + GEOM::GEOM_Object_ptr MakeCurveParametric (const char* thexExpr, const char* theyExpr, const char* thezExpr, double theParamMin, double theParamMax, double theParamStep, diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py index 3b9381772..4eb309e4c 100644 --- a/src/GEOM_SWIG/GEOM_TestAll.py +++ b/src/GEOM_SWIG/GEOM_TestAll.py @@ -102,6 +102,8 @@ def TestAll (geompy, math): Polyline = geompy.MakePolyline([p0, pz, py, p200]) #(List of GEOM_Object)->GEOM_Object Bezier = geompy.MakeBezier([p0, pz, p200, px]) #(List of GEOM_Object)->GEOM_Object Interpol = geompy.MakeInterpol([px, py, p200, pxyz], True) #(List of GEOM_Object,Boolean)->GEOM_Object + InterpT1 = geompy.MakeInterpolWithTangents([px, py, pxyz], vx, vz) #(List of GO, GO, GO)->GEOM_Object + InterpT2 = geompy.MakeInterpolWithTangents([px, py, pxyz], vxy, vxyz) #(List of GO, GO, GO)->GEOM_Object Sketcher = geompy.MakeSketcher("Sketcher:F -100 -100:TT 250 -100:R 0:C 100 150:R 0:L 300:WW", [100,0,0, 1,1,1, -1,1,0]) #(String, List of Doubles)->GEOM_Object @@ -343,6 +345,8 @@ def TestAll (geompy, math): id_Polyline = geompy.addToStudy(Polyline, "Polyline") id_Bezier = geompy.addToStudy(Bezier, "Bezier") id_Interpol = geompy.addToStudy(Interpol, "Interpol") + id_InterpT1 = geompy.addToStudy(InterpT1, "InterpT1") + id_InterpT2 = geompy.addToStudy(InterpT2, "InterpT2") id_Sketcher = geompy.addToStudy(Sketcher, "Sketcher") id_Sketcher3d_1 = geompy.addToStudy(Sketcher3d_1, "Sketcher 3D by interface") diff --git a/src/GEOM_SWIG/geompyDC.py b/src/GEOM_SWIG/geompyDC.py index 40a7dd53a..f5ad127fc 100644 --- a/src/GEOM_SWIG/geompyDC.py +++ b/src/GEOM_SWIG/geompyDC.py @@ -1579,9 +1579,32 @@ class geompyDC(GEOM._objref_GEOM_Gen): """ # Example: see GEOM_TestAll.py anObj = self.CurvesOp.MakeSplineInterpolation(thePoints, theIsClosed, theDoReordering) - RaiseIfFailed("MakeSplineInterpolation", self.CurvesOp) + RaiseIfFailed("MakeInterpol", self.CurvesOp) return anObj + ## Create B-Spline curve on the set of points. + # @param thePoints Sequence of points for the B-Spline curve. + # @param theFirstVec Vector object, defining the curve direction at its first point. + # @param theLastVec Vector object, defining the curve direction at its last point. + # @return New GEOM.GEOM_Object, containing the created B-Spline curve. + # + # @ref tui_creation_curve "Example" + def MakeInterpolWithTangents(self, thePoints, theFirstVec, theLastVec): + """ + Create B-Spline curve on the set of points. + + Parameters: + thePoints Sequence of points for the B-Spline curve. + theFirstVec Vector object, defining the curve direction at its first point. + theLastVec Vector object, defining the curve direction at its last point. + + Returns: + New GEOM.GEOM_Object, containing the created B-Spline curve. + """ + # Example: see GEOM_TestAll.py + anObj = self.CurvesOp.MakeSplineInterpolWithTangents(thePoints, theFirstVec, theLastVec) + RaiseIfFailed("MakeInterpolWithTangents", self.CurvesOp) + return anObj ## Creates a curve using the parametric definition of the basic points. # @param thexExpr parametric equation of the coordinates X. @@ -1622,8 +1645,6 @@ class geompyDC(GEOM._objref_GEOM_Gen): RaiseIfFailed("MakeSplineInterpolation", self.CurvesOp) anObj.SetParameters(Parameters) return anObj - - # end of l4_curves ## @} diff --git a/src/Makefile.am b/src/Makefile.am index 862b90287..e81e3bfd9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -15,15 +15,14 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# # File : Makefile.am # Author : Alexander BORODIN, Open CASCADE S.A.S. (alexander.borodin@opencascade.com) # Package : src (source files directory) -SUBDIRS = ARCHIMEDE NMTDS NMTTools GEOMAlgo SKETCHER OCC2VTK GEOM \ - BREPExport BREPImport IGESExport IGESImport STEPExport \ - STEPImport STLExport VTKExport ShHealOper GEOMImpl GEOM_I \ +SUBDIRS = ARCHIMEDE NMTDS NMTTools BlockFix GEOMAlgo SKETCHER OCC2VTK GEOM \ + BREPExport BREPImport IGESExport IGESImport STEPExport STEPImport \ + STLExport VTKExport ShHealOper GEOMUtils GEOMImpl GEOM_I \ GEOMClient GEOM_I_Superv GEOM_SWIG GEOM_PY if WITH_OPENCV @@ -31,18 +30,18 @@ if WITH_OPENCV endif if GEOM_ENABLE_GUI - SUBDIRS += OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI GEOMBase GEOMToolsGUI \ - DisplayGUI BasicGUI PrimitiveGUI GenerationGUI EntityGUI BuildGUI \ - BooleanGUI TransformationGUI OperationGUI RepairGUI MeasureGUI \ - GroupGUI BlocksGUI AdvancedGUI GEOM_SWIG_WITHIHM + SUBDIRS += OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI GEOMBase \ + GEOMToolsGUI DisplayGUI BasicGUI PrimitiveGUI GenerationGUI \ + EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI \ + RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI GEOM_SWIG_WITHIHM endif -DIST_SUBDIRS = ARCHIMEDE NMTDS NMTTools GEOMAlgo \ - SKETCHER OCC2VTK GEOM BREPExport \ - BREPImport IGESExport IGESImport STEPExport STEPImport STLExport \ - VTKExport ShHealOper GEOMImpl GEOM_I GEOMClient GEOM_I_Superv \ - GEOM_SWIG OBJECT DlgRef GEOMFiltersSelection Material GEOMGUI GEOMBase \ +DIST_SUBDIRS = ARCHIMEDE NMTDS NMTTools BlockFix GEOMAlgo SKETCHER \ + OCC2VTK GEOM BREPExport BREPImport IGESExport IGESImport \ + STEPExport STEPImport STLExport VTKExport ShHealOper GEOMUtils \ + GEOMImpl GEOM_I GEOMClient GEOM_I_Superv GEOM_SWIG OBJECT \ + DlgRef GEOMFiltersSelection Material GEOMGUI GEOMBase \ GEOMToolsGUI DisplayGUI BasicGUI PrimitiveGUI GenerationGUI \ EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI \ - RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI \ + RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI \ GEOM_SWIG_WITHIHM GEOM_PY ShapeRecognition -- 2.39.2