From d9ca2e0cb1399534b1196f652d86b95ee4c5a49f Mon Sep 17 00:00:00 2001 From: emv Date: Tue, 6 Feb 2018 08:48:27 +0300 Subject: [PATCH] 0029481: Implementation of the Feature Removal algorithm Implementation of the 3D model De-featuring algorithm intended for the removal of the unwanted parts (or features) from the model consisting of solids. The features can be the holes, protrusions, gaps, chamfers, fillets etc. The algorithm removes all possible requested features from the shape and builds the new shape as a result. The input model is not modified. On the API level the algorithm is implemented in the class *BRepAlgoAPI_Defeaturing*. The actual features removal is performed by the low-level algorithm *BOPAlgo_RemoveFeatures*. Documentation of the new classes. Implementation of the DRAW commands for working with new algorithm. Test cases for the new functionality. Changes in other algorithms used by De-featuring algorithm: - Provide history support for the solids in *ShapeUpgrade_UnifySameDomain* algorithm; - Implementation of the mechanism to merge History of any Algorithm with standard history methods such as IsDeleted(), Modified() and Generated() into *BRepTools_History*. --- .../draw_test_harness/draw_test_harness.md | 38 + .../images/modeling_algos_rf_im001.png | Bin 0 -> 5982 bytes .../images/modeling_algos_rf_im002.png | Bin 0 -> 5332 bytes .../images/modeling_algos_rf_im003.png | Bin 0 -> 5080 bytes .../images/modeling_algos_rf_im004.png | Bin 0 -> 16283 bytes .../images/modeling_algos_rf_im005.png | Bin 0 -> 18341 bytes .../images/modeling_algos_rf_im006.png | Bin 0 -> 17172 bytes .../images/modeling_algos_rf_im007.png | Bin 0 -> 15747 bytes .../images/modeling_algos_rf_im008.png | Bin 0 -> 14941 bytes .../images/modeling_algos_rf_im009.png | Bin 0 -> 18566 bytes .../images/modeling_algos_rf_im010.png | Bin 0 -> 17481 bytes .../images/modeling_algos_rf_im011.png | Bin 0 -> 9981 bytes .../images/modeling_algos_rf_im012.png | Bin 0 -> 8475 bytes .../images/modeling_algos_rf_im013.png | Bin 0 -> 9791 bytes .../images/modeling_algos_rf_im014.png | Bin 0 -> 4626 bytes .../images/modeling_algos_rf_im015.png | Bin 0 -> 16001 bytes .../images/modeling_algos_rf_im016.png | Bin 0 -> 13302 bytes .../images/modeling_algos_rf_im017.png | Bin 0 -> 34885 bytes .../images/modeling_algos_rf_im018.png | Bin 0 -> 42392 bytes .../images/modeling_algos_rf_im019.png | Bin 0 -> 39885 bytes .../images/modeling_algos_rf_im020.png | Bin 0 -> 24838 bytes .../images/modeling_algos_rf_im021.png | Bin 0 -> 19297 bytes .../images/modeling_algos_rf_im022.png | Bin 0 -> 25544 bytes .../images/modeling_algos_rf_im023.png | Bin 0 -> 15886 bytes .../images/modeling_algos_rf_im024.png | Bin 0 -> 28196 bytes .../images/modeling_algos_rf_im025.png | Bin 0 -> 26032 bytes .../images/modeling_algos_rf_im026.png | Bin 0 -> 35429 bytes .../images/modeling_algos_rf_im027.png | Bin 0 -> 24356 bytes .../images/modeling_algos_rf_im028.png | Bin 0 -> 35629 bytes .../images/modeling_algos_rf_im029.png | Bin 0 -> 24648 bytes .../modeling_algos/modeling_algos.md | 182 ++ src/BOPAlgo/BOPAlgo.msg | 12 + src/BOPAlgo/BOPAlgo_Alerts.hxx | 12 + src/BOPAlgo/BOPAlgo_BOPAlgo_msg.pxx | 14 +- src/BOPAlgo/BOPAlgo_RemoveFeatures.cxx | 1671 +++++++++++++++++ src/BOPAlgo/BOPAlgo_RemoveFeatures.hxx | 315 ++++ src/BOPAlgo/FILES | 2 + src/BOPTest/BOPTest.cxx | 16 +- src/BOPTest/BOPTest.hxx | 6 +- src/BOPTest/BOPTest_BOPCommands.cxx | 12 +- src/BOPTest/BOPTest_CellsCommands.cxx | 8 +- src/BOPTest/BOPTest_CheckCommands.cxx | 2 +- src/BOPTest/BOPTest_DebugCommands.cxx | 4 +- src/BOPTest/BOPTest_PartitionCommands.cxx | 8 +- .../BOPTest_RemoveFeaturesCommands.cxx | 269 +++ src/BOPTest/FILES | 1 + src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.cxx | 86 + src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.hxx | 205 ++ src/BRepAlgoAPI/FILES | 2 + src/BRepLib/BRepLib.cxx | 131 ++ src/BRepLib/BRepLib.hxx | 18 + src/BRepTools/BRepTools_History.cxx | 25 +- src/BRepTools/BRepTools_History.hxx | 62 + .../ShapeUpgrade_UnifySameDomain.cxx | 14 +- tests/boolean/grids.list | 3 +- tests/boolean/removefeatures/A1 | 50 + tests/boolean/removefeatures/A2 | 28 + tests/boolean/removefeatures/A3 | 14 + tests/boolean/removefeatures/A4 | 30 + tests/boolean/removefeatures/A5 | 14 + tests/boolean/removefeatures/A6 | 27 + tests/boolean/removefeatures/A7 | 63 + tests/boolean/removefeatures/A8 | 17 + tests/boolean/removefeatures/A9 | 12 + tests/boolean/removefeatures/B1 | 37 + tests/boolean/removefeatures/B2 | 29 + tests/boolean/removefeatures/B3 | 29 + tests/boolean/removefeatures/B4 | 37 + tests/boolean/removefeatures/B5 | 22 + tests/boolean/removefeatures/B6 | 12 + tests/boolean/removefeatures/B7 | 24 + tests/boolean/removefeatures/B8 | 31 + tests/boolean/removefeatures/B9 | 24 + tests/boolean/removefeatures/C1 | 29 + tests/boolean/removefeatures/C2 | 29 + tests/boolean/removefeatures/C3 | 21 + tests/boolean/removefeatures/C4 | 31 + tests/boolean/removefeatures/C5 | 47 + tests/boolean/removefeatures/C6 | 11 + tests/boolean/removefeatures/C7 | 12 + tests/boolean/removefeatures/C8 | 10 + tests/boolean/removefeatures/C9 | 12 + tests/boolean/removefeatures/D1 | 12 + tests/boolean/removefeatures/D2 | 12 + tests/boolean/removefeatures/D3 | 12 + tests/boolean/removefeatures/D4 | 12 + tests/boolean/removefeatures/D5 | 12 + tests/boolean/removefeatures/D6 | 12 + tests/boolean/removefeatures/D7 | 16 + tests/boolean/removefeatures/D8 | 12 + tests/boolean/removefeatures/D9 | 12 + tests/boolean/removefeatures/E1 | 50 + tests/boolean/removefeatures/E2 | 11 + tests/boolean/removefeatures/E3 | 11 + tests/boolean/removefeatures/E4 | 12 + tests/boolean/removefeatures/E5 | 12 + tests/boolean/removefeatures/E6 | 13 + tests/boolean/removefeatures/E7 | 11 + tests/boolean/removefeatures/E8 | 15 + tests/boolean/removefeatures/E9 | 15 + tests/boolean/removefeatures/F1 | 17 + tests/boolean/removefeatures/F2 | 15 + tests/boolean/removefeatures/F3 | 15 + tests/boolean/removefeatures/F4 | 15 + tests/boolean/removefeatures/F5 | 12 + tests/boolean/removefeatures/F6 | 12 + tests/boolean/removefeatures/F7 | 12 + tests/boolean/removefeatures/F8 | 11 + tests/boolean/removefeatures/F9 | 11 + tests/boolean/removefeatures/G1 | 27 + tests/boolean/removefeatures/G2 | 10 + tests/boolean/removefeatures/begin | 12 + 112 files changed, 4212 insertions(+), 39 deletions(-) create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im001.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im002.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im003.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im004.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im005.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im006.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im007.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im008.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im009.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im010.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im011.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im012.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im013.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im014.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im015.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im016.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im017.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im018.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im019.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im020.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im021.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im022.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im023.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im024.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im025.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im026.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im027.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im028.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_rf_im029.png create mode 100644 src/BOPAlgo/BOPAlgo_RemoveFeatures.cxx create mode 100644 src/BOPAlgo/BOPAlgo_RemoveFeatures.hxx create mode 100644 src/BOPTest/BOPTest_RemoveFeaturesCommands.cxx create mode 100644 src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.cxx create mode 100644 src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.hxx create mode 100644 tests/boolean/removefeatures/A1 create mode 100644 tests/boolean/removefeatures/A2 create mode 100644 tests/boolean/removefeatures/A3 create mode 100644 tests/boolean/removefeatures/A4 create mode 100644 tests/boolean/removefeatures/A5 create mode 100644 tests/boolean/removefeatures/A6 create mode 100644 tests/boolean/removefeatures/A7 create mode 100644 tests/boolean/removefeatures/A8 create mode 100644 tests/boolean/removefeatures/A9 create mode 100644 tests/boolean/removefeatures/B1 create mode 100644 tests/boolean/removefeatures/B2 create mode 100644 tests/boolean/removefeatures/B3 create mode 100644 tests/boolean/removefeatures/B4 create mode 100644 tests/boolean/removefeatures/B5 create mode 100644 tests/boolean/removefeatures/B6 create mode 100644 tests/boolean/removefeatures/B7 create mode 100644 tests/boolean/removefeatures/B8 create mode 100644 tests/boolean/removefeatures/B9 create mode 100644 tests/boolean/removefeatures/C1 create mode 100644 tests/boolean/removefeatures/C2 create mode 100644 tests/boolean/removefeatures/C3 create mode 100644 tests/boolean/removefeatures/C4 create mode 100644 tests/boolean/removefeatures/C5 create mode 100644 tests/boolean/removefeatures/C6 create mode 100644 tests/boolean/removefeatures/C7 create mode 100644 tests/boolean/removefeatures/C8 create mode 100644 tests/boolean/removefeatures/C9 create mode 100644 tests/boolean/removefeatures/D1 create mode 100644 tests/boolean/removefeatures/D2 create mode 100644 tests/boolean/removefeatures/D3 create mode 100644 tests/boolean/removefeatures/D4 create mode 100644 tests/boolean/removefeatures/D5 create mode 100644 tests/boolean/removefeatures/D6 create mode 100644 tests/boolean/removefeatures/D7 create mode 100644 tests/boolean/removefeatures/D8 create mode 100644 tests/boolean/removefeatures/D9 create mode 100644 tests/boolean/removefeatures/E1 create mode 100644 tests/boolean/removefeatures/E2 create mode 100644 tests/boolean/removefeatures/E3 create mode 100644 tests/boolean/removefeatures/E4 create mode 100644 tests/boolean/removefeatures/E5 create mode 100644 tests/boolean/removefeatures/E6 create mode 100644 tests/boolean/removefeatures/E7 create mode 100644 tests/boolean/removefeatures/E8 create mode 100644 tests/boolean/removefeatures/E9 create mode 100644 tests/boolean/removefeatures/F1 create mode 100644 tests/boolean/removefeatures/F2 create mode 100644 tests/boolean/removefeatures/F3 create mode 100644 tests/boolean/removefeatures/F4 create mode 100644 tests/boolean/removefeatures/F5 create mode 100644 tests/boolean/removefeatures/F6 create mode 100644 tests/boolean/removefeatures/F7 create mode 100644 tests/boolean/removefeatures/F8 create mode 100644 tests/boolean/removefeatures/F9 create mode 100644 tests/boolean/removefeatures/G1 create mode 100644 tests/boolean/removefeatures/G2 create mode 100644 tests/boolean/removefeatures/begin diff --git a/dox/user_guides/draw_test_harness/draw_test_harness.md b/dox/user_guides/draw_test_harness/draw_test_harness.md index d4be9c003e..c6dd9828f5 100644 --- a/dox/user_guides/draw_test_harness/draw_test_harness.md +++ b/dox/user_guides/draw_test_harness/draw_test_harness.md @@ -5844,6 +5844,7 @@ The following topics are covered in the eight sections of this chapter: * Transformations of shapes: translation, copy, etc. * Topological operations, or booleans. * Drafting and blending. + * Defeaturing. * Analysis of shapes. @@ -7322,6 +7323,43 @@ buildevol ~~~~~ +@subsection occt_draw_defeaturing Defeaturing + +Draw module for @ref occt_modalg_defeaturing "3D Model Defeaturing" includes the command to perform the operation and the commands to access the history of shapes modifications. + +@subsubsection occt_draw_defeaturing_op removefeatures + +*removefeatures* command performs the removal of the requested features from the shape. + +Syntax: +~~~~ +removefeatures result shape f1 f2 ... [-nohist] [-parallel] + +Where: +result - result of the operation; +shape - the shape to remove the features from; +f1, f2 - features to remove from the shape; + +Options: +nohist - disables the history collection; +parallel - enables the parallel processing mode. +~~~~ + +@subsubsection occt_draw_defeaturing_hist rfmodified, rfgenerated, rfisdeleted + +To track the history of a shape modification during Defeaturing the following commands can be used: +* rfmodified Shows the shapes modified from the input shape during Defeaturing. +* rfgenerated Shows the shapes generated from the input shape during Defeaturing. +* rfisdeleted Checks if the shape has been deleted during Defeaturing (i.e. has no trace in the result shape). + +Syntax: +~~~~ +rfmodified : rfmodified c_modified shape +rfgenerated : rfgenerated c_generated shape +rfisdeleted : rfisdeleted shape +~~~~ + + @subsection occt_draw_7_9 Analysis of topology and geometry Analysis of shapes includes commands to compute length, area, volumes and inertial properties, as well as to compute some aspects impacting shape validity. diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im001.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im001.png new file mode 100644 index 0000000000000000000000000000000000000000..0d9110e05e0fd7f442878141509550f901c7853f GIT binary patch literal 5982 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 E51i6hLI3~& literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im005.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im005.png new file mode 100644 index 0000000000000000000000000000000000000000..956fcee228dfa2a21b2aca9fc760b653982f4ffd GIT binary patch literal 18341 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%0DIAoR<(%rFA_kO2;sq`%^AH zb`)EK{THyFJc$shcXi()-MDXR_AStDbGA-O;01Z*Iu|2`{nEFj?{!gg#=-uWGv^0|V3v{rEu94syO z7;x;9!M)q1a6VoFE%0Z^1Z;l*=Tp{=Vy@BFW74bR>@Z}VPUe=GRxe0{#%7(1u9Gyu zM2Q?a%*Xf^I~S&2oj9~l(k6D7}$jNW36Bo*ukEb4_)lrK}whrUl|%cqHjr2O`n^BfcOut z<)x*D&D@NsuTKD`##ww2i0IcBgd9u4Cq`nY*>{>H(ej!;^qZ-hAD72=qyI+b-ldwO zBDB*sH;?%PYq{zMr4n%p&Zdi&{)>`nwi;pD~eoXra$8Az*1t7!dK zs+>QW*y)9OU0bTads{C8-+AC)&5XA~$_ z$cT7zdT)?MjRUU#oi;qJ{BMv3*UT<(o*njfsxr~FteUcAx*&E0L&H~8gArNIM`pUR z&6?-F%ucUC#q=p0DeEkDeiv`9<-=zzgKwR!p3G?dq5Q{1j!#Gck}&VaOF*SWHyDh` z#5n*&f@FsTm#az&&}*vixW&PBrOR!#q@}T*FyzkJDrsy$ypyI$k`&ys6ou@!W{zW< z%q!0TM@cwDnu)%paqhncC7&OMxjLRyqG`?(cXE5STd=n)o((W71I2HccXKfI?H2_& zi!3;EC>sQ`;nn{WlG0g_F2C||gBv2V0({de;mYjl8$uixP2TGz$)h)3zbkS2Wc=2F z4-`Dz`QQH4YCK5APdYigXF&128I?FO3rTMnswzGO;ANj+TC&xoAn>cvhpWH*Pk^I| zaYKmH%X`R7Ded}g7DizA20j_3dr83#vn4vf$6Q0f48??<{&ug~ibdu@`LyJzrKV7RhH))$`>&hHgOwI;oRY^RM|PzXHDaO{g8y^;S=I zY(rAq6zl!6{Nhu3Ul{#w3+TRXyzX8C?pnIRJ1)>t6e}a+d9aI2v(RHzldShIpNQi& zQnqIIzs(P+LPN{~V?d<)S3I5M9>nP*sa&BIg;M2?bxi(vTUc15?PhC5zU#l}iZZ97 zbOtrAbBgoCp#s5-8~z?FOreF0&CQqk59Up4q|RUqfa&U#gg3JfMh_qkp+bitpwj*i zCcl-2=LVQ;Z=v}fJf`(O!-dH>^VjF}U_ zF$!=LRlD+ue_;*M_o|Ark{QiC>jb-PGCf>TsECSbk|p&MV^K!&+=tS398+qoN~uat zq?kem_pv`FF$9IE^C**BQnDtLSbHWN2l??{@ZJh5xE<_vXN#p`q-yWA4WZw>MU7nE zAoy?z3hdkf7}_l)NSds4NX?QPu&dMiFaG>+m$0gtJcXK-w&b9c&@H$=31R^6y|@XQ zGq1wJxXr*tSJl36aRSU4{w3(bKbbrdaQCE#9WG4Q9l~pJz?(7h;*_A*v_7(yphFaaa}j3fAFn;3sYz1RPBR5 zDUoj$%46oUN@=LHG$68T{?dCQ|Dv-nTau`NvIu=(-M6ZltBDTvr)S*`c%Q~erZ*Lt?8yH2;_w?pOH_N; za|&5g9o}EcN)|}yQi=ozAI98`)y2HOyTs#7_N>AO6+;7%Eomy`;TG%L&82}fL=G!djn&p2#iHMI4 zvo>F2?m}cr*|36H(q8*Z)E}O8xhIuzmu|1Y*=7tCqbh#Wxg0Y!6h6+8gO#c;+bD2hnyR%Bj0{dYs?I?MwprW^2D-_MDWZAaQ>Eu`x( zzuz?V*t6rmhky4h$p!OFu?z*=KaI}CVjKlqXaD|-IfkK#dySUQ+pe-Ivn99$f_eSS zdc~Nge~^Hy*O8jmyjMs6LGlhv4!?+PySMspZG()g#C~%uc=ZfCOEfDTj;Ap#WurPCGl1!ciFarVCM5wK@ zVhcKMamN6dD1k?$_{4;=1*Jk{*8+D}xJ+w|06SvmG~m>Hm!{c-8xXZxz->k=Qba(; zXag5*g++i31fSIcG?Eq^n%VX0Uk)>2Hb*1%z-ok)Be^kNr`L-&DeAZc(e|K Mr>mdKI;Vst0NB$II{*Lx literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im006.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im006.png new file mode 100644 index 0000000000000000000000000000000000000000..bdbb16f4c82afbc4b3d2fd09615bb285280348b6 GIT binary patch literal 17172 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 Q$$~;d?e49j8(94R0hr~os{jB1 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im007.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im007.png new file mode 100644 index 0000000000000000000000000000000000000000..574630028d8184a37590108f60b006705843ddc5 GIT binary patch literal 15747 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im009.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im009.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b41ac6489685071e420d527d4fbf592cdf8d87 GIT binary patch literal 18566 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 jY$BqYj+8z7&pdJCrl4cKGcNbP0l+XkK_3+%$ literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im010.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im010.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc64f1e699f2f5b997c0bce3f9ac428713e82e9 GIT binary patch literal 17481 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 M_RZ@hT6Q7-A5q9#uK)l5 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im011.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im011.png new file mode 100644 index 0000000000000000000000000000000000000000..965e3bac60e6fb21a89422c1a49b095b614c9c03 GIT binary patch literal 9981 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𝔇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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im012.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im012.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c4c3567051b5650302ff7d88fecfd139f3c35c GIT binary patch literal 8475 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 YnK`l(>%0T}p#f%d^0Z}@`Ncc`2aLrJa{vGU literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im013.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im013.png new file mode 100644 index 0000000000000000000000000000000000000000..7e50f88d9d5208f622ba0a47c0234fb4efb5338a GIT binary patch literal 9791 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 j^8YE`{M~Pd&fG;1{YGkT3$Cp>i6huu literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im014.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im014.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6c0da279d1f59eeed5bf12820626cfeccc5146 GIT binary patch literal 4626 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im016.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im016.png new file mode 100644 index 0000000000000000000000000000000000000000..27d395779d4dbf3bf559010e931190404705c5ba GIT binary patch literal 13302 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im017.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im017.png new file mode 100644 index 0000000000000000000000000000000000000000..af80cc9447fd940c45d9a7ffba6557da962770a4 GIT binary patch literal 34885 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%0Dg`+=5@zTCv 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im023.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im023.png new file mode 100644 index 0000000000000000000000000000000000000000..77a0922bd274533d4a48e6ffb9ae70a47693c2f3 GIT binary patch literal 15886 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 Y?5Hq)$ literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im024.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im024.png new file mode 100644 index 0000000000000000000000000000000000000000..f0fe205982087a0bb25cf87936022868f0f4a627 GIT binary patch literal 28196 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im025.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im025.png new file mode 100644 index 0000000000000000000000000000000000000000..ec2c79551fa34d88adf607d73041170b002a715f GIT binary patch literal 26032 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

fjq2_@(O6%}b*rXZ*~>UbPym00`DT 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 ZjB3qdbctbJjU#}6bTqGOl&IN0{C`U2LoWaT literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im027.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im027.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf93b43a495d06384e06e9db7e5f89a1ef54cd6 GIT binary patch literal 24356 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

%0?ay7+|6^snm)}`*SOxEZG9AUMV_|FfMnSkhB z(+aQ_Yv$hKCedjjnU`QI;>g}9+>xGpwn-yQciBe4aX|V*lo;gv*gFA*)Z!?F(=Gzn z0}1>S`0XnE!95|6hezzF!=V)cqJR%SqkqX!iO;^CG4{^^0~fX#Hjfg%-4+wa_U3XU z{F6zX@7T9Oy$@T)#0hd?O8%RUXp6m8XSHgsOo6?zJ4^!Lc@0l4z7qnTn)rvN?D1T@ z15>WiYGZ4%ap#mI^3#-L4QyL$att+Iao=s}<|x+Tq^Xy1l^{WoT~>ruZl=`Sc!!6N z^x|W83`T~-G<+ici|4Q!9PbWtPYl$xySt<`fzQ_ literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im029.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im029.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7d2486589cfcd64bc251a978800c809c83eb00 GIT binary patch literal 24648 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 Cej%~| literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/modeling_algos.md b/dox/user_guides/modeling_algos/modeling_algos.md index de4755097a..5ed722b265 100644 --- a/dox/user_guides/modeling_algos/modeling_algos.md +++ b/dox/user_guides/modeling_algos/modeling_algos.md @@ -3035,3 +3035,185 @@ Meshing covers a shape with a triangular mesh. Other than hidden line removal, y You can obtain information on the shape by first exploring it. To access triangulation of a face in the shape later, use *BRepTool::Triangulation*. To access a polygon, which is the approximation of an edge of the face, use *BRepTool::PolygonOnTriangulation*. + +@section occt_modalg_defeaturing 3D Model Defeaturing + +The Open CASCADE Technology Defeaturing algorithm is intended for removal of the unwanted parts or features from the model. These parts could be the holes, protrusions, gaps, chamfers, fillets etc. + +Feature detection is not performed, and all features desired for removal should be defined by the user. The input shape is not modified during Defeaturing, the new shape is built in the result. + +On the API level the Defeaturing algorithm is implemented in the *BRepAlgoAPI_Defeaturing* class. On the input the algorithm accepts the shape to remove the features from and the features (one or many) to remove from the shape. +Currently, the input shape should either be SOLID, or COMPSOLID, or COMPOUND of SOLIDs. +The features to remove are the sets of faces forming the features. It does not matter how the feature faces are given. It could be the separate faces or the collections of them. The faces should belong to the initial shape, and those that do not belong will be ignored. + +The actual features removal is performed by the low-level *BOPAlgo_RemoveFeatures* algorithm. On the API level, all the inputs are passed into the tool and the method *BOPAlgo_RemoveFeatures::Perform()* is called. + +Before starting Features removal all the faces requested for removal from the shape are sorted on the connected blocks - each block represents single feature to remove. +The features will be removed from the shape one by one, which will allow removing all possible features even if there were some problems with the removal of some of them (due to e.g. incorrect input data). + +The removed feature is filled by the extension of the faces adjacent to the feature. In general, the algorithm of removing of the single feature from the shape looks as follows: +* Find the faces adjacent to the feature; +* Extend the adjacent faces to cover the feature; +* Trim the extended faces by the bounds of original face (except for bounds common with the feature), so it will cover the feature only; +* Rebuild the solids with reconstructed adjacent faces avoiding the feature faces. + +If the single feature removal was successful, the result shape is overwritten with the new shape, otherwise the results are not kept, and the warning is given. +Either way the process continues with the next feature. + +The Defeaturing algorithm has the following options: +* History support; + +and the options available from base class (*BOPAlgo_Options*): +* Error/Warning reporting system; +* Parallel processing mode. + +Please note that the other options of the base class are not supported here and will have no effect. + +History support allows tracking modification of the input shape in terms of Modified, IsDeleted and Generated. By default, the history is collected, but it is possible to disable it using the method *TrackHistory(false)*. +On the low-level the history information is collected by the history tool *BRepTools_History*, which can be accessed through the method *BOPAlgo_RemoveFeatures::History()*. + +Error/Warning reporting system - allows obtaining the extended overview of the Errors/Warnings occurred during the operation. As soon as any error appears the algorithm stops working. The warnings allow continuing the job, informing the user that something went wrong. The algorithm returns the following errors/warnings: +* BOPAlgo_AlertUnsupportedType - the alert will be given as an error if the input shape does not contain any solids, and as a warning if the input shape contains not only solids, but also other shapes; +* BOPAlgo_AlertNoFacesToRemove - the error alert is given in case there are no faces to remove from the shape (nothing to do); +* BOPAlgo_AlertUnableToRemoveTheFeature - the warning alert is given to inform the user the removal of the feature is not possible. The algorithm will still try to remove the other features; +* BOPAlgo_AlertRemoveFeaturesFailed - the error alert is given in case if the operation was aborted by the unknown reason. + +For more information on the error/warning reporting system please see the chapter @ref occt_algorithms_ers "Errors and warnings reporting system" of Boolean operations user guide. + +Parallel processing mode - allows running the algorithm in parallel mode obtaining the result faster. + +The algorithm has certain limitations: +* Intersection of the surfaces of the connected faces adjacent to the feature should not be empty. It means, that such faces should not be tangent to each other. +If the intersection of the adjacent faces will be empty, the algorithm will be unable to trim the faces correctly and, most likely, the feature will not be removed. +* The algorithm does not process the INTERNAL parts of the solids, they are simply removed during reconstruction. + +Note, that for successful removal of the feature, the extended faces adjacent to the feature should cover the feature completely, otherwise the solids will not be rebuild. +Take a look at the simple shape on the image below: +@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im001.png,"",220} + +Removal of all three faces of the gap is not going to work, because there will be no face to fill the transverse part of the step. +Although, removal of only two faces, keeping one of the transverse faces, will fill the gap with the kept face: + + + + + +
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im002.png,"Keeping the right transverse face",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im003.png,"Keeping the left transverse face",220}
+ +@subsection occt_modalg_defeaturing_usage Usage + +Here is the example of usage of the *BRepAlgoAPI_Defeaturing* algorithm on the C++ level: +~~~~ +TopoDS_Shape aSolid = ...; // Input shape to remove the features from +TopTools_ListOfShape aFeatures = ...; // Features to remove from the shape +Standard_Boolean bRunParallel = ...; // Parallel processing mode +Standard_Boolean isHistoryNeeded = ...; // History support + +BRepAlgoAPI_Defeaturing aDF; // Defeaturing algorithm +aDF.SetShape(aSolid); // Set the shape +aDF.AddFacesToRemove(aFaces); // Add faces to remove +aDF.SetRunParallel(bRunParallel); // Define the processing mode (parallel or single) +aDF.TrackHistory(isHistoryNeeded); // Define whether to track the shapes modifications +aDF.Build(); // Perform the operation +if (!aDF.IsDone()) // Check for the errors +{ + // error treatment + Standard_SStream aSStream; + aDF.DumpErrors(aSStream); + return; +} +if (aDF.HasWarnings()) // Check for the warnings +{ + // warnings treatment + Standard_SStream aSStream; + aDF.DumpWarnings(aSStream); +} +const TopoDS_Shape& aResult = aDF.Shape(); // Result shape +~~~~ + +To track the history of a shape use the API history methods: +~~~~ +// Obtain modification of the shape +const TopTools_ListOfShape& BRepAlgoAPI_Defeaturing::Modified(const TopoDS_Shape& theS); + +// Obtain shapes generated from the shape +const TopTools_ListOfShape& BRepAlgoAPI_Defeaturing::Generated(const TopoDS_Shape& theS); + +// Check if the shape is removed or not +Standard_Boolean BRepAlgoAPI_Defeaturing::IsDeleted(const TopoDS_Shape& theS); +~~~~ + +For the usage of the Defeaturing algorithm on the Draw level the command removefeatures has been implemented. + +To track the history of a shape modification during Defeaturing the following commands can be used: +* rfmodified Shows the shapes modified from the input shape during Defeaturing. +* rfgenerated Shows the shapes generated from the input shape during Defeaturing. +* rfisdeleted Checks if the shape has been deleted during Defeaturing. + +For more details on commands above please refer the @ref occt_draw_defeaturing "Defeaturing commands" of the Draw test harness user guide. + +To have possibility to access the error/warning shapes of the operation use the *bdrawwarnshapes* command before running the algorithm (see command usage in the @ref occt_algorithms_ers "Errors and warnings reporting system" of Boolean operations user guide). + +@subsection occt_modalg_defeaturing_examples Examples + +Here are the few examples of defeaturing of the ANC101 model: + +@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im004.png,"ANC101 model",220} + + + + + + + + + + + + + + + + + + + + + + + + + + +
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im005.png,"Removing the cylindrical protrusion",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im006.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im007.png,"Removing the cylindrical holes",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im008.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im009.png,"Removing the cylindrical holes",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im010.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im011.png,"Removing the small gaps in the front",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im012.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im013.png,"Removing the gaps in the front completely",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im014.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im015.png,"Removing the cylindrical protrusion",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im016.png,"Result",220}
+ +Here are the few examples of defeaturing of the model containing boxes with blends: + +@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im017.png,"Box blend model",220} + + + + + + + + + + + + + + + + + + + + + + + + + + +
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im018.png,"Removing the blend",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im019.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im020.png,"Removing the blend",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im021.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im022.png,"Removing the blend",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im023.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im024.png,"Removing the blend",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im025.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im026.png,"Removing the blend",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im027.png,"Result",220}
@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im028.png,"Removing the blend",220}@figure{/user_guides/modeling_algos/images/modeling_algos_rf_im029.png,"Result",220}
diff --git a/src/BOPAlgo/BOPAlgo.msg b/src/BOPAlgo/BOPAlgo.msg index 673a39ec42..e6c22a306c 100644 --- a/src/BOPAlgo/BOPAlgo.msg +++ b/src/BOPAlgo/BOPAlgo.msg @@ -76,3 +76,15 @@ Warning: Building 2D curve of edge on face has failed .BOPAlgo_AlertAcquiredSelfIntersection Warning: Some sub-shapes of some of the argument become connected through other shapes and the argument became self-interfered + +.BOPAlgo_AlertUnsupportedType +Warning: Unsupported type of input shape + +.BOPAlgo_AlertUnableToRemoveTheFeature +Warning: Unable to remove the feature + +.BOPAlgo_AlertNoFacesToRemove +Error: No faces have been found for removal + +.BOPAlgo_AlertRemoveFeaturesFailed +Error: The Feature Removal algorithm has failed diff --git a/src/BOPAlgo/BOPAlgo_Alerts.hxx b/src/BOPAlgo/BOPAlgo_Alerts.hxx index 04ce9c7b4f..806184d0fd 100644 --- a/src/BOPAlgo/BOPAlgo_Alerts.hxx +++ b/src/BOPAlgo/BOPAlgo_Alerts.hxx @@ -88,4 +88,16 @@ DEFINE_ALERT_WITH_SHAPE(BOPAlgo_AlertBuildingPCurveFailed) //! other shapes and the argument became self-interfered DEFINE_ALERT_WITH_SHAPE(BOPAlgo_AlertAcquiredSelfIntersection) +//! Unsupported type of input shape +DEFINE_ALERT_WITH_SHAPE(BOPAlgo_AlertUnsupportedType) + +//! No faces have been found for removal +DEFINE_SIMPLE_ALERT(BOPAlgo_AlertNoFacesToRemove) + +//! Unable to remove the feature +DEFINE_ALERT_WITH_SHAPE(BOPAlgo_AlertUnableToRemoveTheFeature) + +//! The Feature Removal algorithm has failed +DEFINE_SIMPLE_ALERT(BOPAlgo_AlertRemoveFeaturesFailed) + #endif // _BOPAlgo_Alerts_HeaderFile diff --git a/src/BOPAlgo/BOPAlgo_BOPAlgo_msg.pxx b/src/BOPAlgo/BOPAlgo_BOPAlgo_msg.pxx index feec778809..6d3ff3882a 100644 --- a/src/BOPAlgo/BOPAlgo_BOPAlgo_msg.pxx +++ b/src/BOPAlgo/BOPAlgo_BOPAlgo_msg.pxx @@ -78,4 +78,16 @@ static const char BOPAlgo_BOPAlgo_msg[] = "Warning: Building 2D curve of edge on face has failed\n" "\n" ".BOPAlgo_AlertAcquiredSelfIntersection\n" - "Warning: Some sub-shapes of some of the argument become connected through other shapes and the argument became self-interfered\n"; + "Warning: Some sub-shapes of some of the argument become connected through other shapes and the argument became self-interfered\n" + "\n" + ".BOPAlgo_AlertUnsupportedType\n" + "Warning: Unsupported type of input shape\n" + "\n" + ".BOPAlgo_AlertUnableToRemoveTheFeature\n" + "Warning: Unable to remove the feature\n" + "\n" + ".BOPAlgo_AlertNoFacesToRemove\n" + "Error: No faces have been found for removal\n" + "\n" + ".BOPAlgo_AlertRemoveFeaturesFailed\n" + "Error: The Feature Removal algorithm has failed\n"; diff --git a/src/BOPAlgo/BOPAlgo_RemoveFeatures.cxx b/src/BOPAlgo/BOPAlgo_RemoveFeatures.cxx new file mode 100644 index 0000000000..7ca9aefa1f --- /dev/null +++ b/src/BOPAlgo/BOPAlgo_RemoveFeatures.cxx @@ -0,0 +1,1671 @@ +// Created by: Eugeny MALTCHIKOV +// Copyright (c) 2018 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include +#include + +#include +#include +#include +#include + +#include + + +//======================================================================= +// static methods declaration +//======================================================================= + +static void MakeRemoved(const TopTools_ListOfShape& theShapes, + BRepTools_History& theHistory, + const TopTools_IndexedMapOfShape& theKeepShapes = TopTools_IndexedMapOfShape()); + +static void FindInternals(const TopoDS_Shape& theS, + TopTools_ListOfShape& theLInt); + +static void RemoveInternalWires(const TopTools_ListOfShape& theShapes, + TopTools_ListOfShape* theRemoved = NULL); + +static void GetOriginalFaces(const TopoDS_Shape& theShape, + const TopTools_IndexedMapOfShape& theSolids, + const TopTools_MapOfShape& theFeatureFacesMap, + const TopTools_IndexedDataMapOfShapeListOfShape& theAdjFaces, + const Handle(BRepTools_History)& theHistory, + TopTools_IndexedMapOfShape& theFacesToBeKept, + TopTools_ListOfShape& theInternalShapes, + TopTools_MapOfShape& theFacesToCheckOri, + TopTools_IndexedMapOfShape& theSolidsToRebuild, + TopTools_ListOfShape& theSharedFaces, + TopTools_ListOfShape& theUnTouchedSolids); + +static void FindShape(const TopoDS_Shape& theSWhat, + const TopoDS_Shape& theSWhere, + TopoDS_Shape& theSFound); + +static void GetValidSolids(BOPAlgo_MakerVolume& theMV, + const TopTools_MapOfShape& theFacesToCheckOri, + const TopTools_ListOfShape& aSharedFaces, + const TopoDS_Shape& theOrigFaces, + const Standard_Integer theNbSol, + TopTools_ListOfShape& theLSRes, + TopTools_ListOfShape& theRemovedShapes); + +static void FindExtraShapes(const TopTools_IndexedDataMapOfShapeListOfShape& theConnectionMap, + const TopTools_MapOfShape& theShapesToCheckOri, + BOPAlgo_Builder& theBuilder, + TopTools_MapOfShape& theShapesToAvoid, + TopTools_MapOfShape* theValidShapes = NULL); + +static void AvoidExtraSharedFaces(TopTools_ListOfShape& theLSolids, + const TopTools_ListOfShape& theLFSharedToAvoid, + BOPAlgo_Builder& theBuilder, + TopTools_ListOfShape& theExtraFaces); + +static void FillSolidsHistory(const TopTools_IndexedMapOfShape& theSolIn, + TopTools_ListOfShape& theSolidsRes, + const TopTools_IndexedDataMapOfShapeListOfShape& theAdjFaces, + BOPAlgo_Builder& theBuilder, + BRepTools_History& theSolidsHistory); + +static void TakeModified(const TopoDS_Shape& theS, + BOPAlgo_Builder& theBuilder, + TopTools_ListOfShape& theList); + +static void TakeModified(const TopoDS_Shape& theS, + BOPAlgo_Builder& theBuilder, + TopTools_MapOfShape& theMap); + +static void FindSolid(const TopoDS_Shape& theSolIn, + const TopTools_ListOfShape& theSolidsRes, + const TopTools_IndexedDataMapOfShapeListOfShape& theAdjFaces, + BOPAlgo_Builder& theBuilder, + TopoDS_Shape& theSolOut); + + +//======================================================================= +// function: Perform +// purpose: Performs the removal of the requested faces from the input shape +//======================================================================= +void BOPAlgo_RemoveFeatures::Perform() +{ + try + { + OCC_CATCH_SIGNALS + + if (myTrackHistory) + myHistory = new BRepTools_History(); + + // Check the input data + CheckData(); + if (HasErrors()) + return; + + // Prepare the faces to remove. + PrepareFeatures(); + if (HasErrors()) + return; + + // Remove the features and fill the created gaps + RemoveFeatures(); + + // Update history with the removed features + UpdateHistory(); + + // Simplify the result + SimplifyResult(); + + // Post treatment + PostTreat(); + } + catch (Standard_Failure) + { + AddError(new BOPAlgo_AlertRemoveFeaturesFailed()); + } +} + +//======================================================================= +// function: CheckData +// purpose: Checks the input data on validity for the algorithm +//======================================================================= +void BOPAlgo_RemoveFeatures::CheckData() +{ + // Prepare the shape to work with + myShape = myInputShape; + + // Check the type of input shape + const TopAbs_ShapeEnum aType = myInputShape.ShapeType(); + + if (aType == TopAbs_SOLID || aType == TopAbs_COMPSOLID) + return; // OK + + if (aType == TopAbs_COMPOUND) + { + TopTools_ListOfShape aShapes; + TopTools_MapOfShape aMFence; + // Extract all shapes from the compound + BOPAlgo_Tools::TreatCompound(myInputShape, aMFence, aShapes); + if (aShapes.IsEmpty()) + { + // Add error of empty input shape + AddError(new BOPAlgo_AlertEmptyShape(myInputShape)); + return; + } + + // Find all solids in the list of shapes + TopTools_ListOfShape aSolids; + TopTools_ListOfShape anOtherShapes; + TopTools_ListIteratorOfListOfShape aIt(aShapes); + for (; aIt.More(); aIt.Next()) + { + const TopoDS_Shape& aS = aIt.Value(); + if (aS.ShapeType() == TopAbs_SOLID || aS.ShapeType() == TopAbs_COMPSOLID) + aSolids.Append(aS); + else + anOtherShapes.Append(aS); + } + + if (aSolids.IsEmpty()) + { + // No solids have been found for processing. + // Add error of unsupported type of input shape + AddError(new BOPAlgo_AlertTooFewArguments()); + } + else if (anOtherShapes.Extent() > 0) + { + // Add warning of unsupported type of input shape for all + // non-solid shapes, contained in the input shape + for (aIt.Initialize(anOtherShapes); aIt.More(); aIt.Next()) + { + AddWarning(new BOPAlgo_AlertUnsupportedType(aIt.Value())); + } + + // Collect all solids into compound and overwrite the shape to rebuild + TopoDS_Compound aCS; + BRep_Builder().MakeCompound(aCS); + for (aIt.Initialize(aSolids); aIt.More(); aIt.Next()) + BRep_Builder().Add(aCS, aIt.Value()); + + myShape = aCS; + + if (myTrackHistory) + { + // Make non solid shapes removed in the history + MakeRemoved(anOtherShapes, *myHistory.get()); + } + } + } + else + { + // Add error of unsupported type of input shape + AddError(new BOPAlgo_AlertTooFewArguments()); + } +} + +//======================================================================= +// function: PrepareFeatures +// purpose: Prepares the features to remove +//======================================================================= +void BOPAlgo_RemoveFeatures::PrepareFeatures() +{ + // Map all sub-shapes of the input solids + TopExp::MapShapes(myInputShape, myInputsMap); + + // Collect all faces of the input shape requested for removal + TopTools_ListOfShape aFacesToRemove; + TopTools_ListIteratorOfListOfShape aIt(myFacesToRemove); + for (; aIt.More(); aIt.Next()) + { + const TopoDS_Shape& aS = aIt.Value(); + TopExp_Explorer anExpF(aS, TopAbs_FACE); + for (; anExpF.More(); anExpF.Next()) + { + const TopoDS_Shape& aF = anExpF.Current(); + if (myInputsMap.Contains(aF)) + aFacesToRemove.Append(aF); + } + } + + if (aFacesToRemove.IsEmpty()) + { + // Add error, that no features to remove have been found + AddError(new BOPAlgo_AlertNoFacesToRemove()); + return; + } + + // Build connexity blocks of the faces to remove + TopoDS_Compound aCFToRemove; + BRep_Builder().MakeCompound(aCFToRemove); + for (aIt.Initialize(aFacesToRemove); aIt.More(); aIt.Next()) + BRep_Builder().Add(aCFToRemove, aIt.Value()); + + // Fill the list of features with connexity blocks of faces + BOPTools_AlgoTools::MakeConnexityBlocks(aCFToRemove, TopAbs_EDGE, TopAbs_FACE, myFeatures); +} + +//======================================================================= +// Adjacent faces extension block + +//======================================================================= +// class: FillGaps +// purpose: Auxiliary class for creation of the faces for filling the gap +// created by removal of the single feature +//======================================================================= +class FillGap +{ +public: //! @name Constructors + + //! Empty constructor + FillGap() : + myRunParallel(Standard_False), + myHasAdjacentFaces(Standard_False) + {} + +public: //! @name Setters/Getters + + //! Sets the feature to remove + void SetFeature(const TopoDS_Shape& theFeature) { myFeature = theFeature; } + + //! Returns the feature + const TopoDS_Shape& Feature() const { return myFeature; } + + //! Sets the EF connection map + void SetEFConnectionMap(const TopTools_IndexedDataMapOfShapeListOfShape& theEFMap) + { + myEFMap = (TopTools_IndexedDataMapOfShapeListOfShape*)&theEFMap; + } + + //! Sets the FS connection map + void SetFSConnectionMap(const TopTools_IndexedDataMapOfShapeListOfShape& theFSMap) + { + myFSMap = (TopTools_IndexedDataMapOfShapeListOfShape*)&theFSMap; + } + + //! Defines the parallel processing mode + void SetRunParallel(const Standard_Boolean bRunParallel) { myRunParallel = bRunParallel; } + + //! Gets the History object + const Handle(BRepTools_History)& History() + { + return myHistory; + } + +public: //! @name Perform the operation + + //! Performs the extension of the adjacent faces and + //! then trims the extended faces to fill the gaps + void Perform() + { + OCC_CATCH_SIGNALS + + try + { + myHistory = new BRepTools_History(); + + // Find the faces adjacent to the faces of the feature + TopTools_IndexedMapOfShape aMFAdjacent; + FindAdjacentFaces(aMFAdjacent); + + myHasAdjacentFaces = (aMFAdjacent.Extent() > 0); + if (!myHasAdjacentFaces) + return; + + // Extend the adjacent faces keeping the connection to the original faces + TopTools_IndexedDataMapOfShapeShape aFaceExtFaceMap; + ExtendAdjacentFaces(aMFAdjacent, aFaceExtFaceMap); + + // Trim the extended faces + TrimExtendedFaces(aFaceExtFaceMap); + } + catch (Standard_Failure) + { + // Make sure the warning will be given on the higher level + myHasAdjacentFaces = Standard_True; + myFaces.Clear(); + } + } + +public: //! @name Obtain the result + + //! Returns the map of faces of the feature + const TopTools_MapOfShape& FeatureFacesMap() const { return myFeatureFacesMap; } + + //! Shows whether the adjacent faces have been found for the feature + Standard_Boolean HasAdjacentFaces() const { return myHasAdjacentFaces; } + + //! Returns the Images map of the adjacent faces + const TopTools_IndexedDataMapOfShapeListOfShape& Faces() const { return myFaces; } + + //! Returns the initial solids participating in the feature removal + const TopTools_IndexedMapOfShape& Solids() const { return mySolids; } + + +private: //! @name Private methods performing the operation + + //! Finds the faces adjacent to the feature and stores them into outgoing map. + void FindAdjacentFaces(TopTools_IndexedMapOfShape& theMFAdjacent) + { + // Map the faces of the feature to avoid them in the map of adjacent faces + TopoDS_Iterator aIt(myFeature); + for (; aIt.More(); aIt.Next()) + myFeatureFacesMap.Add(aIt.Value()); + + // Find faces adjacent to the feature using the connection map + aIt.Initialize(myFeature); + for (; aIt.More(); aIt.Next()) + { + const TopoDS_Shape& aF = aIt.Value(); + TopExp_Explorer anExpE(aF, TopAbs_EDGE); + for (; anExpE.More(); anExpE.Next()) + { + const TopoDS_Shape& aE = anExpE.Current(); + const TopTools_ListOfShape* pAdjacentFaces = myEFMap->Seek(aE); + if (pAdjacentFaces) + { + TopTools_ListIteratorOfListOfShape itLFA(*pAdjacentFaces); + for (; itLFA.More(); itLFA.Next()) + { + const TopoDS_Shape& anAF = itLFA.Value(); + if (!myFeatureFacesMap.Contains(anAF)) + theMFAdjacent.Add(anAF); + } + } + } + // Find solids containing the feature face + const TopTools_ListOfShape* pLS = myFSMap->Seek(aF); + if (pLS) + { + TopTools_ListIteratorOfListOfShape itLS(*pLS); + for (; itLS.More(); itLS.Next()) + mySolids.Add(itLS.Value()); + } + } + + // Find solids containing the edges of adjacent faces + const Standard_Integer aNbFA = theMFAdjacent.Extent(); + for (Standard_Integer i = 1; i <= aNbFA; ++i) + { + TopExp_Explorer anExpEA(theMFAdjacent(i), TopAbs_EDGE); + for (; anExpEA.More(); anExpEA.Next()) + { + // Faces adjacent to the face adjacent to the feature + const TopTools_ListOfShape* pLFAA = myEFMap->Seek(anExpEA.Current()); + if (pLFAA) + { + TopTools_ListIteratorOfListOfShape itLFAA(*pLFAA); + for (; itLFAA.More(); itLFAA.Next()) + { + // Solids containing the faces + const TopTools_ListOfShape* pLS = myFSMap->Seek(itLFAA.Value()); + if (pLS) + { + TopTools_ListIteratorOfListOfShape itLS(*pLS); + for (; itLS.More(); itLS.Next()) + mySolids.Add(itLS.Value()); + } + } + } + } + } + } + + //! Extends the found adjacent faces and binds them to the original faces. + void ExtendAdjacentFaces(const TopTools_IndexedMapOfShape& theMFAdjacent, + TopTools_IndexedDataMapOfShapeShape& theFaceExtFaceMap) + { + // Get the extension value for the faces - half of the diagonal of bounding box of the feature + Bnd_Box aFeatureBox; + BRepBndLib::Add(myFeature, aFeatureBox); + + const Standard_Real anExtLength = sqrt(aFeatureBox.SquareExtent()); + + const Standard_Integer aNbFA = theMFAdjacent.Extent(); + for (Standard_Integer i = 1; i <= aNbFA; ++i) + { + const TopoDS_Face& aF = TopoDS::Face(theMFAdjacent(i)); + // Extend the face + TopoDS_Face aFExt; + BRepLib::ExtendFace(aF, anExtLength, + Standard_True, Standard_True, + Standard_True, Standard_True, + aFExt); + theFaceExtFaceMap.Add(aF, aFExt); + myHistory->AddModified(aF, aFExt); + } + } + + //! Trims the extended adjacent faces by intersection with each other + //! and following intersection with the bounds of original faces. + void TrimExtendedFaces(const TopTools_IndexedDataMapOfShapeShape& theFaceExtFaceMap) + { + // Intersect the extended faces first + BOPAlgo_Builder aGFInter; + // Add faces for intersection + const Standard_Integer aNbF = theFaceExtFaceMap.Extent(); + for (Standard_Integer i = 1; i <= aNbF; ++i) + aGFInter.AddArgument(theFaceExtFaceMap(i)); + + aGFInter.SetRunParallel(myRunParallel); + + // Intersection result + TopoDS_Shape anIntResult; + if (aGFInter.Arguments().Extent() > 1) + { + aGFInter.Perform(); + if (aGFInter.HasErrors()) + return; + + anIntResult = aGFInter.Shape(); + + myHistory->Merge(aGFInter.Arguments(), aGFInter); + } + else + anIntResult = aGFInter.Arguments().First(); + + // Prepare the EF map of the extended faces after intersection + // to select from them only boundary edges + TopTools_IndexedDataMapOfShapeListOfShape anEFExtMap; + TopExp::MapShapesAndAncestors(anIntResult, TopAbs_EDGE, TopAbs_FACE, anEFExtMap); + + // Get the splits of the extended faces after intersection + // and trim them by the edges of the original faces + + // Map the edges of the Feature to avoid them during the trim + TopTools_IndexedMapOfShape aFeatureEdgesMap; + TopExp::MapShapes(myFeature, TopAbs_EDGE, aFeatureEdgesMap); + + for (Standard_Integer i = 1; i <= aNbF; ++i) + { + const TopoDS_Face& aFOriginal = TopoDS::Face(theFaceExtFaceMap.FindKey(i)); + const TopoDS_Face& aFExt = TopoDS::Face(theFaceExtFaceMap(i)); + TrimFace(aFExt, aFOriginal, aFeatureEdgesMap, anEFExtMap, aGFInter); + } + } + + //! Trim the extended faces by the bounds of the original face, + //! except those contained in the feature to remove. + void TrimFace(const TopoDS_Face& theFExt, + const TopoDS_Face& theFOriginal, + const TopTools_IndexedMapOfShape& theFeatureEdgesMap, + const TopTools_IndexedDataMapOfShapeListOfShape& theEFExtMap, + BOPAlgo_Builder& theGFInter) + { + // Map all edges of the extended face, to filter the result of trim + // from the faces containing these edges + TopTools_MapOfShape aMExtEdges; + TopExp_Explorer anExpE(theFExt, TopAbs_EDGE); + for (; anExpE.More(); anExpE.Next()) + { + const TopoDS_Edge& aE = TopoDS::Edge(anExpE.Current()); + // skip degenerated and seam edges + if (BRep_Tool::Degenerated(aE) || BRep_Tool::IsClosed(aE, theFExt)) + continue; + TopTools_ListOfShape aLEIm; + TakeModified(aE, theGFInter, aLEIm); + TopTools_ListIteratorOfListOfShape itLEIm(aLEIm); + for (; itLEIm.More(); itLEIm.Next()) + { + const TopoDS_Shape& aEIm = itLEIm.Value(); + if (theEFExtMap.FindFromKey(aEIm).Extent() == 1) + aMExtEdges.Add(aEIm); + } + } + + // Trimming tool + BOPAlgo_Builder aGFTrim; + + // Get the splits of the face and add them for trimming + TopTools_ListOfShape anExtSplits; + TakeModified(theFExt, theGFInter, anExtSplits); + aGFTrim.SetArguments(anExtSplits); + + // Add edges of the original faces + TopTools_MapOfShape aMEdgesToCheckOri; + anExpE.Init(theFOriginal, TopAbs_EDGE); + for (; anExpE.More(); anExpE.Next()) + { + const TopoDS_Edge& aE = TopoDS::Edge(anExpE.Current()); + if (!theFeatureEdgesMap.Contains(aE)) + { + aGFTrim.AddArgument(aE); + if (!BRep_Tool::Degenerated(aE) && + !BRep_Tool::IsClosed(aE, theFOriginal)) + { + if (!aMEdgesToCheckOri.Add(aE)) + aMEdgesToCheckOri.Remove(aE); + } + } + } + + // Avoid faces intersection + aGFTrim.SetGlue(BOPAlgo_GlueShift); + aGFTrim.SetRunParallel(myRunParallel); + aGFTrim.SetNonDestructive(Standard_True); + + aGFTrim.Perform(); + if (aGFTrim.HasErrors()) + return; + + // Get all splits + const TopoDS_Shape& aSplits = aGFTrim.Shape(); + // Filter the trimmed faces and save the valid ones into result map + TopTools_ListOfShape aLFTrimmed; + + TopExp_Explorer anExpF(aSplits, TopAbs_FACE); + for (; anExpF.More(); anExpF.Next()) + { + const TopoDS_Shape& aSp = anExpF.Current(); + anExpE.Init(aSp, TopAbs_EDGE); + for (; anExpE.More(); anExpE.Next()) + { + if (aMExtEdges.Contains(anExpE.Current())) + break; + } + if (!anExpE.More()) + aLFTrimmed.Append(aSp); + } + + if (aLFTrimmed.Extent() > 1) + { + // Chose the correct faces - the ones that contains edges with proper + // bi-normal direction + TopTools_IndexedDataMapOfShapeListOfShape anEFMap; + TopTools_ListIteratorOfListOfShape itLF(aLFTrimmed); + for (; itLF.More(); itLF.Next()) + TopExp::MapShapesAndAncestors(itLF.Value(), TopAbs_EDGE, TopAbs_FACE, anEFMap); + + // Check edges orientations + TopTools_MapOfShape aFacesToAvoid, aValidFaces; + FindExtraShapes(anEFMap, aMEdgesToCheckOri, aGFTrim, aFacesToAvoid, &aValidFaces); + + if (aLFTrimmed.Extent() - aFacesToAvoid.Extent() > 1) + { + // It is possible that the splits are forming the different blocks. + // Take only those containing the valid faces. + TopoDS_Compound aCF; + BRep_Builder().MakeCompound(aCF); + itLF.Initialize(aLFTrimmed); + for (; itLF.More(); itLF.Next()) + { + if (!aFacesToAvoid.Contains(itLF.Value())) + BRep_Builder().Add(aCF, itLF.Value()); + } + + TopTools_ListOfShape aLCB; + BOPTools_AlgoTools::MakeConnexityBlocks(aCF, TopAbs_EDGE, TopAbs_FACE, aLCB); + if (aLCB.Extent() > 1) + { + TopTools_ListIteratorOfListOfShape itLCB(aLCB); + for (; itLCB.More(); itLCB.Next()) + { + // Check if the block contains any valid faces + const TopoDS_Shape& aCB = itLCB.Value(); + TopoDS_Iterator itF(aCB); + for (; itF.More(); itF.Next()) + { + if (aValidFaces.Contains(itF.Value())) + break; + } + if (!itF.More()) + { + // Invalid block + for (itF.Initialize(aCB); itF.More(); itF.Next()) + aFacesToAvoid.Add(itF.Value()); + } + } + } + } + + itLF.Initialize(aLFTrimmed); + for (; itLF.More();) + { + if (aFacesToAvoid.Contains(itLF.Value())) + aLFTrimmed.Remove(itLF); + else + itLF.Next(); + } + } + else if (aLFTrimmed.IsEmpty()) + { + // Use all splits, including those having the bounds of extended face + anExpF.ReInit(); + for (; anExpF.More(); anExpF.Next()) + aLFTrimmed.Append(anExpF.Current()); + } + + if (aLFTrimmed.Extent()) + { + // Remove the internal edges and vertices from the faces + RemoveInternalWires(aLFTrimmed); + + myFaces.Add(theFOriginal, aLFTrimmed); + } + + // Update history after intersection of the extended face with bounds + myHistory->Merge(aGFTrim.Arguments(), aGFTrim); + + // Update history with all removed shapes + BRepTools_History aHistRem; + + // Map of the result splits + TopTools_IndexedMapOfShape aResMap; + TopTools_ListIteratorOfListOfShape itLF(aLFTrimmed); + for (; itLF.More(); itLF.Next()) + TopExp::MapShapes(itLF.Value(), aResMap); + + TopTools_ListOfShape aLSplits; + aLSplits.Append(aSplits); + + // Update the history with removed shapes + MakeRemoved(aLSplits, aHistRem, aResMap); + myHistory->Merge(aHistRem); + } + +private: //! @name Fields + + // Inputs + Standard_Boolean myRunParallel; //!< Defines the mode of processing of the single feature + TopoDS_Shape myFeature; //!< Feature to remove + TopTools_IndexedDataMapOfShapeListOfShape* myEFMap; //!< EF Connection map to find adjacent faces + TopTools_IndexedDataMapOfShapeListOfShape* myFSMap; //!< FS Connection map to find solids participating in the feature removal + + // Results + TopTools_MapOfShape myFeatureFacesMap; //!< Faces of the feature + Standard_Boolean myHasAdjacentFaces; //!< Flag to show whether the adjacent faces have been found or not + TopTools_IndexedMapOfShape mySolids; //!< Solids participating in the feature removal + TopTools_IndexedDataMapOfShapeListOfShape myFaces; //!< Reconstructed adjacent faces + Handle(BRepTools_History) myHistory; //!< History of the adjacent faces reconstruction +}; + +typedef NCollection_Vector VectorOfFillGap; + +typedef BOPTools_Functor FillGapFunctor; + +typedef BOPTools_Cnt FillGapCnt; + +//======================================================================= + +//======================================================================= +// function: RemoveFeatures +// purpose: Remove features by filling the gaps by extension of the +// adjacent faces +//======================================================================= +void BOPAlgo_RemoveFeatures::RemoveFeatures() +{ + // For each feature: + // - Find the faces adjacent to the feature; + // - Extend the adjacent faces; + // - Trim the extended faces to fill the gap; + // - Rebuild the solids with reconstructed adjacent faces + // and avoiding the feature faces. + + // Make Edge-Face connection map of the input + // shape to find faces adjacent to the feature + TopTools_IndexedDataMapOfShapeListOfShape anEFMap; + TopExp::MapShapesAndAncestors(myInputShape, TopAbs_EDGE, TopAbs_FACE, anEFMap); + + // Make Face-Solid connection map to find the solids + // participating in the removal of each feature + TopTools_IndexedDataMapOfShapeListOfShape anFSMap; + TopExp::MapShapesAndAncestors(myInputShape, TopAbs_FACE, TopAbs_SOLID, anFSMap); + + // Tool for reconstruction of the faces adjacent to the feature + // in parallel threads if necessary. + VectorOfFillGap aVFG; + // Fill the vector + TopTools_ListIteratorOfListOfShape itF(myFeatures); + for (; itF.More(); itF.Next()) + { + const TopoDS_Shape& aFeature = itF.Value(); + FillGap& aFG = aVFG.Appended(); + aFG.SetFeature(aFeature); + aFG.SetEFConnectionMap(anEFMap); + aFG.SetFSConnectionMap(anFSMap); + aFG.SetRunParallel(myRunParallel); + } + + // Perform the reconstruction of the adjacent faces + FillGapCnt::Perform(myRunParallel, aVFG); + + // Even if the history is not requested, it is necessary to track: + // - The solids modification after each feature removal to find + // the necessary solids to rebuild on the next step. + // - The faces modification after each feature removal to find the + // splits of the adjacent and feature faces for the next steps. + if (myHistory.IsNull()) + myHistory = new BRepTools_History(); + + // Remove the features one by one. + // It will allow removing the features even if there were + // some problems with removal of the previous features. + const Standard_Integer aNbF = aVFG.Length(); + for (Standard_Integer i = 0; i < aNbF; ++i) + { + FillGap& aFG = aVFG(i); + + // No need to fill the history for solids if the history is not + // requested and the current feature is the last one. + Standard_Boolean isSolidsHistoryNeeded = myTrackHistory || (i < (aNbF - 1)); + + // Perform removal of the single feature + RemoveFeature(aFG.Feature(), aFG.Solids(), aFG.FeatureFacesMap(), + aFG.HasAdjacentFaces(), aFG.Faces(), aFG.History(), + isSolidsHistoryNeeded); + } +} + +//======================================================================= +// function: RemoveFeature +// purpose: Remove the single feature +//======================================================================= +void BOPAlgo_RemoveFeatures::RemoveFeature + (const TopoDS_Shape& theFeature, + const TopTools_IndexedMapOfShape& theSolids, + const TopTools_MapOfShape& theFeatureFacesMap, + const Standard_Boolean theHasAdjacentFaces, + const TopTools_IndexedDataMapOfShapeListOfShape& theAdjFaces, + const Handle(BRepTools_History)& theAdjFacesHistory, + const Standard_Boolean theSolidsHistoryNeeded) +{ + Standard_Boolean bFuseShapes = Standard_True; + const Standard_Integer aNbAF = theAdjFaces.Extent(); + if (aNbAF == 0) + { + if (theHasAdjacentFaces) + { + // The adjacent faces have been found for the feature, + // but something went wrong during their rebuilding. + // Add error + AddWarning(new BOPAlgo_AlertUnableToRemoveTheFeature(theFeature)); + return; + } + + // No adjacent faces have been found for the feature. + // Most likely, the intention is to remove some internal part of the shape. + // We just have to rebuild the shape without the feature, no fuse is necessary. + bFuseShapes = Standard_False; + } + + // Rebuild the shape using MakerVolume algorithm avoiding the faces of the + // feature and replacing the adjacent faces with their images + + BRep_Builder aBB; + + // From the faces of input shape build map of faces with which the result will be validated: + // - all non-internal faces of the input shape (except for adjacent and feature faces) + // must have some trace in the result solids; + // - all adjacent faces (if any) must have some trace in the result solids. + TopTools_IndexedMapOfShape aFacesToBeKept; + // Build also the map of faces to compare orientation of the original and result faces + TopTools_MapOfShape aFacesToCheckOri; + + // Collect list of internal entities of the input shape to be avoided in result + // and to make them removed in the history. + TopTools_ListOfShape anInternalShapes; + + // In the feature removal will participate only the solids connected to the feature + // or the faces adjacent to the feature. + + // Solids to be rebuilt after the feature removal + TopTools_IndexedMapOfShape aSolidsToRebuild; + // Find faces shared between solids + TopTools_ListOfShape aSharedFaces; + // Solids to be avoided in the feature removal and added into result directly + TopTools_ListOfShape anUnTouchedSolids; + + // Prepare to the feature removal - fill all necessary containers + GetOriginalFaces(myShape, theSolids, theFeatureFacesMap, theAdjFaces, myHistory, + aFacesToBeKept, anInternalShapes, aFacesToCheckOri, + aSolidsToRebuild, aSharedFaces, anUnTouchedSolids); + + // To avoid excessive intersection of the faces collect the faces + // of the input shape into a compound + TopoDS_Compound anOrigF; + aBB.MakeCompound(anOrigF); + Standard_Integer aNbFK = aFacesToBeKept.Extent(); + for (Standard_Integer i = 1; i <= aNbFK; ++i) + aBB.Add(anOrigF, aFacesToBeKept(i)); + + // Tool for solids reconstruction + BOPAlgo_MakerVolume aMV; + aMV.SetRunParallel(myRunParallel); + aMV.SetAvoidInternalShapes(Standard_True); + aMV.SetIntersect(bFuseShapes); + aMV.SetNonDestructive(Standard_True); + // Add faces of the input shape + aMV.AddArgument(anOrigF); + + // Add reconstructed adjacent faces + for (Standard_Integer i = 1; i <= aNbAF; ++i) + { + const TopTools_ListOfShape& aLFA = theAdjFaces(i); + if (aLFA.Extent() == 1) + { + const TopoDS_Shape& aFA = aLFA.First(); + aMV.AddArgument(aFA); + aFacesToBeKept.Add(aFA); + } + else + { + // To avoid intersection among the images, collect them into compound + TopoDS_Compound anAdjF; + aBB.MakeCompound(anAdjF); + TopTools_ListIteratorOfListOfShape itLFA(aLFA); + for (; itLFA.More(); itLFA.Next()) + aBB.Add(anAdjF, itLFA.Value()); + + aMV.AddArgument(anAdjF); + aFacesToBeKept.Add(anAdjF); + } + + if (myTrackHistory) + { + // Look for internal edges in the original adjacent faces + const TopoDS_Shape& aFOr = theAdjFaces.FindKey(i); + FindInternals(aFOr, anInternalShapes); + } + } + + // Build solids + aMV.Perform(); + if (aMV.HasErrors()) + { + // Add warning for the feature + AddWarning(new BOPAlgo_AlertUnableToRemoveTheFeature(theFeature)); + return; + } + + // Result of MV operation + const TopoDS_Shape& aSolids = aMV.Shape(); + TopExp_Explorer anExpS(aSolids, TopAbs_SOLID); + if (!anExpS.More()) + { + // No solids have been built - add warning for the feature + AddWarning(new BOPAlgo_AlertUnableToRemoveTheFeature(theFeature)); + return; + } + + // Now, it is necessary to: + // - Validate the result by checking faces of the map + // to have some parts kept in the resulting solids; + // - Remove the solids possibly filling the holes in the original shapes; + // - Update history with the history of MakerVolume algorithm. + + // Splits of adjacent faces from previous runs + TopTools_MapOfShape anAdjFacesSplits; + for (Standard_Integer i = 1; i <= aNbAF; ++i) + { + const TopoDS_Shape& aF = theAdjFaces.FindKey(i); + const TopTools_ListOfShape& aLFIm = myHistory->Modified(aF); + if (aLFIm.IsEmpty()) + anAdjFacesSplits.Add(aF); + else + { + TopTools_ListIteratorOfListOfShape itLFIm(aLFIm); + for (; itLFIm.More(); itLFIm.Next()) + anAdjFacesSplits.Add(itLFIm.Value()); + } + } + + // Validate the result + Standard_Boolean bValid = Standard_True; + aNbFK = aFacesToBeKept.Extent(); + for (Standard_Integer i = 1; i <= aNbFK && bValid; ++i) + { + const TopoDS_Shape& aS = aFacesToBeKept(i); + if (anAdjFacesSplits.Contains(aS)) + continue; + TopExp_Explorer anExpF(aS, TopAbs_FACE); + for (; anExpF.More(); anExpF.Next()) + { + const TopoDS_Shape& aF = anExpF.Current(); + if (!aMV.IsDeleted(aF)) + break; + } + bValid = anExpF.More(); + } + + if (!bValid) + { + // Add warning for the feature + AddWarning(new BOPAlgo_AlertUnableToRemoveTheFeature(theFeature)); + return; + } + + // It is possible that the result of MakerVolume operation contains + // some extra solids. Get only correct solids. + TopTools_ListOfShape aLSRes; + // Remember the removed shapes + TopTools_ListOfShape aRemovedShapes; + GetValidSolids(aMV, aFacesToCheckOri, aSharedFaces, anOrigF, theSolids.Extent(), aLSRes, aRemovedShapes); + + if (aLSRes.Extent() != theSolids.Extent()) + { + // Add warning for the feature + AddWarning(new BOPAlgo_AlertUnableToRemoveTheFeature(theFeature)); + return; + } + + // Remove internal wires from the faces, possibly appeared after intersection + RemoveInternalWires(aLSRes, &anInternalShapes); + + // Update history with: + // History of adjacent faces reconstruction + myHistory->Merge(theAdjFacesHistory); + // History of intersection + myHistory->Merge(aMV.Arguments(), aMV); + + if (myTrackHistory) + { + // Map the result to check if the shape is removed + TopTools_IndexedMapOfShape aMSRes; + TopTools_ListIteratorOfListOfShape itLS(aLSRes); + for (; itLS.More(); itLS.Next()) + TopExp::MapShapes(itLS.Value(), aMSRes); + + // Remove internal shapes and extra faces + BRepTools_History aRemHist; + anInternalShapes.Append(aRemovedShapes); + MakeRemoved(anInternalShapes, aRemHist, aMSRes); + myHistory->Merge(aRemHist); + } + + // Fill the history for the solids + if (theSolidsHistoryNeeded) + { + BRepTools_History aSolidsHistory; + FillSolidsHistory(aSolidsToRebuild, aLSRes, theAdjFaces, aMV, aSolidsHistory); + myHistory->Merge(aSolidsHistory); + } + + TopoDS_Compound aCRes; + aBB.MakeCompound(aCRes); + // Add reconstructed solids + TopTools_ListIteratorOfListOfShape itLS(aLSRes); + for (; itLS.More(); itLS.Next()) + aBB.Add(aCRes, itLS.Value()); + + // Add unmodified solids + itLS.Initialize(anUnTouchedSolids); + for (; itLS.More(); itLS.Next()) + aBB.Add(aCRes, itLS.Value()); + + // Save the result + myShape = aCRes; +} + +//======================================================================= +// function: UpdateHistory +// purpose: Update history with the removed features +//======================================================================= +void BOPAlgo_RemoveFeatures::UpdateHistory() +{ + if (!myTrackHistory) + return; + + // Map the result + TopExp::MapShapes(myShape, myResultMap); + + // Update the history + BRepTools_History aHistory; + + const Standard_Integer aNbS = myInputsMap.Extent(); + for (Standard_Integer i = 1; i <= aNbS; ++i) + { + const TopoDS_Shape& aS = myInputsMap(i); + if (!BRepTools_History::IsSupportedType(aS)) + continue; + + if (myHistory->IsRemoved(aS)) + continue; + + // Check if the shape has any trace in the result + const TopTools_ListOfShape& aLSIm = myHistory->Modified(aS); + if (aLSIm.IsEmpty()) + { + if (!myResultMap.Contains(aS)) + aHistory.Remove(aS); + } + + TopTools_ListIteratorOfListOfShape itLSIm(aLSIm); + for (; itLSIm.More(); itLSIm.Next()) + { + if (!myResultMap.Contains(itLSIm.Value())) + aHistory.Remove(itLSIm.Value()); + } + } + + myHistory->Merge(aHistory); +} + +//======================================================================= +// function: SimplifyResult +// purpose: Simplifies the result by removing extra edges and vertices +// created during operation +//======================================================================= +void BOPAlgo_RemoveFeatures::SimplifyResult() +{ + if (myShape.IsSame(myInputShape)) + return; + ShapeUpgrade_UnifySameDomain aSDTool; + aSDTool.Initialize(myShape, Standard_True, Standard_True); + // Do not allow producing internal edges + aSDTool.AllowInternalEdges(Standard_False); + // Avoid removal of the input edges and vertices + if (myResultMap.IsEmpty()) + TopExp::MapShapes(myShape, myResultMap); + + const Standard_Integer aNbS = myInputsMap.Extent(); + for (Standard_Integer i = 1; i <= aNbS; ++i) + { + if (myResultMap.Contains(myInputsMap(i))) + aSDTool.KeepShape(myInputsMap(i)); + } + + // Perform unification + aSDTool.Build(); + myShape = aSDTool.Shape(); + if (myTrackHistory) + myHistory->Merge(aSDTool.History()); +} + +//======================================================================= +// function: PostTreat +// purpose: Restore the type of the initial shape +//======================================================================= +void BOPAlgo_RemoveFeatures::PostTreat() +{ + const TopAbs_ShapeEnum anInputType = myInputShape.ShapeType(); + const TopAbs_ShapeEnum aResType = myShape.ShapeType(); + if (aResType == anInputType) + return; + + TopExp_Explorer anExpS(myShape, TopAbs_SOLID); + + if (anInputType == TopAbs_SOLID) + { + myShape = anExpS.Current(); + return; + } + + TopoDS_Shape aRes; + if (anInputType == TopAbs_COMPOUND) + BRep_Builder().MakeCompound(TopoDS::Compound(aRes)); + else + BRep_Builder().MakeCompSolid(TopoDS::CompSolid(aRes)); + + for (; anExpS.More(); anExpS.Next()) + BRep_Builder().Add(aRes, anExpS.Current()); + + myShape = aRes; +} + +//======================================================================= +// static methods definition +//======================================================================= + +//======================================================================= +// function: MakeRemoved +// purpose: Makes the shapes in the list removed in the history. +// Keeps the shapes contained in the map. +//======================================================================= +void MakeRemoved(const TopTools_ListOfShape& theShapes, + BRepTools_History& theHistory, + const TopTools_IndexedMapOfShape& theKeepShapes) +{ + TopTools_IndexedMapOfShape aShapesMap; + TopTools_ListIteratorOfListOfShape it(theShapes); + for (; it.More(); it.Next()) + TopExp::MapShapes(it.Value(), aShapesMap); + + const Standard_Integer aNbS = aShapesMap.Extent(); + for (Standard_Integer i = 1; i <= aNbS; ++i) + { + const TopoDS_Shape& aS = aShapesMap(i); + if (!theKeepShapes.Contains(aS) && + BRepTools_History::IsSupportedType(aS)) + { + theHistory.Remove(aS); + } + } +} + +//======================================================================= +// function: FindInternals +// purpose: Looks for internal shapes inside the face or solid +//======================================================================= +void FindInternals(const TopoDS_Shape& theS, + TopTools_ListOfShape& theLInt) +{ + TopoDS_Iterator itS(theS); + for (; itS.More(); itS.Next()) + { + const TopoDS_Shape& aSS = itS.Value(); + if (aSS.Orientation() == TopAbs_INTERNAL) + theLInt.Append(aSS); + else + { + TopoDS_Iterator itSS(aSS); + for (; itSS.More(); itSS.Next()) + { + if (itSS.Value().Orientation() == TopAbs_INTERNAL) + { + theLInt.Append(aSS); + break; + } + } + } + } +} + +//======================================================================= +// function: RemoveInternalWires +// purpose: Removes internal wires from the faces +//======================================================================= +void RemoveInternalWires(const TopTools_ListOfShape& theShapes, + TopTools_ListOfShape *theRemoved) +{ + TopTools_ListIteratorOfListOfShape itLS(theShapes); + for (; itLS.More(); itLS.Next()) + { + const TopoDS_Shape& aShape = itLS.Value(); + TopExp_Explorer anExpF(aShape, TopAbs_FACE); + for (; anExpF.More(); anExpF.Next()) + { + TopoDS_Face& aF = *(TopoDS_Face*)&anExpF.Current(); + TopTools_ListOfShape aLWToRemove; + FindInternals(aF, aLWToRemove); + if (aLWToRemove.Extent()) + { + aF.Free(Standard_True); + TopTools_ListIteratorOfListOfShape itR(aLWToRemove); + for (; itR.More(); itR.Next()) + { + if (theRemoved) + theRemoved->Append(itR.Value()); + BRep_Builder().Remove(aF, itR.Value()); + } + aF.Free(Standard_False); + } + } + } +} + +//======================================================================= +// function: GetOriginalFaces +// purpose: Get original faces from my face +//======================================================================= +void GetOriginalFaces(const TopoDS_Shape& theShape, + const TopTools_IndexedMapOfShape& theSolids, + const TopTools_MapOfShape& theFeatureFacesMap, + const TopTools_IndexedDataMapOfShapeListOfShape& theAdjFaces, + const Handle(BRepTools_History)& theHistory, + TopTools_IndexedMapOfShape& theFacesToBeKept, + TopTools_ListOfShape& theInternalShapes, + TopTools_MapOfShape& theFacesToCheckOri, + TopTools_IndexedMapOfShape& theSolidsToRebuild, + TopTools_ListOfShape& theSharedFaces, + TopTools_ListOfShape& theUnTouchedSolids) +{ + // Use only solids which has to be reconstructed by the feature. + // All other solids should be avoided in the feature removal and added + // into result directly. + + // Update solids after removal of previous features + const Standard_Integer aNbSols = theSolids.Extent(); + for (Standard_Integer i = 1; i <= aNbSols; ++i) + { + const TopoDS_Shape& aSol = theSolids(i); + const TopTools_ListOfShape& aLFIm = theHistory->Modified(aSol); + if (aLFIm.IsEmpty()) + theSolidsToRebuild.Add(aSol); + else + theSolidsToRebuild.Add(aLFIm.First()); + } + + // Splits of the feature faces + TopTools_MapOfShape aFeatureFacesSplits; + TopTools_MapIteratorOfMapOfShape itM(theFeatureFacesMap); + for (; itM.More(); itM.Next()) + { + const TopoDS_Shape& aF = itM.Value(); + const TopTools_ListOfShape& aLFIm = theHistory->Modified(aF); + if (aLFIm.IsEmpty()) + aFeatureFacesSplits.Add(aF); + else + { + TopTools_ListIteratorOfListOfShape itLFIm(aLFIm); + for (; itLFIm.More(); itLFIm.Next()) + aFeatureFacesSplits.Add(itLFIm.Value()); + } + } + + TopExp_Explorer anExpS(theShape, TopAbs_SOLID); + for (; anExpS.More(); anExpS.Next()) + { + const TopoDS_Shape& aSol = anExpS.Current(); + + // Check if the solid has to be reconstructed + if (!theSolidsToRebuild.Contains(aSol)) + { + // untouched solid + theUnTouchedSolids.Append(aSol); + continue; + } + + TopoDS_Iterator itSh(aSol); + for (; itSh.More(); itSh.Next()) + { + const TopoDS_Shape& aSh = itSh.Value(); + if (aSh.ShapeType() != TopAbs_SHELL) + { + theInternalShapes.Append(aSh); + continue; + } + + TopoDS_Iterator itF(aSh); + for (; itF.More(); itF.Next()) + { + const TopoDS_Shape& aF = itF.Value(); + // Avoid the feature faces + if (aFeatureFacesSplits.Contains(aF)) + continue; + + // Avoid the adjacent faces + if (theAdjFaces.Contains(aF)) + continue; + + if (aF.Orientation() != TopAbs_INTERNAL) + { + theFacesToBeKept.Add(aF); + + if (!theFacesToCheckOri.Add(aF)) + { + theFacesToCheckOri.Remove(aF); + theSharedFaces.Append(aF); + } + } + else + theInternalShapes.Append(aSh); + } + } + } +} + +//======================================================================= +// function: FindShape +// purpose: Find the shape in the other shape +//======================================================================= +void FindShape(const TopoDS_Shape& theSWhat, + const TopoDS_Shape& theSWhere, + TopoDS_Shape& theSFound) +{ + TopExp_Explorer anExp(theSWhere, theSWhat.ShapeType()); + for (; anExp.More(); anExp.Next()) + { + const TopoDS_Shape& aS = anExp.Current(); + if (aS.IsSame(theSWhat)) + { + theSFound = aS; + break; + } + } +} + +//======================================================================= +// function: GetValidSolids +// purpose: Checks the validity of the solids and keeps only valid ones +//======================================================================= +void GetValidSolids(BOPAlgo_MakerVolume& theMV, + const TopTools_MapOfShape& theFacesToCheckOri, + const TopTools_ListOfShape& aSharedFaces, + const TopoDS_Shape& theOrigFaces, + const Standard_Integer theNbSol, + TopTools_ListOfShape& theLSRes, + TopTools_ListOfShape& theRemovedShapes) +{ + TopExp_Explorer anExpS(theMV.Shape(), TopAbs_SOLID); + for (; anExpS.More(); anExpS.Next()) + theLSRes.Append(anExpS.Current()); + + if (theLSRes.Extent() > theNbSol) + { + // Find Solids filling the holes in the initial shape + TopTools_MapOfShape aSolidsToAvoid; + TopTools_IndexedDataMapOfShapeListOfShape aFSMap; + TopExp::MapShapesAndAncestors(theMV.Shape(), TopAbs_FACE, TopAbs_SOLID, aFSMap); + FindExtraShapes(aFSMap, theFacesToCheckOri, theMV, aSolidsToAvoid); + + TopTools_ListIteratorOfListOfShape itLS(theLSRes); + for (; itLS.More(); ) + { + if (aSolidsToAvoid.Contains(itLS.Value())) + theLSRes.Remove(itLS); + else + itLS.Next(); + } + } + + if (theLSRes.Extent() > theNbSol) + { + // Check if the splits of the adjacent faces split the solids + AvoidExtraSharedFaces(theLSRes, aSharedFaces, theMV, theRemovedShapes); + } + + if (theLSRes.Extent() > theNbSol) + { + // Remove solids containing only the adjacent faces + TopTools_MapOfShape anOrigFacesRes; + TopExp_Explorer anExpF(theOrigFaces, TopAbs_FACE); + for (; anExpF.More(); anExpF.Next()) + TakeModified(anExpF.Current(), theMV, anOrigFacesRes); + + TopTools_ListIteratorOfListOfShape itLS(theLSRes); + for (; itLS.More(); ) + { + anExpF.Init(itLS.Value(), TopAbs_FACE); + for (; anExpF.More(); anExpF.Next()) + { + if (anOrigFacesRes.Contains(anExpF.Current())) + break; + } + if (!anExpF.More()) + { + theRemovedShapes.Append(itLS.Value()); + theLSRes.Remove(itLS); + } + else + itLS.Next(); + } + } +} + +//======================================================================= +// function: FindExtraShape +// purpose: Find shapes possibly filling the holes in the original shape +//======================================================================= +void FindExtraShapes(const TopTools_IndexedDataMapOfShapeListOfShape& theConnectionMap, + const TopTools_MapOfShape& theShapesToCheckOri, + BOPAlgo_Builder& theBuilder, + TopTools_MapOfShape& theShapesToAvoid, + TopTools_MapOfShape* theValidShapes) +{ + Handle(IntTools_Context) aCtx = theBuilder.Context(); + TopTools_MapOfShape aValidShapes; + TopTools_MapOfShape* pValidShapes = theValidShapes ? theValidShapes : &aValidShapes; + TopTools_MapIteratorOfMapOfShape itM(theShapesToCheckOri); + for (; itM.More(); itM.Next()) + { + const TopoDS_Shape& aSToCheckOri = itM.Value(); + // Check modification of the shape during intersection + TopTools_ListOfShape aLSIm; + TakeModified(aSToCheckOri, theBuilder, aLSIm); + + TopTools_ListIteratorOfListOfShape itLSIm(aLSIm); + for (; itLSIm.More(); itLSIm.Next()) + { + const TopoDS_Shape& aSIm = itLSIm.Value(); + + const TopTools_ListOfShape* pShapesToValidate = theConnectionMap.Seek(aSIm); + if (!pShapesToValidate) + continue; + + TopTools_ListIteratorOfListOfShape itSV(*pShapesToValidate); + for (; itSV.More(); itSV.Next()) + { + const TopoDS_Shape& aShapeToValidate = itSV.Value(); + if (pValidShapes->Contains(aShapeToValidate)) + continue; + + TopoDS_Face aSInShape; + FindShape(aSIm, aShapeToValidate, aSInShape); + + Standard_Boolean bSameOri = + !BOPTools_AlgoTools::IsSplitToReverse(aSInShape, aSToCheckOri, aCtx); + + if (bSameOri) + pValidShapes->Add(aShapeToValidate); + else + theShapesToAvoid.Add(aShapeToValidate); + } + } + } + + itM.Initialize(*pValidShapes); + for (; itM.More(); itM.Next()) + theShapesToAvoid.Remove(itM.Value()); +} + +//======================================================================= +// function: AvoidExtraSharedFaces +// purpose: Looks for the extra faces splitting the solids +//======================================================================= +void AvoidExtraSharedFaces(TopTools_ListOfShape& theLSolids, + const TopTools_ListOfShape& theLFSharedToAvoid, + BOPAlgo_Builder& theBuilder, + TopTools_ListOfShape& theExtraFaces) +{ + // Get all splits of shared faces to avoid in the check + TopTools_MapOfShape aMFSharedSp; + { + TopTools_ListOfShape aLFSharedSp; + TopTools_ListIteratorOfListOfShape itLFS(theLFSharedToAvoid); + for (; itLFS.More(); itLFS.Next()) + TakeModified(itLFS.Value(), theBuilder, aMFSharedSp); + } + + TopTools_IndexedDataMapOfShapeListOfShape aFSMap; + TopTools_ListIteratorOfListOfShape itLS(theLSolids); + for (; itLS.More(); itLS.Next()) + TopExp::MapShapesAndAncestors(itLS.Value(), TopAbs_FACE, TopAbs_SOLID, aFSMap); + + TopTools_ListOfShape anExtraFaces; + TopTools_ListOfShape aLFArguments; + itLS.Initialize(theLSolids); + for (; itLS.More(); itLS.Next()) + { + const TopoDS_Shape& aSol = itLS.Value(); + TopExp_Explorer anExpF(aSol, TopAbs_FACE); + for (; anExpF.More(); anExpF.Next()) + { + const TopoDS_Shape& aF = anExpF.Current(); + const TopTools_ListOfShape& aLSol = aFSMap.FindFromKey(aF); + if (aLSol.Extent() != 2 || aMFSharedSp.Contains(aF)) + aLFArguments.Append(aF); + else + anExtraFaces.Append(aF); + } + } + + if (anExtraFaces.IsEmpty()) + return; + + // Rebuild the solids avoiding the extra faces + BOPAlgo_BuilderSolid aBS; + aBS.SetAvoidInternalShapes(Standard_True); + aBS.SetShapes(aLFArguments); + aBS.Perform(); + if (aBS.HasErrors()) + return; + + theLSolids = aBS.Areas(); + theExtraFaces.Append(anExtraFaces); +} + +//======================================================================= +// function: FillSolidsHistory +// purpose: Fills the history of solids modifications +//======================================================================= +void FillSolidsHistory(const TopTools_IndexedMapOfShape& theSolIn, + TopTools_ListOfShape& theSolidsOut, + const TopTools_IndexedDataMapOfShapeListOfShape& theAdjFaces, + BOPAlgo_Builder& theBuilder, + BRepTools_History& theSolidsHistory) +{ + const Standard_Integer aNbS = theSolIn.Extent(); + for (Standard_Integer i = 1; i <= aNbS; ++i) + { + const TopoDS_Shape& aSolIn = theSolIn(i); + + TopoDS_Shape aSolOut; + FindSolid(aSolIn, theSolidsOut, theAdjFaces, theBuilder, aSolOut); + + if (aSolOut.IsNull()) + { + theSolidsHistory.Remove(aSolIn); + continue; + } + + // Check if the solid has really been modified + BOPTools_Set aSTIn, aSTOut; + aSTIn.Add(aSolIn, TopAbs_FACE); + aSTOut.Add(aSolOut, TopAbs_FACE); + if (aSTIn.IsEqual(aSTOut)) + { + // The solids are the same. Replace the resulting solid in the result list + // with the initial solid. + TopTools_ListIteratorOfListOfShape itLS(theSolidsOut); + for (; itLS.More(); itLS.Next()) + { + if (itLS.Value().IsSame(aSolOut)) + { + theSolidsOut.InsertBefore(aSolIn, itLS); + theSolidsOut.Remove(itLS); + break; + } + } + } + else + { + theSolidsHistory.AddModified(aSolIn, aSolOut); + } + } +} + +//======================================================================= +// function: TakeModified +// purpose: Stores the modified object into the list +//======================================================================= +void TakeModified(const TopoDS_Shape& theS, + BOPAlgo_Builder& theBuilder, + TopTools_ListOfShape& theList) +{ + const TopTools_ListOfShape& aModified = theBuilder.Modified(theS); + if (aModified.IsEmpty() && !theBuilder.IsDeleted(theS)) + theList.Append(theS); + else + { + TopTools_ListIteratorOfListOfShape itM(aModified); + for (; itM.More(); itM.Next()) + theList.Append(itM.Value()); + } +} +//======================================================================= +// function: TakeModified +// purpose: Stores the modified object into the map +//======================================================================= +void TakeModified(const TopoDS_Shape& theS, + BOPAlgo_Builder& theBuilder, + TopTools_MapOfShape& theMap) +{ + const TopTools_ListOfShape& aModified = theBuilder.Modified(theS); + if (aModified.IsEmpty() && !theBuilder.IsDeleted(theS)) + theMap.Add(theS); + else + { + TopTools_ListIteratorOfListOfShape itM(aModified); + for (; itM.More(); itM.Next()) + theMap.Add(itM.Value()); + } +} + +//======================================================================= +// function: FindSolid +// purpose: Looks for the image of the solid in the list of resulting solids +//======================================================================= +void FindSolid(const TopoDS_Shape& theSolIn, + const TopTools_ListOfShape& theSolidsRes, + const TopTools_IndexedDataMapOfShapeListOfShape& theAdjFaces, + BOPAlgo_Builder& theBuilder, + TopoDS_Shape& theSolOut) +{ + Handle(IntTools_Context) aCtx = theBuilder.Context(); + + // Take the face in the IN solid, and find it in the OUT list + TopExp_Explorer anExpF(theSolIn, TopAbs_FACE); + for (; anExpF.More(); anExpF.Next()) + { + const TopoDS_Shape& aFS = anExpF.Current(); + // Images of the face + TopTools_MapOfShape aMFSIm; + const TopTools_ListOfShape* pLFA = theAdjFaces.Seek(aFS); + if (pLFA) + { + TopTools_ListIteratorOfListOfShape itLFA(*pLFA); + for (; itLFA.More(); itLFA.Next()) + TakeModified(itLFA.Value(), theBuilder, aMFSIm); + } + else + { + TakeModified(aFS, theBuilder, aMFSIm); + } + + // Find any of these faces in the list of solids + TopTools_ListIteratorOfListOfShape itLS(theSolidsRes); + for (; itLS.More(); itLS.Next()) + { + const TopoDS_Shape& aSol = itLS.Value(); + TopExp_Explorer anExpFOut(aSol, TopAbs_FACE); + for (; anExpFOut.More(); anExpFOut.Next()) + { + const TopoDS_Shape& aF = anExpFOut.Current(); + if (aMFSIm.Contains(aF)) + { + // check orientations + if (!BOPTools_AlgoTools::IsSplitToReverse(aF, aFS, aCtx)) + { + theSolOut = aSol; + return; + } + } + } + } + } +} diff --git a/src/BOPAlgo/BOPAlgo_RemoveFeatures.hxx b/src/BOPAlgo/BOPAlgo_RemoveFeatures.hxx new file mode 100644 index 0000000000..365488e8a7 --- /dev/null +++ b/src/BOPAlgo/BOPAlgo_RemoveFeatures.hxx @@ -0,0 +1,315 @@ +// Created by: Eugeny MALTCHIKOV +// Copyright (c) 2018 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#ifndef _BOPAlgo_RemoveFeatures_HeaderFile +#define _BOPAlgo_RemoveFeatures_HeaderFile + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +//! The RemoveFeatures algorithm is intended for reconstruction of +//! the shape by removal of the unwanted parts from it. These parts can +//! be holes, protrusions, spikes, fillets etc. +//! The shape itself is not modified, the new shape is built in +//! the result. +//! +//! Currently, only the shapes of type SOLID, COMPSOLID, and +//! COMPOUND of Solids are supported. And only the FACEs can be +//! removed from the shape. +//! +//! On the input the algorithm accepts the shape itself and the +//! faces which have to be removed. It does not matter how the faces +//! are given. It could be the separate faces or the collections of faces. +//! The faces should belong to the initial shape, and those that +//! do not belong will be ignored. +//! Before reconstructing the shape, the algorithm will sort all +//! the given faces on the connected blocks (features). +//! +//! The features will be removed from the shape one by one. +//! It will allow removing all possible features even if there +//! were problems with the removal of some of them. +//! +//! The removed feature is filled by the extension of the faces adjacent +//! to the feature. In general, the algorithm of removing of the single +//! feature from the shape looks as follows: +//! - Find the faces adjacent to the feature; +//! - Extend the adjacent faces to cover the feature; +//! - Trim the extended faces by the bounds of original face +//! (except for bounds common with the feature), so it will cover +//! the feature only; +//! - Rebuild the solids with reconstructed adjacent faces +//! avoiding the faces from the feature. +//! +//! If the removal is successful, the result is overwritten with the +//! new shape and the next feature is treated. Otherwise, the warning +//! will be given. +//! +//! The algorithm has the following options: +//! - History support; +//! +//! and the options available from base class: +//! - Error/Warning reporting system; +//! - Parallel processing mode. +//! +//! Please note that the other options of the base class are not supported +//! here and will have no effect. +//! +//! History support allows tracking modification of the input shape +//! in terms of Modified, IsDeleted and Generated. The history is +//! available through the methods of the history tool *BRepTools_History*, +//! which can be accessed here through the method *History()*. +//! By default, the history is collected, but it is possible to disable it +//! using the method *TrackHistory(false)*; +//! +//! Error/Warning reporting system - allows obtaining the extended overview +//! of the Errors/Warnings occurred during the operation. As soon as any error +//! appears the algorithm stops working. The warnings allow continuing the job, +//! informing the user that something went wrong. +//! The algorithm returns the following errors/warnings: +//! - *BOPAlgo_AlertTooFewArguments* - the error alert is given if the input +//! shape does not contain any solids; +//! - *BOPAlgo_AlertUnsupportedType* - the warning alert is given if the input +//! shape contains not only solids, but also other shapes; +//! - *BOPAlgo_AlertNoFacesToRemove* - the error alert is given in case +//! there are no faces to remove from the shape (nothing to do); +//! - *BOPAlgo_AlertUnableToRemoveTheFeature* - the warning alert is given to +//! inform the user the removal of the feature is not possible. The algorithm +//! will still try to remove the other features; +//! - *BOPAlgo_AlertRemoveFeaturesFailed* - the error alert is given in case if +//! the operation was aborted by the unknown reason. +//! +//! Parallel processing mode - allows running the algorithm in parallel mode +//! obtaining the result faster. +//! +//! The algorithm has certain limitations: +//! - Intersection of the connected faces adjacent to the feature should not be empty. +//! It means, that such faces should not be tangent to each other. +//! If the intersection of the adjacent faces will be empty, the algorithm will +//! be unable to trim the faces correctly and, most likely, the feature will not be removed. +//! - The algorithm does not process the INTERNAL parts of the solids, they are simply +//! removed during reconstruction. +//! +//! Note that for successful removal of the feature, the extended faces adjacent +//! to the feature should cover the feature completely, otherwise the solids will +//! not be rebuild. +//! +//! Here is the example of usage of the algorithm: +//! ~~~~ +//! TopoDS_Shape aSolid = ...; // Input shape to remove the features from +//! TopTools_ListOfShape aFaces = ...; // Faces to remove from the shape +//! Standard_Boolean bRunParallel = ...; // Parallel processing mode +//! Standard_Boolean isHistoryNeeded = ...; // History support +//! +//! BOPAlgo_RemoveFeatures aRF; // Feature removal algorithm +//! aRF.SetShape(aSolid); // Set the shape +//! aRF.AddFacesToRemove(aFaces); // Add faces to remove +//! aRF.SetRunParallel(bRunParallel); // Define the processing mode (parallel or single) +//! aRF.TrackHistory(isHistoryNeeded); // Define whether to track the shapes modifications +//! aRF.Perform(); // Perform the operation +//! if (aRF.HasErrors()) // Check for the errors +//! { +//! // error treatment +//! return; +//! } +//! if (aRF.HasWarnings()) // Check for the warnings +//! { +//! // warnings treatment +//! } +//! const TopoDS_Shape& aResult = aRF.Shape(); // Result shape +//! ~~~~ +//! +//! The algorithm preserves the type of the input shape in the result shape. Thus, +//! if the input shape is a COMPSOLID, the resulting solids will also be put into a COMPSOLID. +//! +//! When all possible features are removed, the shape is simplified by +//! removing extra edges and vertices, created during operation, from the result shape. +//! +class BOPAlgo_RemoveFeatures: public BOPAlgo_Options +{ +public: + DEFINE_STANDARD_ALLOC + +public: //! @name Constructors + + //! Empty constructor + BOPAlgo_RemoveFeatures() + : + BOPAlgo_Options(), + myTrackHistory(Standard_True) + { + } + + +public: //! @name Setting input data for the algorithm + + //! Sets the shape for processing. + //! @param theShape [in] The shape to remove the faces from. + //! It should either be the SOLID, COMPSOLID or COMPOUND of Solids. + void SetShape(const TopoDS_Shape& theShape) + { + myInputShape = theShape; + } + + //! Returns the input shape + const TopoDS_Shape& InputShape() const + { + return myInputShape; + } + + //! Adds the face to remove from the input shape. + //! @param theFace [in] The shape to extract the faces for removal. + void AddFaceToRemove(const TopoDS_Shape& theFace) + { + myFacesToRemove.Append(theFace); + } + + //! Adds the faces to remove from the input shape. + //! @param theFaces [in] The list of shapes to extract the faces for removal. + void AddFacesToRemove(const TopTools_ListOfShape& theFaces) + { + TopTools_ListIteratorOfListOfShape it(theFaces); + for (; it.More(); it.Next()) + myFacesToRemove.Append(it.Value()); + } + + //! Returns the list of faces which have been requested for removal + //! from the input shape. + const TopTools_ListOfShape& FacesToRemove() const + { + return myFacesToRemove; + } + + +public: //! @name Performing the operation + + //! Performs the operation + Standard_EXPORT void Perform(); + + +public: //! @name Clearing the contents of the algorithm + + //! Clears the contents of the algorithm from previous run, + //! allowing reusing it for following removals. + void Clear() + { + BOPAlgo_Options::Clear(); + myHistory.Nullify(); + myInputShape.Nullify(); + myShape.Nullify(); + myFacesToRemove.Clear(); + myFeatures.Clear(); + myInputsMap.Clear(); + myResultMap.Clear(); + } + + +public: //! @name History support + + //! Defines whether to track the modification of the shapes or not + void TrackHistory(const Standard_Boolean theFlag) + { + myTrackHistory = theFlag; + } + + //! Gets the History object + Handle(BRepTools_History) History() + { + return (myTrackHistory ? myHistory : NULL); + } + + +public: //! @name Obtaining the results + + //! Returns the resulting shape + const TopoDS_Shape& Shape() const + { + return myShape; + } + + +protected: //! @name Protected methods performing the removal + + //! Checks the input data on validity for the algorithm: + //! - The input shape must be either a SOLID, COMPSOLID or COMPOUND of Solids. + //! If the input shape is not a solid, the method looks for the solids + //! in and uses only them. All other shapes are simply removed. + //! If no solids were found, the Error of unsupported type is returned. + Standard_EXPORT void CheckData(); + + //! Prepares the faces to remove: + //! - Gets only faces contained in the input solids; + //! - Builds connected blocks of faces creating separate features to remove. + Standard_EXPORT void PrepareFeatures(); + + //! Removes the features and fills the created gaps by extension of the adjacent faces. + //! Processes each feature separately. + Standard_EXPORT void RemoveFeatures(); + + //! Remove the single feature from the shape. + //! @param theFeature [in] The feature to remove; + //! @param theSolids [in] The solids to be reconstructed after feature removal; + //! @param theFeatureFacesMap [in] The map of feature faces; + //! @param theHasAdjacentFaces [in] Shows whether the adjacent faces have been + //! found for the feature or not; + //! @param theAdjFaces [in] The reconstructed adjacent faces covering the feature; + //! @param theAdjFacesHistory [in] The history of the adjacent faces reconstruction; + //! @param theSolidsHistoryNeeded [in] Defines whether the history of solids + //! modifications should be tracked or not. + Standard_EXPORT void RemoveFeature(const TopoDS_Shape& theFeature, + const TopTools_IndexedMapOfShape& theSolids, + const TopTools_MapOfShape& theFeatureFacesMap, + const Standard_Boolean theHasAdjacentFaces, + const TopTools_IndexedDataMapOfShapeListOfShape& theAdjFaces, + const Handle(BRepTools_History)& theAdjFacesHistory, + const Standard_Boolean theSolidsHistoryNeeded); + + //! Updates history with the removed features + Standard_EXPORT void UpdateHistory(); + + //! Simplifies the result by removing extra edges and vertices created + //! during removal of the features. + Standard_EXPORT void SimplifyResult(); + + //! Post treatment - restore the type of the initial shape + Standard_EXPORT void PostTreat(); + +protected: //! @name Fields + + // Inputs + TopoDS_Shape myInputShape; //!< Input shape + TopTools_ListOfShape myFacesToRemove; //!< Faces to remove + Standard_Boolean myTrackHistory; //!< Defines whether to track the history of shapes + //! modifications or not (true by default) + + // Intermediate + TopTools_ListOfShape myFeatures; //!< List of not connected features to remove + //! (each feature is a compound of faces) + TopTools_IndexedMapOfShape myInputsMap; //!< Map of all sub-shapes of the input shape + TopTools_MapOfShape myResultMap; //!< Map of all sub-shapes of the result shape + + // Results + TopoDS_Shape myShape; //!< Result shape + Handle(BRepTools_History) myHistory; //!< History tool +}; + +#endif // _BOPAlgo_RemoveFeatures_HeaderFile diff --git a/src/BOPAlgo/FILES b/src/BOPAlgo/FILES index 37036eb35a..deaff6ee03 100644 --- a/src/BOPAlgo/FILES +++ b/src/BOPAlgo/FILES @@ -53,6 +53,8 @@ BOPAlgo_PBuilder.hxx BOPAlgo_PPaveFiller.hxx BOPAlgo_PSection.hxx BOPAlgo_PWireEdgeSet.hxx +BOPAlgo_RemoveFeatures.cxx +BOPAlgo_RemoveFeatures.hxx BOPAlgo_Section.cxx BOPAlgo_Section.hxx BOPAlgo_SectionAttribute.hxx diff --git a/src/BOPTest/BOPTest.cxx b/src/BOPTest/BOPTest.cxx index edd9c37e0f..d4736b5c21 100644 --- a/src/BOPTest/BOPTest.cxx +++ b/src/BOPTest/BOPTest.cxx @@ -25,12 +25,14 @@ #include #include #include +#include #include #include +#include #include #include -#include +#include #include //======================================================================= @@ -55,6 +57,7 @@ void BOPTest::AllCommands(Draw_Interpretor& theCommands) BOPTest::DebugCommands (theCommands); BOPTest::CellsCommands (theCommands); BOPTest::UtilityCommands (theCommands); + BOPTest::RemoveFeaturesCommands(theCommands); } //======================================================================= //function : Factory @@ -84,7 +87,7 @@ DPLUGIN(BOPTest) //purpose : //======================================================================= -void BOPTest::ReportAlerts (const BOPAlgo_Algo& theAlgorithm) +void BOPTest::ReportAlerts(const Handle(Message_Report)& theReport) { // first report warnings, then errors Message_Gravity anAlertTypes[2] = { Message_Warning, Message_Fail }; @@ -92,11 +95,12 @@ void BOPTest::ReportAlerts (const BOPAlgo_Algo& theAlgorithm) { // report shapes for the same type of alert together NCollection_Map aPassedTypes; - const Message_ListOfAlert& aList = theAlgorithm.GetReport()->GetAlerts (anAlertTypes[iGravity]); + const Message_ListOfAlert& aList = theReport->GetAlerts (anAlertTypes[iGravity]); for (Message_ListOfAlert::Iterator aIt (aList); aIt.More(); aIt.Next()) { // check that this type of warnings has not yet been processed - if (! aPassedTypes.Add (aIt.Value()->DynamicType())) + const Handle(Standard_Type)& aType = aIt.Value()->DynamicType(); + if (!aPassedTypes.Add(aType)) continue; // get alert message @@ -112,7 +116,9 @@ void BOPTest::ReportAlerts (const BOPAlgo_Algo& theAlgorithm) { Handle(TopoDS_AlertWithShape) aShapeAlert = Handle(TopoDS_AlertWithShape)::DownCast (aIt2.Value()); - if (! aShapeAlert.IsNull() && ! aShapeAlert->GetShape().IsNull()) + if (!aShapeAlert.IsNull() && + (aType == aShapeAlert->DynamicType()) && + !aShapeAlert->GetShape().IsNull()) { // char aName[80]; diff --git a/src/BOPTest/BOPTest.hxx b/src/BOPTest/BOPTest.hxx index 774ffb054d..2787703509 100644 --- a/src/BOPTest/BOPTest.hxx +++ b/src/BOPTest/BOPTest.hxx @@ -23,7 +23,7 @@ #include class BOPTest_Objects; class BOPTest_DrawableShape; -class BOPAlgo_Algo; +class Message_Report; class BOPTest { @@ -60,9 +60,11 @@ public: Standard_EXPORT static void UtilityCommands (Draw_Interpretor& aDI); + Standard_EXPORT static void RemoveFeaturesCommands (Draw_Interpretor& aDI); + //! Prints errors and warnings if any and draws attached shapes //! if flag BOPTest_Objects::DrawWarnShapes() is set - Standard_EXPORT static void ReportAlerts (const BOPAlgo_Algo& theAlgorithm); + Standard_EXPORT static void ReportAlerts (const Handle(Message_Report)& theReport); protected: diff --git a/src/BOPTest/BOPTest_BOPCommands.cxx b/src/BOPTest/BOPTest_BOPCommands.cxx index 26a5be4ead..7d333de0b9 100644 --- a/src/BOPTest/BOPTest_BOPCommands.cxx +++ b/src/BOPTest/BOPTest_BOPCommands.cxx @@ -164,7 +164,7 @@ Standard_Integer bop(Draw_Interpretor& di, pPF->SetUseOBB(BOPTest_Objects::UseOBB()); // pPF->Perform(); - BOPTest::ReportAlerts(*pPF); + BOPTest::ReportAlerts(pPF->GetReport()); // return 0; } @@ -257,7 +257,7 @@ Standard_Integer bopsmt(Draw_Interpretor& di, aBOP.SetCheckInverted(BOPTest_Objects::CheckInverted()); // aBOP.PerformWithFiller(*pPF); - BOPTest::ReportAlerts(aBOP); + BOPTest::ReportAlerts(aBOP.GetReport()); if (aBOP.HasErrors()) { return 0; } @@ -318,7 +318,7 @@ Standard_Integer bopsection(Draw_Interpretor& di, aBOP.SetCheckInverted(BOPTest_Objects::CheckInverted()); // aBOP.PerformWithFiller(*pPF); - BOPTest::ReportAlerts(aBOP); + BOPTest::ReportAlerts(aBOP.GetReport()); if (aBOP.HasErrors()) { return 0; } @@ -504,7 +504,7 @@ Standard_Integer bsmt (Draw_Interpretor& di, aPF.SetUseOBB(BOPTest_Objects::UseOBB()); // aPF.Perform(); - BOPTest::ReportAlerts(aPF); + BOPTest::ReportAlerts(aPF.GetReport()); if (aPF.HasErrors()) { return 0; } @@ -519,7 +519,7 @@ Standard_Integer bsmt (Draw_Interpretor& di, aBOP.SetCheckInverted(BOPTest_Objects::CheckInverted()); // aBOP.PerformWithFiller(aPF); - BOPTest::ReportAlerts(aBOP); + BOPTest::ReportAlerts(aBOP.GetReport()); if (aBOP.HasErrors()) { return 0; } @@ -827,7 +827,7 @@ Standard_Integer mkvolume(Draw_Interpretor& di, Standard_Integer n, const char** aMV.SetUseOBB(BOPTest_Objects::UseOBB()); // aMV.Perform(); - BOPTest::ReportAlerts(aMV); + BOPTest::ReportAlerts(aMV.GetReport()); if (aMV.HasErrors()) { return 0; } diff --git a/src/BOPTest/BOPTest_CellsCommands.cxx b/src/BOPTest/BOPTest_CellsCommands.cxx index 0a4924f7b5..5c8814c90d 100644 --- a/src/BOPTest/BOPTest_CellsCommands.cxx +++ b/src/BOPTest/BOPTest_CellsCommands.cxx @@ -115,7 +115,7 @@ Standard_Integer bcbuild(Draw_Interpretor& di, aCBuilder.SetUseOBB(BOPTest_Objects::UseOBB()); // aCBuilder.PerformWithFiller(aPF); - BOPTest::ReportAlerts(aCBuilder); + BOPTest::ReportAlerts(aCBuilder.GetReport()); if (aCBuilder.HasErrors()) { return 0; } @@ -162,7 +162,7 @@ Standard_Integer bcaddall(Draw_Interpretor& di, // aCBuilder.ClearWarnings(); aCBuilder.AddAllToResult(iMaterial, bUpdate); - BOPTest::ReportAlerts(aCBuilder); + BOPTest::ReportAlerts(aCBuilder.GetReport()); // const TopoDS_Shape& aR = aCBuilder.Shape(); // @@ -246,7 +246,7 @@ Standard_Integer bcadd(Draw_Interpretor& di, // aCBuilder.ClearWarnings(); aCBuilder.AddToResult(aLSToTake, aLSToAvoid, iMaterial, bUpdate); - BOPTest::ReportAlerts(aCBuilder); + BOPTest::ReportAlerts(aCBuilder.GetReport()); // const TopoDS_Shape& aR = aCBuilder.Shape(); // @@ -317,7 +317,7 @@ Standard_Integer bcremoveint(Draw_Interpretor& di, // aCBuilder.ClearWarnings(); aCBuilder.RemoveInternalBoundaries(); - BOPTest::ReportAlerts(aCBuilder); + BOPTest::ReportAlerts(aCBuilder.GetReport()); // const TopoDS_Shape& aR = aCBuilder.Shape(); // diff --git a/src/BOPTest/BOPTest_CheckCommands.cxx b/src/BOPTest/BOPTest_CheckCommands.cxx index 9b5c3054c5..a1da966d87 100644 --- a/src/BOPTest/BOPTest_CheckCommands.cxx +++ b/src/BOPTest/BOPTest_CheckCommands.cxx @@ -247,7 +247,7 @@ Standard_Integer bopcheck (Draw_Interpretor& di, // aTimer.Stop(); // - BOPTest::ReportAlerts(aChecker); + BOPTest::ReportAlerts(aChecker.GetReport()); // iErr=aChecker.HasErrors(); // diff --git a/src/BOPTest/BOPTest_DebugCommands.cxx b/src/BOPTest/BOPTest_DebugCommands.cxx index 991cf0dfb3..7c87dadcb2 100644 --- a/src/BOPTest/BOPTest_DebugCommands.cxx +++ b/src/BOPTest/BOPTest_DebugCommands.cxx @@ -1350,7 +1350,7 @@ Standard_Integer bopbface (Draw_Interpretor& di, aBF.SetFace(aF); aBF.SetShapes(aLE); aBF.Perform(); - BOPTest::ReportAlerts(aBF); + BOPTest::ReportAlerts(aBF.GetReport()); if (aBF.HasErrors()) { return 0; } @@ -1410,7 +1410,7 @@ Standard_Integer bopbsolid (Draw_Interpretor& di, BOPAlgo_BuilderSolid aBS; aBS.SetShapes(aLF); aBS.Perform(); - BOPTest::ReportAlerts(aBS); + BOPTest::ReportAlerts(aBS.GetReport()); if (aBS.HasErrors()) { return 0; } diff --git a/src/BOPTest/BOPTest_PartitionCommands.cxx b/src/BOPTest/BOPTest_PartitionCommands.cxx index 5cf77bd67b..960ab2de5b 100644 --- a/src/BOPTest/BOPTest_PartitionCommands.cxx +++ b/src/BOPTest/BOPTest_PartitionCommands.cxx @@ -121,7 +121,7 @@ Standard_Integer bfillds(Draw_Interpretor& di, aTimer.Start(); // aPF.Perform(); - BOPTest::ReportAlerts(aPF); + BOPTest::ReportAlerts(aPF.GetReport()); if (aPF.HasErrors()) { return 0; } @@ -196,7 +196,7 @@ Standard_Integer bbuild(Draw_Interpretor& di, aTimer.Start(); // aBuilder.PerformWithFiller(aPF); - BOPTest::ReportAlerts(aBuilder); + BOPTest::ReportAlerts(aBuilder.GetReport()); if (aBuilder.HasErrors()) { return 0; } @@ -306,7 +306,7 @@ Standard_Integer bbop(Draw_Interpretor& di, aTimer.Start(); // pBuilder->PerformWithFiller(aPF); - BOPTest::ReportAlerts(*pBuilder); + BOPTest::ReportAlerts(pBuilder->GetReport()); if (pBuilder->HasErrors()) { return 0; } @@ -376,7 +376,7 @@ Standard_Integer bsplit(Draw_Interpretor& di, pSplitter->PerformWithFiller(aPF); // aTimer.Stop(); - BOPTest::ReportAlerts(*pSplitter); + BOPTest::ReportAlerts(pSplitter->GetReport()); if (pSplitter->HasErrors()) { return 0; } diff --git a/src/BOPTest/BOPTest_RemoveFeaturesCommands.cxx b/src/BOPTest/BOPTest_RemoveFeaturesCommands.cxx new file mode 100644 index 0000000000..80c95fb8a4 --- /dev/null +++ b/src/BOPTest/BOPTest_RemoveFeaturesCommands.cxx @@ -0,0 +1,269 @@ +// Created by: Eugeny MALTCHIKOV +// Copyright (c) 2018 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include +#include + +#include + +#include + +#include +#include + +#include +#include + +static Standard_Integer RemoveFeatures (Draw_Interpretor&, Standard_Integer, const char**); +// History commands +static Standard_Integer rfModified (Draw_Interpretor&, Standard_Integer, const char**); +static Standard_Integer rfGenerated (Draw_Interpretor&, Standard_Integer, const char**); +static Standard_Integer rfIsDeleted (Draw_Interpretor&, Standard_Integer, const char**); + +namespace +{ + static BRepAlgoAPI_Defeaturing TheDefeaturingTool; +} + +//======================================================================= +//function : RemoveFeaturesCommands +//purpose : +//======================================================================= +void BOPTest::RemoveFeaturesCommands(Draw_Interpretor& theCommands) +{ + static Standard_Boolean done = Standard_False; + if (done) return; + done = Standard_True; + // Chapter's name + const char* group = "BOPTest commands"; + // Commands + theCommands.Add("removefeatures", "removefeatures result shape f1 f2 ... [-nohist] [-parallel]\n" + "\t\tRemoves user-defined features (faces) from the shape.\n" + "\t\tresult - result of the operation;\n" + "\t\tshape - the shape to remove the features from;\n" + "\t\tf1, f2 - features to remove from the shape;\n" + "\t\tnohist - disables the history collection;\n" + "\t\tparallel - enables the parallel processing mode.", + __FILE__, RemoveFeatures, group); + + theCommands.Add("rfmodified", "rfmodified c_modified shape\n" + "\t\tShows the shapes modified from the shape during Defeaturing.", + __FILE__, rfModified, group); + theCommands.Add("rfgenerated", "rfgenerated c_generated shape\n" + "\t\tShows the shapes generated from the shape during Defeaturing.", + __FILE__, rfGenerated, group); + theCommands.Add("rfisdeleted", "rfisdeleted shape\n" + "\t\tChecks if the shape has been deleted during Defeaturing.", + __FILE__, rfIsDeleted, group); +} + +//======================================================================= +//function : RemoveFeatures +//purpose : +//======================================================================= +Standard_Integer RemoveFeatures(Draw_Interpretor& theDI, + Standard_Integer theArgc, + const char ** theArgv) +{ + if (theArgc < 4) + { + theDI.PrintHelp(theArgv[0]); + return 1; + } + + // Get the shape to remove the features from + TopoDS_Shape aShape = DBRep::Get(theArgv[2]); + if (aShape.IsNull()) + { + theDI << "Error: " << theArgv[2] << " is a null shape.\n"; + return 1; + } + + BRepAlgoAPI_Defeaturing aRF; + aRF.SetShape(aShape); + + // Add faces to remove + for (Standard_Integer i = 3; i < theArgc; ++i) + { + TopoDS_Shape aF = DBRep::Get(theArgv[i]); + if (aF.IsNull()) + { + // Check for the options + if (!strcmp(theArgv[i], "-nohist")) + { + // disable the history collection + aRF.TrackHistory(Standard_False); + } + else if (!strcmp(theArgv[i], "-parallel")) + { + // enable the parallel processing mode + aRF.SetRunParallel(Standard_True); + } + else + theDI << "Warning: " << theArgv[i] << " is a null shape. Skip it.\n"; + + continue; + } + + aRF.AddFaceToRemove(aF); + } + + // Perform the removal + aRF.Build(); + + // Check for the errors/warnings + BOPTest::ReportAlerts(aRF.GetReport()); + + if (aRF.HasErrors()) + return 0; + + const TopoDS_Shape& aResult = aRF.Shape(); + DBRep::Set(theArgv[1], aResult); + + TheDefeaturingTool = aRF; + + return 0; +} + +//======================================================================= +//function : CheckHistory +//purpose : Checks if the history available for the shape +//======================================================================= +Standard_Boolean IsHistoryAvailable(const TopoDS_Shape& theS, + Draw_Interpretor& theDI) +{ + if (theS.IsNull()) + { + theDI << "Null shape.\n"; + return Standard_False; + } + + if (!BRepTools_History::IsSupportedType(theS)) + { + theDI << "The history is not supported for this kind of shape.\n"; + return Standard_False; + } + + if (!TheDefeaturingTool.HasHistory()) + { + theDI << "The history has not been prepared.\n"; + return Standard_False; + } + return Standard_True; +} + +//======================================================================= +//function : rfModified +//purpose : +//======================================================================= +Standard_Integer rfModified(Draw_Interpretor& theDI, + Standard_Integer theArgc, + const char ** theArgv) +{ + if (theArgc != 3) + { + theDI.PrintHelp(theArgv[0]); + return 1; + } + + const TopoDS_Shape& aS = DBRep::Get(theArgv[2]); + if (!IsHistoryAvailable(aS, theDI)) + return 0; + + const TopTools_ListOfShape& aLSIm = TheDefeaturingTool.Modified(aS); + if (aLSIm.IsEmpty()) + { + theDI << "The shape has not been modified.\n"; + return 0; + } + + TopoDS_Shape aCModified; + if (aLSIm.Extent() == 1) + aCModified = aLSIm.First(); + else + { + BRep_Builder().MakeCompound(TopoDS::Compound(aCModified)); + TopTools_ListIteratorOfListOfShape itLS(aLSIm); + for (; itLS.More(); itLS.Next()) + BRep_Builder().Add(aCModified, itLS.Value()); + } + + DBRep::Set(theArgv[1], aCModified); + + return 0; +} +//======================================================================= +//function : rfGenerated +//purpose : +//======================================================================= +Standard_Integer rfGenerated(Draw_Interpretor& theDI, + Standard_Integer theArgc, + const char ** theArgv) +{ + if (theArgc != 3) + { + theDI.PrintHelp(theArgv[0]); + return 1; + } + + const TopoDS_Shape& aS = DBRep::Get(theArgv[2]); + if (!IsHistoryAvailable(aS, theDI)) + return 0; + + const TopTools_ListOfShape& aLSGen = TheDefeaturingTool.Generated(aS); + if (aLSGen.IsEmpty()) + { + theDI << "No shapes were generated from the shape.\n"; + return 0; + } + + TopoDS_Shape aCGenerated; + if (aLSGen.Extent() == 1) + aCGenerated = aLSGen.First(); + else + { + BRep_Builder().MakeCompound(TopoDS::Compound(aCGenerated)); + TopTools_ListIteratorOfListOfShape itLS(aLSGen); + for (; itLS.More(); itLS.Next()) + BRep_Builder().Add(aCGenerated, itLS.Value()); + } + + DBRep::Set(theArgv[1], aCGenerated); + + return 0; +} +//======================================================================= +//function : rfIsDeleted +//purpose : +//======================================================================= +Standard_Integer rfIsDeleted(Draw_Interpretor& theDI, + Standard_Integer theArgc, + const char ** theArgv) +{ + if (theArgc != 2) + { + theDI.PrintHelp(theArgv[0]); + return 1; + } + + const TopoDS_Shape& aS = DBRep::Get(theArgv[1]); + if (!IsHistoryAvailable(aS, theDI)) + return 0; + + theDI << (TheDefeaturingTool.IsDeleted(aS) ? "Deleted" : "Not deleted") << "\n"; + + return 0; +} diff --git a/src/BOPTest/FILES b/src/BOPTest/FILES index 4895c625c8..bfc64ed0c1 100755 --- a/src/BOPTest/FILES +++ b/src/BOPTest/FILES @@ -15,4 +15,5 @@ BOPTest_TolerCommands.cxx BOPTest_HistoryCommands.cxx BOPTest_DebugCommands.cxx BOPTest_CellsCommands.cxx +BOPTest_RemoveFeaturesCommands.cxx BOPTest_UtilityCommands.cxx \ No newline at end of file diff --git a/src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.cxx b/src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.cxx new file mode 100644 index 0000000000..e3fc8fa1ad --- /dev/null +++ b/src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.cxx @@ -0,0 +1,86 @@ +// Created by: Eugeny MALTCHIKOV +// Copyright (c) 2018 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + + +#include + +#include + +//======================================================================= +//function : Build +//purpose : +//======================================================================= +void BRepAlgoAPI_Defeaturing::Build() +{ + // Set not done state for the operation + NotDone(); + + // Clear the tools performing the operation + Clear(); + + // Set the inputs to BOPAlgo_RemoveFeatures algorithm + myFeatureRemovalTool.SetShape(myInputShape); + myFeatureRemovalTool.AddFacesToRemove(myFacesToRemove); + myFeatureRemovalTool.TrackHistory(myTrackHistory); + myFeatureRemovalTool.SetRunParallel(myRunParallel); + + // Perform the features removal + myFeatureRemovalTool.Perform(); + + // Merge the Errors/Warnings from the features removal tool + GetReport()->Merge(myFeatureRemovalTool.GetReport()); + + if (HasErrors()) + return; + + // Set done state + Done(); + + // Get the result shape + myShape = myFeatureRemovalTool.Shape(); +} + +//======================================================================= +//function : Modified +//purpose : +//======================================================================= +const TopTools_ListOfShape& BRepAlgoAPI_Defeaturing::Modified(const TopoDS_Shape& theS) +{ + myGenerated.Clear(); + if (!myFeatureRemovalTool.History().IsNull()) + myGenerated = myFeatureRemovalTool.History()->Modified(theS); + return myGenerated; +} + +//======================================================================= +//function : Generated +//purpose : +//======================================================================= +const TopTools_ListOfShape& BRepAlgoAPI_Defeaturing::Generated(const TopoDS_Shape& theS) +{ + myGenerated.Clear(); + if (!myFeatureRemovalTool.History().IsNull()) + myGenerated = myFeatureRemovalTool.History()->Generated(theS); + return myGenerated; +} + +//======================================================================= +//function : IsDeleted +//purpose : +//======================================================================= +Standard_Boolean BRepAlgoAPI_Defeaturing::IsDeleted(const TopoDS_Shape& theS) +{ + return (!myFeatureRemovalTool.History().IsNull() ? + myFeatureRemovalTool.History()->IsRemoved(theS) : Standard_False); +} diff --git a/src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.hxx b/src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.hxx new file mode 100644 index 0000000000..81650922f9 --- /dev/null +++ b/src/BRepAlgoAPI/BRepAlgoAPI_Defeaturing.hxx @@ -0,0 +1,205 @@ +// Created by: Eugeny MALTCHIKOV +// Copyright (c) 2018 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#ifndef _BRepAlgoAPI_Defeaturing_HeaderFile +#define _BRepAlgoAPI_Defeaturing_HeaderFile + +#include +#include +#include + +#include +#include + + +//! The BRepAlgoAPI_Defeaturing algorithm is the API algorithm intended for +//! removal of the unwanted parts from the shape. The unwanted parts +//! (or features) can be holes, protrusions, gaps, chamfers, fillets etc. +//! The shape itself is not modified, the new shape is built as the result. +//! +//! The actual removal of the features from the shape is performed by +//! the low-level *BOPAlgo_RemoveFeatures* tool. So the defeaturing algorithm +//! has the same options, input data requirements, limitations as the +//! low-level algorithm. +//! +//! Input data +//! +//! Currently, only the shapes of type SOLID, COMPSOLID, and COMPOUND of Solids +//! are supported. And only the FACEs can be removed from the shape. +//! +//! On the input the algorithm accepts the shape itself and the +//! features which have to be removed. It does not matter how the features +//! are given. It could be the separate faces or the collections +//! of faces. The faces should belong to the initial shape, and those that +//! do not belong will be ignored. +//! +//! Options +//! +//! The algorithm has the following options: +//! - History support; +//! +//! and the options available from base class: +//! - Error/Warning reporting system; +//! - Parallel processing mode. +//! +//! Please note that the other options of the base class are not supported +//! here and will have no effect. +//! +//! For the details on the available options please refer to the description +//! of *BOPAlgo_RemoveFeatures* algorithm. +//! +//! Limitations +//! +//! The defeaturing algorithm has the same limitations as *BOPAlgo_RemoveFeatures* +//! algorithm. +//! +//! Example +//! +//! Here is the example of usage of the algorithm: +//! ~~~~ +//! TopoDS_Shape aSolid = ...; // Input shape to remove the features from +//! TopTools_ListOfShape aFeatures = ...; // Features to remove from the shape +//! Standard_Boolean bRunParallel = ...; // Parallel processing mode +//! Standard_Boolean isHistoryNeeded = ...; // History support +//! +//! BRepAlgoAPI_Defeaturing aDF; // De-Featuring algorithm +//! aDF.SetShape(aSolid); // Set the shape +//! aDF.AddFacesToRemove(aFaces); // Add faces to remove +//! aDF.SetRunParallel(bRunParallel); // Define the processing mode (parallel or single) +//! aDF.TrackHistory(isHistoryNeeded); // Define whether to track the shapes modifications +//! aDF.Build(); // Perform the operation +//! if (!aDF.IsDone()) // Check for the errors +//! { +//! // error treatment +//! Standard_SStream aSStream; +//! aDF.DumpErrors(aSStream); +//! return; +//! } +//! if (aDF.HasWarnings()) // Check for the warnings +//! { +//! // warnings treatment +//! Standard_SStream aSStream; +//! aDF.DumpWarnings(aSStream); +//! } +//! const TopoDS_Shape& aResult = aDF.Shape(); // Result shape +//! ~~~~ +//! +//! The algorithm preserves the type of the input shape in the result shape. Thus, +//! if the input shape is a COMPSOLID, the resulting solids will also be put into a COMPSOLID. +//! +class BRepAlgoAPI_Defeaturing: public BRepAlgoAPI_Algo +{ +public: + + DEFINE_STANDARD_ALLOC + +public: //! @name Constructors + + //! Empty constructor + BRepAlgoAPI_Defeaturing() + : + BRepAlgoAPI_Algo(), + myTrackHistory(Standard_True) + {} + + +public: //! @name Setting input data for the algorithm + + //! Sets the shape for processing. + //! @param theShape [in] The shape to remove the features from. + //! It should either be the SOLID, COMPSOLID or COMPOUND of Solids. + void SetShape(const TopoDS_Shape& theShape) + { + myInputShape = theShape; + } + + //! Returns the input shape + const TopoDS_Shape& InputShape() const + { + return myInputShape; + } + + //! Adds the features to remove from the input shape. + //! @param theFace [in] The shape to extract the faces for removal. + void AddFaceToRemove(const TopoDS_Shape& theFace) + { + myFacesToRemove.Append(theFace); + } + + //! Adds the faces to remove from the input shape. + //! @param theFaces [in] The list of shapes to extract the faces for removal. + void AddFacesToRemove(const TopTools_ListOfShape& theFaces) + { + TopTools_ListIteratorOfListOfShape it(theFaces); + for (; it.More(); it.Next()) + myFacesToRemove.Append(it.Value()); + } + + //! Returns the list of faces which have been requested for removal + //! from the input shape. + const TopTools_ListOfShape& FacesToRemove() const + { + return myFacesToRemove; + } + + +public: //! @name Performing the operation + + //! Performs the operation + Standard_EXPORT virtual void Build() Standard_OVERRIDE; + + +public: //! @name History Methods + + //! Defines whether to track the modification of the shapes or not. + void TrackHistory(const Standard_Boolean theFlag) + { + myTrackHistory = theFlag; + } + + //! Returns whether the history was requested or not. + Standard_Boolean HasHistory() const { return myTrackHistory; } + + //! Returns the list of shapes modified from the shape during the operation. + Standard_EXPORT virtual const TopTools_ListOfShape& Modified(const TopoDS_Shape& theS) Standard_OVERRIDE; + + //! Returns the list of shapes generated from the shape during the operation. + Standard_EXPORT virtual const TopTools_ListOfShape& Generated(const TopoDS_Shape& theS) Standard_OVERRIDE; + + //! Returns true if the shape has been deleted during the operation. + //! It means that the shape has no any trace in the result. + //! Otherwise it returns false. + Standard_EXPORT virtual Standard_Boolean IsDeleted(const TopoDS_Shape& theS) Standard_OVERRIDE; + + +protected: //! @name Setting the algorithm into default state + + virtual void Clear() Standard_OVERRIDE + { + BRepAlgoAPI_Algo::Clear(); + myFeatureRemovalTool.Clear(); + } + + +protected: //! @name Fields + + TopoDS_Shape myInputShape; //!< Input shape to remove the features from + TopTools_ListOfShape myFacesToRemove; //!< Features to remove from the shape + Standard_Boolean myTrackHistory; //!< Defines whether to track the history of + //! shapes modifications or not (true by default) + BOPAlgo_RemoveFeatures myFeatureRemovalTool; //!< Tool for the features removal + +}; + +#endif // _BRepAlgoAPI_Defeaturing_HeaderFile diff --git a/src/BRepAlgoAPI/FILES b/src/BRepAlgoAPI/FILES index 9a12d65b5d..ac68df71e2 100644 --- a/src/BRepAlgoAPI/FILES +++ b/src/BRepAlgoAPI/FILES @@ -10,6 +10,8 @@ BRepAlgoAPI_Common.cxx BRepAlgoAPI_Common.hxx BRepAlgoAPI_Cut.cxx BRepAlgoAPI_Cut.hxx +BRepAlgoAPI_Defeaturing.cxx +BRepAlgoAPI_Defeaturing.hxx BRepAlgoAPI_Fuse.cxx BRepAlgoAPI_Fuse.hxx BRepAlgoAPI_Section.cxx diff --git a/src/BRepLib/BRepLib.cxx b/src/BRepLib/BRepLib.cxx index 7ac087cc3d..60d0bbc928 100644 --- a/src/BRepLib/BRepLib.cxx +++ b/src/BRepLib/BRepLib.cxx @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -2665,3 +2666,133 @@ void BRepLib::BoundingVertex(const NCollection_List& theLV, theNewTol = aDmax; } } + +//======================================================================= +//function : ExtendFace +//purpose : +//======================================================================= +void BRepLib::ExtendFace(const TopoDS_Face& theF, + const Standard_Real theExtVal, + const Standard_Boolean theExtUMin, + const Standard_Boolean theExtUMax, + const Standard_Boolean theExtVMin, + const Standard_Boolean theExtVMax, + TopoDS_Face& theFExtended) +{ + // Get face bounds + BRepAdaptor_Surface aBAS(theF); + Standard_Real aFUMin = aBAS.FirstUParameter(), + aFUMax = aBAS.LastUParameter(), + aFVMin = aBAS.FirstVParameter(), + aFVMax = aBAS.LastVParameter(); + const Standard_Real aTol = BRep_Tool::Tolerance(theF); + + // Surface to build the face + Handle(Geom_Surface) aS; + + const GeomAbs_SurfaceType aType = aBAS.GetType(); + // treat analytical surfaces first + if (aType == GeomAbs_Plane || + aType == GeomAbs_Sphere || + aType == GeomAbs_Cylinder || + aType == GeomAbs_Torus || + aType == GeomAbs_Cone) + { + // Get basis transformed basis surface + Handle(Geom_Surface) aSurf = Handle(Geom_Surface):: + DownCast(aBAS.Surface().Surface()->Transformed(aBAS.Trsf())); + + // Get bounds of the basis surface + Standard_Real aSUMin, aSUMax, aSVMin, aSVMax; + aSurf->Bounds(aSUMin, aSUMax, aSVMin, aSVMax); + + if (aBAS.IsUPeriodic()) + { + // Adjust face bounds to first period + Standard_Real aDelta = aFUMax - aFUMin; + aFUMin = Max(aSUMin, aFUMin + aBAS.UPeriod()*Ceiling((aSUMin - aFUMin)/aBAS.UPeriod())); + aFUMax = aFUMin + aDelta; + } + if (aBAS.IsVPeriodic()) + { + // Adjust face bounds to first period + Standard_Real aDelta = aFVMax - aFVMin; + aFVMin = Max(aSVMin, aFVMin + aBAS.VPeriod()*Ceiling((aSVMin - aFVMin)/aBAS.VPeriod())); + aFVMax = aFVMin + aDelta; + } + + // Enlarge the face + Standard_Real anURes = 0., aVRes = 0.; + if (theExtUMin || theExtUMax) + anURes = aBAS.UResolution(theExtVal); + if (theExtVMin || theExtVMax) + aVRes = aBAS.VResolution(theExtVal); + + if (theExtUMin) aFUMin = Max(aSUMin, aFUMin - anURes); + if (theExtUMax) aFUMax = Min(aSUMax, aFUMax + anURes); + if (theExtVMin) aFVMin = Max(aSVMin, aFVMin - aVRes); + if (theExtVMax) aFVMax = Min(aSVMax, aFVMax + aVRes); + + aS = aSurf; + } + else + { + // General case + + Handle(Geom_BoundedSurface) aSB = + Handle(Geom_BoundedSurface)::DownCast(BRep_Tool::Surface(theF)); + if (aSB.IsNull()) + { + theFExtended = theF; + return; + } + + // Get surfaces bounds + Standard_Real aSUMin, aSUMax, aSVMin, aSVMax; + aSB->Bounds(aSUMin, aSUMax, aSVMin, aSVMax); + + Standard_Boolean isUClosed = aSB->IsUClosed(); + Standard_Boolean isVClosed = aSB->IsVClosed(); + + // Check if the extension in necessary directions is done + Standard_Boolean isExtUMin = Standard_False, + isExtUMax = Standard_False, + isExtVMin = Standard_False, + isExtVMax = Standard_False; + + // UMin + if (theExtUMin && !isUClosed && !Precision::IsInfinite(aSUMin)) { + GeomLib::ExtendSurfByLength(aSB, theExtVal, 1, Standard_True, Standard_False); + isExtUMin = Standard_True; + } + // UMax + if (theExtUMax && !isUClosed && !Precision::IsInfinite(aSUMax)) { + GeomLib::ExtendSurfByLength(aSB, theExtVal, 1, Standard_True, Standard_True); + isExtUMax = Standard_True; + } + // VMin + if (theExtVMin && !isVClosed && !Precision::IsInfinite(aSVMax)) { + GeomLib::ExtendSurfByLength(aSB, theExtVal, 1, Standard_False, Standard_False); + isExtVMin = Standard_True; + } + // VMax + if (theExtVMax && !isVClosed && !Precision::IsInfinite(aSVMax)) { + GeomLib::ExtendSurfByLength(aSB, theExtVal, 1, Standard_False, Standard_True); + isExtVMax = Standard_True; + } + + aS = aSB; + + // Get new bounds + aS->Bounds(aSUMin, aSUMax, aSVMin, aSVMax); + if (isExtUMin) aFUMin = aSUMin; + if (isExtUMax) aFUMax = aSUMax; + if (isExtVMin) aFVMin = aSVMin; + if (isExtVMax) aFVMax = aSVMax; + } + + BRepLib_MakeFace aMF(aS, aFUMin, aFUMax, aFVMin, aFVMax, aTol); + theFExtended = *(TopoDS_Face*)&aMF.Shape(); + if (theF.Orientation() == TopAbs_REVERSED) + theFExtended.Reverse(); +} diff --git a/src/BRepLib/BRepLib.hxx b/src/BRepLib/BRepLib.hxx index 5f034bbacc..5bd8823082 100644 --- a/src/BRepLib/BRepLib.hxx +++ b/src/BRepLib/BRepLib.hxx @@ -274,6 +274,24 @@ public: Standard_EXPORT static Standard_Boolean FindValidRange (const TopoDS_Edge& theEdge, Standard_Real& theFirst, Standard_Real& theLast); + + //! Enlarges the face on the given value. + //! @param theF [in] The face to extend + //! @param theExtVal [in] The extension value + //! @param theExtUMin [in] Defines whether to extend the face in UMin direction + //! @param theExtUMax [in] Defines whether to extend the face in UMax direction + //! @param theExtVMin [in] Defines whether to extend the face in VMin direction + //! @param theExtVMax [in] Defines whether to extend the face in VMax direction + //! @param theFExtended [in] The extended face + Standard_EXPORT static void ExtendFace(const TopoDS_Face& theF, + const Standard_Real theExtVal, + const Standard_Boolean theExtUMin, + const Standard_Boolean theExtUMax, + const Standard_Boolean theExtVMin, + const Standard_Boolean theExtVMax, + TopoDS_Face& theFExtended); + + protected: diff --git a/src/BRepTools/BRepTools_History.cxx b/src/BRepTools/BRepTools_History.cxx index 6f9ea8a882..8ad7a59adf 100644 --- a/src/BRepTools/BRepTools_History.cxx +++ b/src/BRepTools/BRepTools_History.cxx @@ -214,6 +214,14 @@ Standard_Boolean BRepTools_History::IsRemoved( //purpose : //============================================================================== void BRepTools_History::Merge(const Handle(BRepTools_History)& theHistory23) +{ + Merge(*theHistory23.get()); +} +//============================================================================== +//function : Merge +//purpose : +//============================================================================== +void BRepTools_History::Merge(const BRepTools_History& theHistory23) { // Propagate R23 directly and M23 and G23 fully to M12 and G12. // Remember the propagated shapes. @@ -234,22 +242,22 @@ void BRepTools_History::Merge(const Handle(BRepTools_History)& theHistory23) for (TopTools_ListOfShape::Iterator aSIt2(aL12); aSIt2.More();) { const TopoDS_Shape& aS2 = aSIt2.Value(); - if (theHistory23->IsRemoved(aS2)) + if (theHistory23.IsRemoved(aS2)) { - aL12.Remove(aSIt2); aRPropagated.Add(aS2); + aL12.Remove(aSIt2); } else { - if (theHistory23->myShapeToGenerated.IsBound(aS2)) + if (theHistory23.myShapeToGenerated.IsBound(aS2)) { - add(aAdditions[0], theHistory23->myShapeToGenerated(aS2)); + add(aAdditions[0], theHistory23.myShapeToGenerated(aS2)); aMAndGPropagated.Add(aS2); } - if (theHistory23->myShapeToModified.IsBound(aS2)) + if (theHistory23.myShapeToModified.IsBound(aS2)) { - add(aAdditions[aI], theHistory23->myShapeToModified(aS2)); + add(aAdditions[aI], theHistory23.myShapeToModified(aS2)); aMAndGPropagated.Add(aS2); aL12.Remove(aSIt2); @@ -278,7 +286,7 @@ void BRepTools_History::Merge(const Handle(BRepTools_History)& theHistory23) // Propagate M23 and G23 to M12 and G12 sequentially. const TopTools_DataMapOfShapeListOfShape* aS2ToGAndM[] = - {&theHistory23->myShapeToGenerated, &theHistory23->myShapeToModified}; + {&theHistory23.myShapeToGenerated, &theHistory23.myShapeToModified}; for (Standard_Integer aI = 0; aI < 2; ++aI) { for (TopTools_DataMapOfShapeListOfShape::Iterator aMIt2(*aS2ToGAndM[aI]); @@ -310,13 +318,14 @@ void BRepTools_History::Merge(const Handle(BRepTools_History)& theHistory23) aMIt1.Next(); if (aL12.IsEmpty()) { + myRemoved.Add(aS1); aS1ToGAndM[aI]->UnBind(aS1); } } } // Propagate R23 to R12 sequentially. - for (TopTools_MapOfShape::Iterator aRIt23(theHistory23->myRemoved); + for (TopTools_MapOfShape::Iterator aRIt23(theHistory23.myRemoved); aRIt23.More(); aRIt23.Next()) { const TopoDS_Shape& aS2 = aRIt23.Value(); diff --git a/src/BRepTools/BRepTools_History.hxx b/src/BRepTools/BRepTools_History.hxx index 63f416ce3d..4a17091c65 100644 --- a/src/BRepTools/BRepTools_History.hxx +++ b/src/BRepTools/BRepTools_History.hxx @@ -17,6 +17,7 @@ #define _BRepTools_History_HeaderFile #include +#include #include #include @@ -82,6 +83,51 @@ DEFINE_STANDARD_HANDLE(BRepTools_History, Standard_Transient) //! Tj <= M12(Si), Qk <= M23(Tj) ==> Qk <= M13(Si); class BRepTools_History: public Standard_Transient { +public: //! @name Constructors for History creation + + //! Empty constructor + BRepTools_History() {} + + //! Template constructor for History creation from the algorithm having + //! standard history methods such as IsDeleted(), Modified() and Generated(). + //! @param theArguments [in] Arguments of the algorithm; + //! @param theAlgo [in] The algorithm. + template + BRepTools_History(const TopTools_ListOfShape& theArguments, + TheAlgo& theAlgo) + { + // Map all argument shapes to save them in history + TopTools_IndexedMapOfShape anArgsMap; + TopTools_ListIteratorOfListOfShape aIt(theArguments); + for (; aIt.More(); aIt.Next()) + TopExp::MapShapes(aIt.Value(), anArgsMap); + + // Copy the history for all supported shapes from the algorithm + Standard_Integer i, aNb = anArgsMap.Extent(); + for (i = 1; i <= aNb; ++i) + { + const TopoDS_Shape& aS = anArgsMap(i); + if (!IsSupportedType(aS)) + continue; + + if (theAlgo.IsDeleted(aS)) + { + Remove(aS); + continue; + } + + // Check Modified + const TopTools_ListOfShape& aModified = theAlgo.Modified(aS); + for (aIt.Initialize(aModified); aIt.More(); aIt.Next()) + AddModified(aS, aIt.Value()); + + // Check Generated + const TopTools_ListOfShape& aGenerated = theAlgo.Generated(aS); + for (aIt.Initialize(aGenerated); aIt.More(); aIt.Next()) + AddGenerated(aS, aIt.Value()); + } + } + public: //! The types of the historical relations. @@ -150,6 +196,22 @@ public: //! A method to merge a next history to this history. //! Merges the next history to this history. Standard_EXPORT void Merge(const Handle(BRepTools_History)& theHistory23); + //! Merges the next history to this history. + Standard_EXPORT void Merge(const BRepTools_History& theHistory23); + + //! Template method for merging history of the algorithm having standard + //! history methods such as IsDeleted(), Modified() and Generated() + //! into current history object. + //! @param theArguments [in] Arguments of the algorithm; + //! @param theAlgo [in] The algorithm. + template + void Merge(const TopTools_ListOfShape& theArguments, + TheAlgo& theAlgo) + { + // Create new history object from the given algorithm and merge it into this. + Merge(BRepTools_History(theArguments, theAlgo)); + } + public: //! Define the OCCT RTTI for the type. diff --git a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx index 57d9f03d29..4a30612dc6 100644 --- a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx +++ b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx @@ -1791,17 +1791,19 @@ void ShapeUpgrade_UnifySameDomain::FillHistory() // the history of UnifySameDomain algorithm Handle(BRepTools_History) aUSDHistory = new BRepTools_History(); - // Map all Vertices, Edges and Faces in the input shape + // Map all Vertices, Edges, Faces and Solids in the input shape TopTools_IndexedMapOfShape aMapInputShape; TopExp::MapShapes(myInitShape, TopAbs_VERTEX, aMapInputShape); TopExp::MapShapes(myInitShape, TopAbs_EDGE , aMapInputShape); TopExp::MapShapes(myInitShape, TopAbs_FACE , aMapInputShape); + TopExp::MapShapes(myInitShape, TopAbs_SOLID , aMapInputShape); - // Map all Vertices, Edges and Faces in the result shape + // Map all Vertices, Edges, Faces and Solids in the result shape TopTools_IndexedMapOfShape aMapResultShapes; TopExp::MapShapes(myShape, TopAbs_VERTEX, aMapResultShapes); TopExp::MapShapes(myShape, TopAbs_EDGE , aMapResultShapes); TopExp::MapShapes(myShape, TopAbs_FACE , aMapResultShapes); + TopExp::MapShapes(myShape, TopAbs_SOLID , aMapResultShapes); // Iterate on all input shapes and get their modifications Standard_Integer i, aNb = aMapInputShape.Extent(); @@ -1831,10 +1833,12 @@ void ShapeUpgrade_UnifySameDomain::FillHistory() TopTools_ListIteratorOfListOfShape aItLSIm(aLSImages); for (; aItLSIm.More(); aItLSIm.Next()) { - if (aMapResultShapes.Contains(aItLSIm.Value())) + const TopoDS_Shape& aSIm = aItLSIm.Value(); + if (aMapResultShapes.Contains(aSIm)) { - // Image is found in the result, thus the shape has been modified - aUSDHistory->AddModified(aS, aItLSIm.Value()); + if (!aSIm.IsSame(aS)) + // Image is found in the result, thus the shape has been modified + aUSDHistory->AddModified(aS, aSIm); bRemoved = Standard_False; } } diff --git a/tests/boolean/grids.list b/tests/boolean/grids.list index 5130780959..7b689c6a34 100644 --- a/tests/boolean/grids.list +++ b/tests/boolean/grids.list @@ -27,4 +27,5 @@ 027 gdml_private 028 cells_test 029 splitter -030 history \ No newline at end of file +030 history +031 removefeatures \ No newline at end of file diff --git a/tests/boolean/removefeatures/A1 b/tests/boolean/removefeatures/A1 new file mode 100644 index 0000000000..a7c841c35e --- /dev/null +++ b/tests/boolean/removefeatures/A1 @@ -0,0 +1,50 @@ +pload XDE + +stepread [locate_data_file bug29481_L3.step] s * + +copy s_1 s +explode s f + +compound s_6 s_7 feature1 +compound s_2 s_25 s_1 s_4 feature2 +compound s_24 feature3 +compound s_8 feature4 +compound feature1 feature2 feature3 feature4 gap + +removefeatures res1 s feature1 +checkshape res1 +checkprops res1 -s 2387.42 -v 1060.96 -deps 1.e-7 +checknbshapes res1 -vertex 68 -edge 102 -wire 36 -face 36 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature1 {v e f} + +removefeatures res3 s feature1 feature2 +checkshape res3 +checkprops res3 -s 2391.09 -v 1064.4 -deps 1.e-7 +checknbshapes res3 -vertex 60 -edge 90 -wire 32 -face 32 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature1 {v e f} +CheckIsFeatureRemoved feature2 {e f} + +removefeatures res4 s feature3 +checkshape res4 +checkprops res4 -s 2387.67 -v 1060.68 -deps 1.e-7 +checknbshapes res4 -vertex 70 -edge 105 -wire 37 -face 37 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature3 {v e f} + +removefeatures res5 s feature4 +checkshape res5 +checkprops res5 -s 2387.67 -v 1060.68 -deps 1.e-7 +checknbshapes res5 -vertex 70 -edge 105 -wire 37 -face 37 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature4 {v e f} + +removefeatures res6 s feature3 feature4 +checkshape res6 +checkprops res6 -s 2387.89 -v 1060.71 -deps 1.e-7 +checknbshapes res6 -vertex 68 -edge 102 -wire 36 -face 36 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature3 {v e f} +CheckIsFeatureRemoved feature4 {v e f} + +removefeatures res7 s gap +checkshape res7 +checkprops res7 -s 2392.9 -v 1065.7 -deps 1.e-7 +checknbshapes res7 -vertex 54 -edge 81 -wire 29 -face 29 -shell 1 -solid 1 -t +CheckIsFeatureRemoved gap {v e f} diff --git a/tests/boolean/removefeatures/A2 b/tests/boolean/removefeatures/A2 new file mode 100644 index 0000000000..8e8bfdee7c --- /dev/null +++ b/tests/boolean/removefeatures/A2 @@ -0,0 +1,28 @@ +pload XDE + +stepread [locate_data_file bug29481_L3.step] s * + +copy s_1 s +explode s f + +compound s_32 s_31 s_33 s_30 s_38 feature1 +compound s_34 s_35 s_36 s_29 feature2 +compound feature1 feature2 gap + +removefeatures res1 s feature1 +checkshape res1 +checkprops res1 -s 2387.38 -v 1060.67 -deps 1.e-7 +checknbshapes res1 -vertex 62 -edge 93 -wire 33 -face 33 -shell 1 -solid 1 +CheckIsFeatureRemoved feature1 {v e f} + +removefeatures res2 s feature2 +checkshape res2 +checkprops res2 -s 2387.17 -v 1060.75 -deps 1.e-7 +checknbshapes res2 -vertex 62 -edge 93 -wire 35 -face 34 -shell 1 -solid 1 +CheckIsFeatureRemoved feature2 {v e f} + +removefeatures res3 s gap +checkshape res3 +checkprops res3 -s 2386.99 -v 1060.79 -deps 1.e-7 +checknbshapes res3 -vertex 54 -edge 81 -wire 29 -face 29 -shell 1 -solid 1 +CheckIsFeatureRemoved gap {v e f} diff --git a/tests/boolean/removefeatures/A3 b/tests/boolean/removefeatures/A3 new file mode 100644 index 0000000000..f1dc6c173e --- /dev/null +++ b/tests/boolean/removefeatures/A3 @@ -0,0 +1,14 @@ +pload XDE + +stepread [locate_data_file bug29481_L3.step] s * + +copy s_1 s +explode s f + +compound s_37 s_26 s_27 s_28 gap + +removefeatures res s gap +checkshape res +checkprops res -s 2387.07 -v 1060.76 -deps 1.e-7 +checknbshapes res -vertex 64 -edge 96 -wire 34 -face 34 -shell 1 -solid 1 +CheckIsFeatureRemoved gap {v e f} diff --git a/tests/boolean/removefeatures/A4 b/tests/boolean/removefeatures/A4 new file mode 100644 index 0000000000..f56406a12d --- /dev/null +++ b/tests/boolean/removefeatures/A4 @@ -0,0 +1,30 @@ +pload XDE + +stepread [locate_data_file bug29481_L3.step] s * + +copy s_1 s +explode s f + +compound s_20 feature1 +compound s_16 feature2 +compound s_17 s_18 s_19 feature3 +compound feature1 feature2 feature3 gap + +removefeatures res1 s feature1 feature2 +checkshape res1 +checkprops res1 -s 2387.88 -v 1060.71 -deps 1.e-7 +checknbshapes res1 -vertex 68 -edge 102 -wire 36 -face 36 -shell 1 -solid 1 +CheckIsFeatureRemoved feature1 {v e f} +CheckIsFeatureRemoved feature2 {v e f} + +removefeatures res2 s feature3 +checkshape res2 +checkprops res2 -s 2391.13 -v 1064.08 -deps 1.e-7 +checknbshapes res2 -vertex 66 -edge 99 -wire 35 -face 35 -shell 1 -solid 1 +CheckIsFeatureRemoved feature3 {v e f} + +removefeatures res3 s gap +checkshape res3 +checkprops res3 -s 2392.93 -v 1065.38 -deps 1.e-7 +checknbshapes res3 -vertex 60 -edge 90 -wire 32 -face 32 -shell 1 -solid 1 +CheckIsFeatureRemoved gap {v e f} diff --git a/tests/boolean/removefeatures/A5 b/tests/boolean/removefeatures/A5 new file mode 100644 index 0000000000..f4da7d95c8 --- /dev/null +++ b/tests/boolean/removefeatures/A5 @@ -0,0 +1,14 @@ +pload XDE + +stepread [locate_data_file bug29481_L3.step] s * + +copy s_1 s +explode s f + +compound s_11 s_13 s_12 spike + +removefeatures res s spike +checkshape res +checkprops res -s 2323.49 -v 1037.57 -deps 1.e-7 +checknbshapes res -vertex 64 -edge 96 -wire 34 -face 34 -shell 1 -solid 1 +CheckIsFeatureRemoved spike {v e f} diff --git a/tests/boolean/removefeatures/A6 b/tests/boolean/removefeatures/A6 new file mode 100644 index 0000000000..a9ef3b24a7 --- /dev/null +++ b/tests/boolean/removefeatures/A6 @@ -0,0 +1,27 @@ +pload XDE + +stepread [locate_data_file bug29481_L3.step] s * + +copy s_1 s +explode s f + +compound s_11 s_13 s_12 spike + +removefeatures res s spike +checkshape res +checkprops res -s 2323.49 -v 1037.57 -deps 1.e-7 +checknbshapes res -vertex 64 -edge 96 -wire 34 -face 34 -shell 1 -solid 1 +CheckIsFeatureRemoved spike {v e f} + +# check modification of the top face +rfmodified m5 s_5 +checkprops m5 -s 1089.87 +checknbshapes m5 -vertex 31 -edge 31 -wire 1 -face 1 + +# check modification of the side faces where the spike was located +rfmodified m10 s_10 +rfmodified m14 s_14 + +if {![regexp "same shapes" [compare m10 m14]]} { + puts "Error: incorrect spike removal" +} diff --git a/tests/boolean/removefeatures/A7 b/tests/boolean/removefeatures/A7 new file mode 100644 index 0000000000..e41d7bd966 --- /dev/null +++ b/tests/boolean/removefeatures/A7 @@ -0,0 +1,63 @@ +pload XDE + +stepread [locate_data_file bug29481_L3.step] s * + +copy s_1 s +explode s f + + +# Clear the shape from all features +compound s_24 s_7 s_1 s_2 s_6 s_8 s_4 s_25 s_31 s_30 s_38 s_36 s_34 s_29 s_32 s_33 s_35 s_13 s_12 s_11 s_37 s_27 s_28 s_26 s_20 s_16 s_17 s_18 s_19 features + +removefeatures result s features +checkshape result +checkprops result -s 2333.55 -v 1047.62 -deps 1.e-7 +checknbshapes result -vertex 8 -edge 12 -wire 6 -face 6 -shell 1 -solid 1 +CheckIsFeatureRemoved features {v e f} + +# check modification of the top face +rfmodified m5 s_5 +checkprops m5 -s 1102.76 +checknbshapes m5 -vertex 4 -edge 4 -wire 1 -face 1 + +# check modification of the bottom face +rfmodified m3 s_3 +checkprops m3 -equal m5 +checknbshapes m5 -vertex 4 -edge 4 -wire 1 -face 1 + +# check modification of the side faces +rfmodified m10 s_10 +rfmodified m14 s_14 + +if {![regexp "same shapes" [compare m10 m14]]} { + puts "Error: incorrect feature removal" +} + +checkprops m10 -s 37.43 +checknbshapes m10 -vertex 4 -edge 4 -wire 1 -face 1 + + +rfmodified m22 s_22 +checkprops m22 -equal s_22 + + +rfmodified m9 s_9 +rfmodified m23 s_23 + +if {![regexp "same shapes" [compare m9 m23]]} { + puts "Error: incorrect feature removal" +} + +checkprops m9 -s 26.5893 +checknbshapes m9 -vertex 4 -edge 4 -wire 1 -face 1 + + +rfmodified m15 s_15 +rfmodified m21 s_21 + +if {![regexp "same shapes" [compare m15 m21]]} { + puts "Error: incorrect feature removal" +} + +checkprops m15 -equal m9 +checknbshapes m15 -vertex 4 -edge 4 -wire 1 -face 1 diff --git a/tests/boolean/removefeatures/A8 b/tests/boolean/removefeatures/A8 new file mode 100644 index 0000000000..cbd2440f92 --- /dev/null +++ b/tests/boolean/removefeatures/A8 @@ -0,0 +1,17 @@ +puts "TODO OCC29504 ALL: Faulty shapes in variables faulty_1 to" + +pload XDE + +stepread [locate_data_file bug29481_L3.step] s * + +copy s_1 s +explode s f + +# remove the square protrusio keeping the spherical one +compound s_2 s_25 s_1 s_4 feature + +removefeatures result s feature +checkshape result +checkprops result -s 2386.95 -v 1064.36 -deps 1.e-7 +checknbshapes result -vertex 62 -edge 93 -wire 35 -face 34 -shell 1 -solid 1 +CheckIsFeatureRemoved feature {e f} diff --git a/tests/boolean/removefeatures/A9 b/tests/boolean/removefeatures/A9 new file mode 100644 index 0000000000..32393f3f93 --- /dev/null +++ b/tests/boolean/removefeatures/A9 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ex4.brep] s +explode s f + +# remove the chamfer +removefeatures result s s_2 s_3 +checkshape result +checkprops result -s 334.248 -v 241.372 -deps 1.e-7 +checknbshapes result -vertex 10 -edge 15 -wire 9 -face 8 -shell 1 -solid 1 +CheckIsFeatureRemoved s_2 {v e f} +CheckIsFeatureRemoved s_3 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B1 b/tests/boolean/removefeatures/B1 new file mode 100644 index 0000000000..073307b2e0 --- /dev/null +++ b/tests/boolean/removefeatures/B1 @@ -0,0 +1,37 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# fillet removal +removefeatures result s s_13 +checkshape result +checkprops result -s 463.068 -v 194.214 -deps 1.e-7 +checknbshapes result -vertex 32 -edge 53 -wire 24 -face 21 -shell 1 -solid 1 +CheckIsFeatureRemoved s_13 {v e f} + +# check modification of the side faces +rfmodified m2 s_2 +checkprops m2 -s 20 +checknbshapes m2 -vertex 4 -edge 4 -wire 1 -face 1 + +rfmodified m12 s_12 +checkprops m12 -s 8 +checknbshapes m12 -vertex 4 -edge 4 -wire 1 -face 1 + +rfmodified m17 s_17 +checkprops m17 -s 10 +checknbshapes m17 -vertex 4 -edge 4 -wire 1 -face 1 + +rfgenerated g17 s_17 +checkprops g17 -l 12 + +explode s_17 e +rfmodified m17_1 s_17_1 +checkprops m17_1 -l 1 +rfmodified m17_3 s_17_3 +checkprops m17_3 -l 1 + +# check modification of the top face +rfmodified m1 s_1 +checkprops m1 -s 172.551 + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B2 b/tests/boolean/removefeatures/B2 new file mode 100644 index 0000000000..42604ea15b --- /dev/null +++ b/tests/boolean/removefeatures/B2 @@ -0,0 +1,29 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# chamfer removal +removefeatures result s s_14 +checkshape result +checkprops result -s 462.33 -v 194.594 -deps 1.e-7 +checknbshapes result -vertex 34 -edge 54 -wire 24 -face 21 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_14 {e f} + +# check modification of the top face +rfmodified m1 s_1 +checkprops m1 -s 171.478 +checknbshapes m1 -vertex 14 -edge 14 -wire 3 -face 1 + +rfgenerated g1 s_1 +checknbshapes g1 -vertex 1 -edge 1 +checkprops g1 -l 6.28319 + +# check modification of the cylindrical face +rfmodified m20 s_20 +checkprops m20 -s 6.28319 +checknbshapes m20 -vertex 2 -edge 3 -wire 1 -face 1 + +rfgenerated g20 s_20 +checknbshapes g20 -vertex 1 -edge 1 +checkprops g20 -equal g1 + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B3 b/tests/boolean/removefeatures/B3 new file mode 100644 index 0000000000..acb40c4d35 --- /dev/null +++ b/tests/boolean/removefeatures/B3 @@ -0,0 +1,29 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# blend removal +removefeatures result s s_15 +checkshape result +checkprops result -s 462.273 -v 193.127 -deps 1.e-7 +checknbshapes result -vertex 34 -edge 54 -wire 24 -face 21 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_15 {e f} + +# check modification of the top face +rfmodified m1 s_1 +checkprops m1 -s 172.452 +checknbshapes m1 -vertex 14 -edge 14 -wire 3 -face 1 + +rfgenerated g1 s_1 +checknbshapes g1 -vertex 1 -edge 1 +checkprops g1 -l 6.28319 + +# check modification of the cylindrical face +rfmodified m21 s_21 +checkprops m21 -s 12.5664 +checknbshapes m21 -vertex 2 -edge 3 -wire 1 -face 1 + +rfgenerated g21 s_21 +checknbshapes g21 -vertex 1 -edge 1 +checkprops g21 -equal g1 + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B4 b/tests/boolean/removefeatures/B4 new file mode 100644 index 0000000000..bf79f42586 --- /dev/null +++ b/tests/boolean/removefeatures/B4 @@ -0,0 +1,37 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +removefeatures result s s_4 +checkshape result +checkprops result -s 462.815 -v 195.248 -deps 1.e-7 +checknbshapes result -vertex 31 -edge 50 -wire 23 -face 20 -shell 1 -solid 1 +CheckIsFeatureRemoved s_4 {v e f} + +# check modification of the top face +rfmodified m1 s_1 +checkprops m1 -s 169.122 +checknbshapes m1 -vertex 12 -edge 12 -wire 3 -face 1 + +# check modification of the side faces +rfmodified m3 s_3 +rfmodified m5 s_5 + +if {![regexp "same shapes" [compare m3 m5]]} { + puts "Error: incorrect feature removal" +} + +checkprops m3 -s 9.75 +checknbshapes m3 -vertex 6 -edge 6 -wire 1 -face 1 + +explode s_3 e +explode s_5 e +rfmodified m3_4 s_3_4 +rfmodified m5_2 s_5_2 + +if {![regexp "same shapes" [compare m3_4 m5_2]]} { + puts "Error: incorrect feature removal" +} + +checkprops m3_4 -l 9.5 + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B5 b/tests/boolean/removefeatures/B5 new file mode 100644 index 0000000000..0d18a48c23 --- /dev/null +++ b/tests/boolean/removefeatures/B5 @@ -0,0 +1,22 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# removal of the step +removefeatures result s s_6 s_18 +checkshape result +checkprops result -s 461.315 -v 196.178 -deps 1.e-7 +checknbshapes result -vertex 30 -edge 50 -wire 23 -face 20 -shell 1 -solid 1 +CheckIsFeatureRemoved s_6 {v e f} +CheckIsFeatureRemoved s_18 {v e f} + +# check modification of the top face +rfmodified m1 s_1 +checkprops m1 -s 172.551 +checknbshapes m1 -vertex 14 -edge 14 -wire 3 -face 1 + +# check modification of the side face +rfmodified m19 s_19 +checkprops m19 -s 10 +checknbshapes m19 -vertex 4 -edge 4 -wire 1 -face 1 + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B6 b/tests/boolean/removefeatures/B6 new file mode 100644 index 0000000000..24436f9097 --- /dev/null +++ b/tests/boolean/removefeatures/B6 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# removal of the sphere +removefeatures result s s_8 s_9 +checkshape result +checkprops result -s 460.84 -v 194.168 -deps 1.e-7 +checknbshapes result -vertex 31 -edge 49 -wire 23 -face 20 -shell 1 -solid 1 +CheckIsFeatureRemoved s_8 {v e f} +CheckIsFeatureRemoved s_9 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B7 b/tests/boolean/removefeatures/B7 new file mode 100644 index 0000000000..d4ffb57507 --- /dev/null +++ b/tests/boolean/removefeatures/B7 @@ -0,0 +1,24 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# removal of the square gap, keeping the sphere. + +removefeatures result s s_7 s_10 +checkshape result +checkprops result -s 466.126 -v 197.014 -deps 1.e-7 +checknbshapes result -vertex 28 -edge 43 -wire 22 -face 18 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_7 {e f} +CheckIsFeatureRemoved s_10 {e f} + +# check modification of the side faces +rfmodified m12 s_12 +rfmodified m19 s_19 + +if {![regexp "same shapes" [compare m12 m19]]} { + puts "Error: incorrect feature removal" +} + +checkprops m12 -s 13.9463 +checknbshapes m12 -vertex 7 -edge 7 -wire 1 -face 1 + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B8 b/tests/boolean/removefeatures/B8 new file mode 100644 index 0000000000..053b6fa81f --- /dev/null +++ b/tests/boolean/removefeatures/B8 @@ -0,0 +1,31 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# removal of the hole in the shape + +removefeatures result s s_14 s_20 +checkshape result +checkprops result -s 462.33 -v 197.735 -deps 1.e-7 +checknbshapes result -vertex 32 -edge 51 -wire 21 -face 20 -shell 1 -solid 1 +CheckIsFeatureRemoved s_14 {v e f} +CheckIsFeatureRemoved s_20 {v e f} + +# check modification of the top and bottom faces +rfmodified m1 s_1 +checkprops m1 -s 174.62 +checknbshapes m1 -vertex 13 -edge 13 -wire 2 -face 1 + +rfmodified m16 s_16 +checkprops m16 -s 194.429 +checknbshapes m16 -vertex 10 -edge 10 -wire 1 -face 1 + +# check that no new intersections have been created +if {![regexp "No shapes were generated" [rfgenerated g1 s_1]]} { + puts "Error: incorrect feature removal" +} + +if {![regexp "No shapes were generated" [rfgenerated g16 s_16]]} { + puts "Error: incorrect feature removal" +} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/B9 b/tests/boolean/removefeatures/B9 new file mode 100644 index 0000000000..80ff23d94f --- /dev/null +++ b/tests/boolean/removefeatures/B9 @@ -0,0 +1,24 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# removal of the cylindrical spike on the shape + +removefeatures result s s_15 s_21 s_22 +checkshape result +checkprops result -s 449.707 -v 186.844 -deps 1.e-7 +checknbshapes result -vertex 31 -edge 51 -wire 21 -face 19 -shell 1 -solid 1 +CheckIsFeatureRemoved s_15 {v e f} +CheckIsFeatureRemoved s_21 {v e f} +CheckIsFeatureRemoved s_22 {v e f} + +# check modification of the top face +rfmodified m1 s_1 +checkprops m1 -s 175.593 +checknbshapes m1 -vertex 13 -edge 13 -wire 2 -face 1 + +# check that no new intersections have been created +if {![regexp "No shapes were generated" [rfgenerated g1 s_1]]} { + puts "Error: incorrect feature removal" +} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/C1 b/tests/boolean/removefeatures/C1 new file mode 100644 index 0000000000..00e49eaa59 --- /dev/null +++ b/tests/boolean/removefeatures/C1 @@ -0,0 +1,29 @@ +restore [locate_data_file bug29481_ex1.brep] s +explode s f + +# remove all features from the shape + +# remove the step first +compound s_6 s_18 step + +removefeatures res s step + +compound s_4 s_15 s_21 s_22 s_7 s_11 s_8 s_9 s_10 s_14 s_20 s_13 features + +# check modification of the features +compound mf +foreach f [explode features f] { + if { [regexp "The shape has not been modified" [rfmodified m $f]]} { + add $f mf + } else { + add m mf + } +} + +removefeatures result res mf +checkshape result +checkprops result -s 460 -v 200 +checknbshapes result -vertex 8 -edge 12 -wire 6 -face 6 -shell 1 -solid 1 +CheckIsFeatureRemoved mf {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/C2 b/tests/boolean/removefeatures/C2 new file mode 100644 index 0000000000..80625a3449 --- /dev/null +++ b/tests/boolean/removefeatures/C2 @@ -0,0 +1,29 @@ +restore [locate_data_file bug29481_ex2.brep] s +explode s f + +# remove the gap +compound s_7 s_8 s_9 s_10 gap +removefeatures res1 s gap +checkshape res1 +checkprops res1 -s 624 -v 992 +checknbshapes res1 -vertex 16 -edge 24 -wire 12 -face 12 -shell 2 -solid 1 +CheckIsFeatureRemoved gap {v e f} + + +# remove hole +explode s +removefeatures res2 s s_2 +checkshape res2 +checkprops res2 -s 608 -v 992 +checknbshapes res2 -vertex 16 -edge 24 -wire 10 -face 10 -shell 1 -solid 1 +CheckIsFeatureRemoved s_2 {v e f} + + +# remove both gap and hole +removefeatures result s gap s_2 +checkshape result +checkprops result -s 600 -v 1000 +checknbshapes result -vertex 8 -edge 12 -wire 6 -face 6 -shell 1 -solid 1 +CheckIsFeatureRemoved gap {v e f} +CheckIsFeatureRemoved s_2 {v e f} + diff --git a/tests/boolean/removefeatures/C3 b/tests/boolean/removefeatures/C3 new file mode 100644 index 0000000000..a9e8229313 --- /dev/null +++ b/tests/boolean/removefeatures/C3 @@ -0,0 +1,21 @@ +restore [locate_data_file bug29481_ex3.brep] s +explode s f + +# remove the gap in both solids +compound s_7 s_8 s_9 s_11 s_12 s_17 gap +removefeatures result s gap +checkshape result +checkprops result -s 1200 -v 2000 +checknbshapes result -vertex 12 -edge 20 -wire 11 -face 11 -shell 2 -solid 2 +CheckIsFeatureRemoved gap {v e f} + +# check that the common face is still shared +if {![regexp "OK" [bopcheck result]]} { + puts "Error: sharing is lost after removal" +} + +# check modification of the common face +rfmodified m6 s_6 +checkprops m6 -s 100 +checknbshapes m6 -vertex 4 -edge 4 -wire 1 -face 1 + diff --git a/tests/boolean/removefeatures/C4 b/tests/boolean/removefeatures/C4 new file mode 100644 index 0000000000..6555c0b208 --- /dev/null +++ b/tests/boolean/removefeatures/C4 @@ -0,0 +1,31 @@ +restore [locate_data_file bug29481_boxes.brep] s +explode s f + +# remove the hole inside compsolid + +compound s_30 s_31 s_32 s_60 s_39 s_54 s_48 s_58 s_7 s_12 s_46 s_25 s_21 s_40 s_9 s_38 s_45 s_13 s_59 s_8 s_22 s_51 s_52 s_18 hole +removefeatures result s hole +checkshape result +checkprops result -s 4800 -v 8000 +checknbshapes result -vertex 27 -edge 54 -wire 36 -face 36 -shell 8 -solid 8 +CheckIsFeatureRemoved hole {v e f} + +# check that the shape is still a compsolid +if {![regexp "COMPSOLID" [whatis result]]} { + puts "Error: the type of input shape is lost during feature removal" +} + +# check that the sharing is kept +if {![regexp "OK" [bopcheck result]]} { + puts "Error: sharing is lost after feature removal" +} + +# check modification of the solids +foreach solid [explode s so] { + rfmodified msol $solid + checkprops msol -s 600 -v 1000 + checknbshapes msol -vertex 8 -edge 12 -wire 6 -face 6 -shell 1 -solid 1 -t + + bcommon com msol $solid + checkprops com -equal $solid +} diff --git a/tests/boolean/removefeatures/C5 b/tests/boolean/removefeatures/C5 new file mode 100644 index 0000000000..0f185db626 --- /dev/null +++ b/tests/boolean/removefeatures/C5 @@ -0,0 +1,47 @@ +restore [locate_data_file bug29481_ex3.brep] s +explode s f + +# remove the gaps in each solid +compound s_7 s_8 s_9 gap1 +compound s_11 s_12 s_17 gap2 + +removefeatures res1 s gap1 +checkshape res1 +checkprops res1 -s 1200 -v 1875 +checknbshapes res1 -vertex 21 -edge 35 -wire 17 -face 17 -shell 2 -solid 2 +CheckIsFeatureRemoved gap1 {e f} + +# check that the common face is still shared +if {![regexp "OK" [bopcheck res1]]} { + puts "Error: sharing is lost after removal" +} + +# check modification of the common face +rfmodified m6 s_6 +checkprops m6 -s 100 + +# check modification of the solid 1 +explode s +rfmodified m1 s_1 +checkprops m1 -s 600 -v 1000 + + +removefeatures res2 s gap2 +checkshape res2 +checkprops res2 -s 1200 -v 1875 +checknbshapes res2 -vertex 21 -edge 35 -wire 17 -face 17 -shell 2 -solid 2 +CheckIsFeatureRemoved gap2 {e f} + +# check that the common face is still shared +if {![regexp "OK" [bopcheck res2]]} { + puts "Error: sharing is lost after removal" +} + +# check modification of the common face +rfmodified m6 s_6 +checkprops m6 -s 100 + +# check modification of the solid 1 +explode s +rfmodified m2 s_2 +checkprops m2 -s 600 -v 1000 diff --git a/tests/boolean/removefeatures/C6 b/tests/boolean/removefeatures/C6 new file mode 100644 index 0000000000..4025f6782e --- /dev/null +++ b/tests/boolean/removefeatures/C6 @@ -0,0 +1,11 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +removefeatures result s s_22 s_24 +checkshape result +checkprops result -s 441102 -v 8.18199e+006 -deps 1.e-7 +checknbshapes result -vertex 127 -edge 192 -wire 115 -face 85 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_22 {v e f} +CheckIsFeatureRemoved s_24 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/C7 b/tests/boolean/removefeatures/C7 new file mode 100644 index 0000000000..5a50774bd8 --- /dev/null +++ b/tests/boolean/removefeatures/C7 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +compound s_52 s_23 s_22 s_54 s_24 s_53 cyl + +removefeatures result s cyl +checkshape result +checkprops result -s 439513 -v 8.11395e+006 -deps 1.e-7 +checknbshapes result -vertex 119 -edge 180 -wire 111 -face 81 -shell 1 -solid 1 -t +CheckIsFeatureRemoved cyl {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/C8 b/tests/boolean/removefeatures/C8 new file mode 100644 index 0000000000..4ad7f0fd23 --- /dev/null +++ b/tests/boolean/removefeatures/C8 @@ -0,0 +1,10 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +removefeatures result s s_83 +checkshape result +checkprops result -s 441340 -v 8.18282e+006 -deps 1.e-7 +checknbshapes result -vertex 130 -edge 196 -wire 116 -face 86 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_83 {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/C9 b/tests/boolean/removefeatures/C9 new file mode 100644 index 0000000000..50fdc12462 --- /dev/null +++ b/tests/boolean/removefeatures/C9 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +compound s_51 s_17 s_14 s_15 s_16 cyls + +removefeatures result s cyls +checkshape result +checkprops result -s 422114 -v 8.34108e+006 -deps 1.e-7 +checknbshapes result -vertex 121 -edge 183 -wire 102 -face 82 -shell 1 -solid 1 -t +CheckIsFeatureRemoved cyls {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D1 b/tests/boolean/removefeatures/D1 new file mode 100644 index 0000000000..db668488c8 --- /dev/null +++ b/tests/boolean/removefeatures/D1 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +compound s_66 s_60 s_63 s_77 s_76 s_62 s_68 s_67 s_65 s_75 s_61 s_78 s_64 s_73 s_79 s_81 s_80 s_74 cyls + +removefeatures result s cyls +checkshape result +checkprops result -s 415106 -v 8.28188e+006 -deps 1.e-7 +checknbshapes result -vertex 113 -edge 171 -wire 90 -face 69 -shell 1 -solid 1 -t +CheckIsFeatureRemoved cyls {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D2 b/tests/boolean/removefeatures/D2 new file mode 100644 index 0000000000..6943273d04 --- /dev/null +++ b/tests/boolean/removefeatures/D2 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +compound s_45 s_57 s_32 s_59 s_43 s_31 s_33 s_47 gaps + +removefeatures result s gaps +checkshape result +checkprops result -s 440693 -v 8.18581e+006 -deps 1.e-7 +checknbshapes result -vertex 115 -edge 174 -wire 109 -face 79 -shell 1 -solid 1 -t +CheckIsFeatureRemoved gaps {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D3 b/tests/boolean/removefeatures/D3 new file mode 100644 index 0000000000..6a83f23431 --- /dev/null +++ b/tests/boolean/removefeatures/D3 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +compound s_28 s_26 s_32 s_35 s_47 s_57 s_12 s_31 s_58 s_48 s_34 s_33 s_39 s_44 s_29 s_43 s_41 s_56 s_11 s_46 s_59 s_40 s_38 s_27 s_45 s_30 s_37 s_42 s_36 s_4 s_10 s_5 s_3 s_13 gaps + +removefeatures result s gaps +checkshape result +checkprops result -s 433947 -v 8.26107e+006 -deps 1.e-7 +checknbshapes result -vertex 71 -edge 107 -wire 80 -face 53 -shell 1 -solid 1 -t +CheckIsFeatureRemoved gaps {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D4 b/tests/boolean/removefeatures/D4 new file mode 100644 index 0000000000..7aff41163c --- /dev/null +++ b/tests/boolean/removefeatures/D4 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +compound s_86 s_25 s_72 s_55 bottom + +removefeatures result s bottom +checkshape result +checkprops result -s 439076 -v 8.27381e+006 -deps 1.e-7 +checknbshapes result -vertex 127 -edge 192 -wire 111 -face 83 -shell 1 -solid 1 -t +CheckIsFeatureRemoved bottom {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D5 b/tests/boolean/removefeatures/D5 new file mode 100644 index 0000000000..449ed5ba39 --- /dev/null +++ b/tests/boolean/removefeatures/D5 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +compound s_87 s_69 s_82 cyl + +removefeatures result s cyl +checkshape result +checkprops result -s 410701 -v 8.98858e+006 -deps 1.e-7 +checknbshapes result -vertex 127 -edge 192 -wire 111 -face 84 -shell 1 -solid 1 -t +CheckIsFeatureRemoved cyl {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D6 b/tests/boolean/removefeatures/D6 new file mode 100644 index 0000000000..7afc8f623d --- /dev/null +++ b/tests/boolean/removefeatures/D6 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +removefeatures result s s_83 s_70 s_85 +checkshape result +checkprops result -s 427464 -v 8.0484e+006 -deps 1.e-7 +checknbshapes result -vertex 128 -edge 193 -wire 113 -face 84 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_83 {v e f} +CheckIsFeatureRemoved s_70 {v e f} +CheckIsFeatureRemoved s_85 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D7 b/tests/boolean/removefeatures/D7 new file mode 100644 index 0000000000..8eeb0ce141 --- /dev/null +++ b/tests/boolean/removefeatures/D7 @@ -0,0 +1,16 @@ +restore [locate_data_file bug28840_5.brep] s +explode s f + +compound s_3 s_8 s_29 s_2 s_1 feature1 +compound s_15 s_10 s_6 s_18 s_9 s_13 s_11 feature2 +compound s_19 s_14 s_7 s_16 s_17 s_12 feature3 + +removefeatures result s feature1 feature2 feature3 +checkshape result +checkprops result -s 19692.7 -v 142463 -deps 1.e-7 +checknbshapes result -vertex 16 -edge 24 -wire 12 -face 11 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature1 {v e f} +CheckIsFeatureRemoved feature2 {v e f} +CheckIsFeatureRemoved feature3 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D8 b/tests/boolean/removefeatures/D8 new file mode 100644 index 0000000000..e0b6c6a4c7 --- /dev/null +++ b/tests/boolean/removefeatures/D8 @@ -0,0 +1,12 @@ +restore [locate_data_file bug28840_5.brep] s +explode s f + +compound s_3 s_8 s_29 s_2 s_1 feature1 + +removefeatures result s feature1 +checkshape result +checkprops result -s 19165.2 -v 142408 -deps 1.e-7 +checknbshapes result -vertex 31 -edge 53 -wire 25 -face 24 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature1 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/D9 b/tests/boolean/removefeatures/D9 new file mode 100644 index 0000000000..d295603d8c --- /dev/null +++ b/tests/boolean/removefeatures/D9 @@ -0,0 +1,12 @@ +restore [locate_data_file bug28840_5.brep] s +explode s f + +compound s_15 s_10 s_6 s_18 s_9 s_13 s_11 feature2 + +removefeatures result s feature2 +checkshape result +checkprops result -s 18606.8 -v 138974 -deps 1.e-7 +checknbshapes result -vertex 31 -edge 51 -wire 23 -face 22 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature2 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E1 b/tests/boolean/removefeatures/E1 new file mode 100644 index 0000000000..e9eacf7630 --- /dev/null +++ b/tests/boolean/removefeatures/E1 @@ -0,0 +1,50 @@ +restore [locate_data_file bug28840_5.brep] s +explode s f + +compound s_3 s_8 s_29 s_2 s_1 feature1 +compound s_15 s_10 s_6 s_18 s_9 s_13 s_11 feature2 +compound s_19 s_14 s_7 s_16 s_17 s_12 feature3 + +# remove first feature +removefeatures res1 s feature1 +checkshape res1 +checkprops res1 -s 19165.2 -v 142408 -deps 1.e-7 +checknbshapes res1 -vertex 31 -edge 53 -wire 25 -face 24 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature1 {v e f} + + +# prepare for removal of the second feature +compound mfeature2 +foreach f [explode feature2 f] { + if {[regexp "has not been modified" [rfmodified fm $f]]} { + add $f mfeature2 + } else { + add fm mfeature2 + } +} + +# remove second feature +removefeatures res2 res1 mfeature2 +checkshape res2 +checkprops res2 -s 19396.1 -v 141748 -deps 1.e-7 +checknbshapes res2 -vertex 24 -edge 39 -wire 18 -face 17 -shell 1 -solid 1 -t +CheckIsFeatureRemoved mfeature2 {v e f} + +# prepare for removal of the third feature +compound mfeature3 +foreach f [explode feature3 f] { + if {[regexp "has not been modified" [rfmodified fm $f]]} { + add $f mfeature3 + } else { + add fm mfeature3 + } +} + +# remove the third feature +removefeatures result res2 mfeature3 +checkshape result +checkprops result -s 19692.7 -v 142463 -deps 1.e-7 +checknbshapes result -vertex 16 -edge 24 -wire 12 -face 11 -shell 1 -solid 1 -t +CheckIsFeatureRemoved mfeature3 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E2 b/tests/boolean/removefeatures/E2 new file mode 100644 index 0000000000..2ded430e8f --- /dev/null +++ b/tests/boolean/removefeatures/E2 @@ -0,0 +1,11 @@ +restore [locate_data_file bug28840_5.brep] s +explode s f + +removefeatures result s s_11 s_12 +checkshape result +checkprops result -s 18419.9 -v 139777 -deps 1.e-7 +checknbshapes result -vertex 36 -edge 61 -wire 28 -face 27 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_11 {e f} +CheckIsFeatureRemoved s_12 {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E3 b/tests/boolean/removefeatures/E3 new file mode 100644 index 0000000000..192805fa98 --- /dev/null +++ b/tests/boolean/removefeatures/E3 @@ -0,0 +1,11 @@ +restore [locate_data_file bug28840_5.brep] s +explode s f + +removefeatures result s s_15 s_17 +checkshape result +checkprops result -s 18427.3 -v 139789 -deps 1.e-7 +checknbshapes result -vertex 35 -edge 60 -wire 28 -face 27 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_15 {e f} +CheckIsFeatureRemoved s_17 {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E4 b/tests/boolean/removefeatures/E4 new file mode 100644 index 0000000000..a0dddec869 --- /dev/null +++ b/tests/boolean/removefeatures/E4 @@ -0,0 +1,12 @@ +restore [locate_data_file bug28840_5.brep] s +explode s f + +removefeatures result s s_7 s_9 s_16 +checkshape result +checkprops result -s 18421.8 -v 139780 -deps 1.e-7 +checknbshapes result -vertex 35 -edge 58 -wire 27 -face 26 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_7 {e f} +CheckIsFeatureRemoved s_9 {e f} +CheckIsFeatureRemoved s_16 {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E5 b/tests/boolean/removefeatures/E5 new file mode 100644 index 0000000000..a066d908fb --- /dev/null +++ b/tests/boolean/removefeatures/E5 @@ -0,0 +1,12 @@ +restore [locate_data_file bug28840_6.brep] s +explode s f + +removefeatures result s s_6 s_7 s_9 +checkshape result +checkprops result -s 19274.8 -v 140565 -deps 1.e-7 +checknbshapes result -vertex 18 -edge 27 -wire 13 -face 12 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_6 {v e f} +CheckIsFeatureRemoved s_7 {v e f} +CheckIsFeatureRemoved s_9 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E6 b/tests/boolean/removefeatures/E6 new file mode 100644 index 0000000000..a10a956307 --- /dev/null +++ b/tests/boolean/removefeatures/E6 @@ -0,0 +1,13 @@ +restore [locate_data_file bug28840_12.brep] s +explode s f + +removefeatures result s s_7 s_6 s_8 s_10 +checkshape result +checkprops result -s 19274.8 -v 140565 -deps 1.e-7 +checknbshapes result -vertex 18 -edge 27 -wire 13 -face 12 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_6 {v e f} +CheckIsFeatureRemoved s_7 {v e f} +CheckIsFeatureRemoved s_8 {v e f} +CheckIsFeatureRemoved s_10 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E7 b/tests/boolean/removefeatures/E7 new file mode 100644 index 0000000000..367d06b9c2 --- /dev/null +++ b/tests/boolean/removefeatures/E7 @@ -0,0 +1,11 @@ +restore [locate_data_file bug28840_1.brep] s +explode s f + +removefeatures result s s_3 s_7 +checkshape result +checkprops result -s 33645 -v 270128 -deps 1.e-7 +checknbshapes result -vertex 4 -edge 6 -wire 6 -face 5 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_3 {e f} +CheckIsFeatureRemoved s_7 {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E8 b/tests/boolean/removefeatures/E8 new file mode 100644 index 0000000000..b8d836732d --- /dev/null +++ b/tests/boolean/removefeatures/E8 @@ -0,0 +1,15 @@ +pload XDE + +stepread [locate_data_file bug26689_nist_ctc_01_asme1_ap242.stp] s * +copy s_1 s +explode s f + +compound s_146 s_135 s_149 s_141 s_132 s_140 s_144 s_130 s_122 s_148 s_134 s_139 s_147 s_127 s_145 s_120 s_150 s_129 s_136 s_125 s_142 s_121 s_126 s_151 s_124 s_143 s_138 s_118 s_133 s_137 s_131 s_119 s_123 s_128 nist + +removefeatures result s nist +checkshape result +checkprops result -s 807081 -v 1.46448e+007 -deps 1.e-7 +checknbshapes result -vertex 206 -edge 322 -wire 140 -face 117 -shell 1 -solid 1 -t +CheckIsFeatureRemoved nist {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/E9 b/tests/boolean/removefeatures/E9 new file mode 100644 index 0000000000..99ae4b8112 --- /dev/null +++ b/tests/boolean/removefeatures/E9 @@ -0,0 +1,15 @@ +pload XDE + +stepread [locate_data_file bug26689_nist_ctc_01_asme1_ap242.stp] s * +copy s_1 s +explode s f + +compound s_71 s_93 s_74 s_92 s_75 s_72 s_90 s_91 s_73 s_2 s_1 s_76 s_89 s_94 s_95 s_96 holes + +removefeatures result s holes +checkshape result +checkprops result -s 759902 -v 1.51258e+007 -deps 1.e-7 +checknbshapes result -vertex 238 -edge 370 -wire 144 -face 135 -shell 1 -solid 1 -t +CheckIsFeatureRemoved holes {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F1 b/tests/boolean/removefeatures/F1 new file mode 100644 index 0000000000..7d16302a26 --- /dev/null +++ b/tests/boolean/removefeatures/F1 @@ -0,0 +1,17 @@ +pload XDE + +stepread [locate_data_file bug26689_nist_ctc_01_asme1_ap242.stp] s * +copy s_1 s +explode s f + +compound s_100 s_99 s_101 s_98 s_102 s_103 fillet +compound s_115 s_112 s_116 s_114 s_111 s_113 blend + +removefeatures result s fillet blend +checkshape result +checkprops result -s 809750 -v 1.46451e+007 -deps 1.e-7 +checknbshapes result -vertex 258 -edge 394 -wire 164 -face 139 -shell 1 -solid 1 -t +CheckIsFeatureRemoved fillet {e f} +CheckIsFeatureRemoved blend {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F2 b/tests/boolean/removefeatures/F2 new file mode 100644 index 0000000000..eb173c7008 --- /dev/null +++ b/tests/boolean/removefeatures/F2 @@ -0,0 +1,15 @@ +pload XDE + +stepread [locate_data_file bug26689_nist_ctc_01_asme1_ap242.stp] s * +copy s_1 s +explode s f + +compound s_34 s_12 s_32 s_40 s_37 s_16 s_18 s_17 s_39 s_41 s_31 s_14 s_35 s_13 s_38 s_33 gaps + +removefeatures result s gaps +checkshape result +checkprops result -s 813251 -v 1.49885e+007 -deps 1.e-7 +checknbshapes result -vertex 230 -edge 358 -wire 156 -face 131 -shell 1 -solid 1 -t +CheckIsFeatureRemoved gaps {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F3 b/tests/boolean/removefeatures/F3 new file mode 100644 index 0000000000..bfd87039ef --- /dev/null +++ b/tests/boolean/removefeatures/F3 @@ -0,0 +1,15 @@ +pload XDE + +stepread [locate_data_file bug26689_nist_ctc_01_asme1_ap242.stp] s * +copy s_1 s +explode s f + +compound s_86 s_83 s_81 s_82 s_84 s_85 s_80 s_78 s_79 s_88 s_77 s_87 holes + +removefeatures result s holes +checkshape result +checkprops result -s 798285 -v 1.51114e+007 -deps 1.e-7 +checknbshapes result -vertex 246 -edge 382 -wire 160 -face 139 -shell 1 -solid 1 -t +CheckIsFeatureRemoved holes {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F4 b/tests/boolean/removefeatures/F4 new file mode 100644 index 0000000000..e7bc71dd71 --- /dev/null +++ b/tests/boolean/removefeatures/F4 @@ -0,0 +1,15 @@ +pload XDE + +stepread [locate_data_file bug26689_nist_ctc_01_asme1_ap242.stp] s * +copy s_1 s +explode s f + +compound s_10 s_66 s_43 s_65 s_63 s_64 s_69 s_29 s_68 s_70 s_20 s_67 fillets + +removefeatures result s fillets +checkshape result +checkprops result -s 811691 -v 1.46014e+007 -deps 1.e-7 +checknbshapes result -vertex 246 -edge 382 -wire 164 -face 139 -shell 1 -solid 1 -t +CheckIsFeatureRemoved fillets {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F5 b/tests/boolean/removefeatures/F5 new file mode 100644 index 0000000000..54bf2985b4 --- /dev/null +++ b/tests/boolean/removefeatures/F5 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_window_slots.brep] s +explode s f + +compound s_84 s_68 s_61 s_57 s_64 s_56 s_62 s_67 s_76 s_85 s_63 s_49 s_52 s_80 s_59 s_70 s_82 s_54 s_86 s_66 s_55 s_69 s_72 s_73 s_58 s_74 s_51 s_77 s_78 s_79 s_81 s_83 s_50 s_65 s_53 s_75 s_71 s_60 s_15 s_33 s_40 s_22 s_13 s_98 s_18 s_35 s_17 s_37 s_27 s_93 s_26 s_24 s_29 s_12 s_94 s_19 s_21 s_39 s_97 s_91 s_96 s_34 s_20 s_23 s_14 s_16 s_92 s_25 s_95 s_31 s_38 s_28 s_99 s_90 s_36 s_32 s_30 pockets + +removefeatures result s pockets +checkshape result +checkprops result -s 22976.2 -v 68900 -deps 1.e-7 +checknbshapes result -vertex 38 -edge 58 -wire 22 -face 21 -shell 1 -solid 1 -t +CheckIsFeatureRemoved pockets {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F6 b/tests/boolean/removefeatures/F6 new file mode 100644 index 0000000000..badc45eb90 --- /dev/null +++ b/tests/boolean/removefeatures/F6 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_window_slots.brep] s +explode s f + +compound s_11 s_10 s_46 s_45 s_47 hole + +removefeatures result s hole +checkshape result +checkprops result -s 32410 -v 108650 -deps 1.e-7 +checknbshapes result -vertex 104 -edge 156 -wire 54 -face 54 -shell 1 -solid 1 -t +CheckIsFeatureRemoved hole {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F7 b/tests/boolean/removefeatures/F7 new file mode 100644 index 0000000000..0c827faa19 --- /dev/null +++ b/tests/boolean/removefeatures/F7 @@ -0,0 +1,12 @@ +restore [locate_data_file bug29481_window_slots.brep] s +explode s f + +compound s_8 s_9 s_89 s_88 s_7 gap + +removefeatures result s gap +checkshape result +checkprops result -s 23746.2 -v 69550 -deps 1.e-7 +checknbshapes result -vertex 184 -edge 276 -wire 94 -face 93 -shell 1 -solid 1 -t +CheckIsFeatureRemoved gap {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F8 b/tests/boolean/removefeatures/F8 new file mode 100644 index 0000000000..754bde1e91 --- /dev/null +++ b/tests/boolean/removefeatures/F8 @@ -0,0 +1,11 @@ +restore [locate_data_file bug29481_window_slots.brep] s +explode s f + +removefeatures result s s_10 s_46 +checkshape result +checkprops result -s 24110 -v 66650 -deps 1.e-7 +checknbshapes result -vertex 190 -edge 286 -wire 98 -face 97 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_10 {v e f} +CheckIsFeatureRemoved s_46 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/F9 b/tests/boolean/removefeatures/F9 new file mode 100644 index 0000000000..8c946b4b3b --- /dev/null +++ b/tests/boolean/removefeatures/F9 @@ -0,0 +1,11 @@ +restore [locate_data_file bug28840_5.brep] s +explode s f + +removefeatures result s s_14 s_16 +checkshape result +checkprops result -s 18428.1 -v 139749 -deps 1.e-7 +checknbshapes result -vertex 37 -edge 61 -wire 28 -face 27 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_14 {e f} +CheckIsFeatureRemoved s_16 {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/G1 b/tests/boolean/removefeatures/G1 new file mode 100644 index 0000000000..4c8b3da120 --- /dev/null +++ b/tests/boolean/removefeatures/G1 @@ -0,0 +1,27 @@ +# prepare model +polyline p 0 0 0 10 0 0 10 0 5 5 0 5 0 0 0 +mkplane f p +prism s f 0 5 0 +pcylinder c 2 3 +ttranslate c 7.5 2.5 2 + +bclearobjects +bcleartools +baddobjects s +baddtools c +bfillds +bbop model 2 + +# find face to remove - top face of the model +explode s f +bmodified feature s_3 + +# remove features +removefeatures result model feature + +checkshape result +checkprops result -s 334.621 -v 180.885 -deps 1.e-7 +checknbshapes result -vertex 8 -edge 12 -wire 8 -face 7 -shell 1 -solid 1 -t +CheckIsFeatureRemoved feature {e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/G2 b/tests/boolean/removefeatures/G2 new file mode 100644 index 0000000000..476851a90c --- /dev/null +++ b/tests/boolean/removefeatures/G2 @@ -0,0 +1,10 @@ +restore [locate_data_file bug29481_ANC101.brep] s +explode s f + +removefeatures result s s_49 +checkshape result +checkprops result -s 501833 -v 8.60751e+006 -deps 1.e-7 +checknbshapes result -vertex 129 -edge 195 -wire 116 -face 86 -shell 1 -solid 1 -t +CheckIsFeatureRemoved s_49 {v e f} + +checkview -display result -2d -path ${imagedir}/${test_image}.png diff --git a/tests/boolean/removefeatures/begin b/tests/boolean/removefeatures/begin new file mode 100644 index 0000000000..aaf3edfb9f --- /dev/null +++ b/tests/boolean/removefeatures/begin @@ -0,0 +1,12 @@ +proc CheckIsFeatureRemoved {theFeature types} { + upvar $theFeature TheFeature + compound TheFeature TheFeatureC + foreach t $types { + foreach s [explode TheFeatureC $t] { + set log [rfisdeleted $s] + if {$log != "Deleted\n"} { + puts "Error: Feature is not removed" + } + } + } +}

{Gg$5Ql1lU` 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 Ds*#ZA literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im021.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im021.png new file mode 100644 index 0000000000000000000000000000000000000000..e23a0dbc344440121ec314c18a6f80ff7f1dcd65 GIT binary patch literal 19297 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_rf_im022.png b/dox/user_guides/modeling_algos/images/modeling_algos_rf_im022.png new file mode 100644 index 0000000000000000000000000000000000000000..d6769a584884d142e511bfb6d85f734422255f0e GIT binary patch literal 25544 zcmb5Wc|4Tw7e8DPO12c0oshC*iN-RB>{}@knF>h^MRsPggciFjSw_NCc0#gDD8{~L zHzxZ!6T^&IfA{qH{+{Rg_v!T-+{|3dxz6%F?{ltR*;pBK9Y1&c(4j+IrY43r4;?xj z0=zUh*nr;@K6)()d^_xS)A-t<@_ykp;DOa$-%|h3p{hhq>Vu=e^RcHU4t|FYakn#H zhdX^fxgI*?a?jLI|5lLmRx|qyE95o?I?Bs=1Wp<$xezBAX&9gKsY1FVv+324#tjRb z6Q-3B7ha3MzJJ(I|GOIJ@yK{?Nt5Kc>wHyg(sdK@Hx3U`@^HBaeR<8H?tyi^+nfC$ z!~kwrdmzoRUx%pS4htoMaT#sQe~MF)tL@D1Gygxn%Xs>PjAREG-MKT-27FA$Ew2