From e22e35a47516e2c1bd9bb7c57391381b84fd2e75 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 11 Dec 2014 20:53:33 +0300 Subject: [PATCH] 22763: [EDF] Shape processing Add DropSmallSolids operator --- doc/salome/gui/GEOM/images/repair1.png | Bin 30260 -> 28098 bytes .../GEOM/input/shape_processing_operation.doc | 18 +- src/GEOMGUI/GEOM_msg_en.ts | 12 ++ src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx | 164 +++++++++++++----- src/RepairGUI/RepairGUI_ShapeProcessDlg.h | 16 +- src/ShHealOper/ShHealOper_ShapeProcess.cxx | 18 +- 6 files changed, 162 insertions(+), 66 deletions(-) mode change 100755 => 100644 doc/salome/gui/GEOM/images/repair1.png diff --git a/doc/salome/gui/GEOM/images/repair1.png b/doc/salome/gui/GEOM/images/repair1.png old mode 100755 new mode 100644 index 7347daac07cd07c932a892f40baf7f5d2120c8f5..5e0ee76b6ef42bebe87fac275af57c65485c30ad GIT binary patch literal 28098 zcmbrm1zeTgx-W`BNF$&$BHhv*PP!YUrMpX7q@`P0T3Wh6O1irRCf(g|2H&^V{;hr2 zy65hD&QyUpne&bDj`w-~H4K)Q6+=P9Lxh2WL6Hy_R)m3h3jRIWM0oo6%JcXF@a=`I zxVi%j3~I;YzbA3DsQBPTT1Sx&j>1L`2KHvQj%GI2FluJjhBhv5ge>(O9Jt>oIMO>f z>Fe3rTACT?J^nsWRYU=N?A7DPl+7G1jbM~a^=ysa$lKc(7&$nYS(~t9sBXi+yn&Gr zey{u~Wp}|vOG)hp=Fq|B)sva05|QN0&p9{+VF{F#D@_-wY2>jnlmli}1+na&qH0al zt1aADs%Va9dcukbVqn?6V?{TlN{)Pfe6u<`#~S&$eBh)w{i2EMV%{O$kAP@U8~%n= zp>Y|W@i{mqkF7842VJ7!+C}+R(<4#f6&S01p&oo1$d3})f4s2wWRwWJ4*S#$4F(1a z{hm5*hew}Qg5G9XSJ_X#N&J+W{^_u+^&L?#y2dX488>ZdmcdrzAEl@1B4uMlq343| zqvOij^`ExUlNV`dB;(@PZ0h_2BOcOjp|I-9c5Sf2JNctBg$t1DoplELy7KaMv)RHX z_!8*a>ncr{bm&Ul2cnCs^p=CEWn{ABu_p|xhGAwcF zPT0gTrbsYHQ8=^SIlLev)qQZi*~>2yPc}nP7jEF(hDK3I>4o-cesPXyp3((jt;d0v zq;GF=j;#jX5 zo(RT2xf?)-AiZXAyW9*;;w~(a4I*j&TF@-XVU^hy+3MSrz`()6((9@8lm9khN?pru z_@gFmIyuYf3^y`daZ%&89%Qzp$)vBB1_N^Oa1BdR>AqA~O3AgoW!`z8+UPo0HmmVu zBx%ktZ%e7`ba<+`prG!?z(DK;|8^E#OT-r4Q*lLnOfUWix$PjCbu5+G(Rg0dB*AN zj8V7g?0AMu;N^|pT|C|O@8Qqn1%<2Y*hE~;^yfO!DfTOO3?FLu*9vPc^v_BBoQ2a9 z|1i&Y_>o=(k8D*EKi%NrLZ+d+wmmvd#cr;^fV7KwF2M;X4wH+M{k*PEN7Hdji&_xU z<>2mpC~XKvp{eOIJxG@xH=QjM6Q3_MiSTTA`czd6Q`gK-o>9s72Yp{<)kM09p%fXj zt62mjrOFXxxCWedWGKNv+=Zb+{E$% zBI5$q4eckx@^*IA$rE=SJqC71)VPeb;AH)jW;-}S!239=g9iw{3vYodF zDAGnwRx%T9F8&w$i}{6^;RH-=YqSk+3P#-lLdrD0)8^M4vM&1_ToHs<6W=mQb$EH) zwo${CjHMmUbpqbEF6;saI11Jul_)PBy~oDzt)=B35M4@VJ`>ysE#m z+;CuHCp0oLxJIBue(1chJnfd;$!^j^-7hcTuXTZ@-?1lEZhOSrEYy#<{DJB7Y)~z^ zHd7m24Q*v_s_|n~QdO0dmVMBZsT7_b5O=>#Di7GH^?yq4#wWHXE z0HsAzIf}l-i=@O&H+)2QgM_~&^U_x_iymf}V5i-s6iKIdbS!!M92+7|g;j#KF(--C<$YJ9psqz8#*Er*ZWS3(3q zk27bvp3+7gAvpirq;EoFGj->)Vq*MLtQJ~^2I7ZP_4rNSZY@6-#x(`o6oy;DR$J*o zYnaH@_mG0sX>~Zu-;u5CC+nUj*4E9ITQ!uj_XYWPb_6GzBcyzuQuWM8B*J-PR}*VE zvM=sOEDDk<40#F)3RL3Ap$S(Lg=)J*s%t7(evu_5)-!=m^Zoy!pb=Y3ON} z>TaNG4-Ni$--_(*9gw?vwl1;_RC(Us~V~P;i1tU7%Z|N6c}s5L+t7 z!!tK^Xu+V>>~uOEckOoMt!e$1SOEjVN#QWB5fO`2ARVHE5VNR!%F%fBHbO(OSWVN0 zCRZK<@`c-P8y$jBPIPJc>{^pwqKAqBTetS*#j#WC3=6!9iVBiz;_QL|KZ_g{R>2R` zm4{oe*C9K0$S$dW{LnQjyLUQ*V+IEeN_CpPpcj;4M(M7DS=+?8frr0E>W7Ggv?KhK zpnVCudE=+k`~sg`Dz}U>3oEO~$-0c3gS%G#ocAguDoUZwM(T$$oNPwYw;3m;y9>to z+1Xj^h5DEq8alTjtO|IRiq3oeYtk zGPw!bF($j$Qti75_9P0#VkI$rbB-t&l+-?3kT&KUA_`UzUUSh=CM2KlI$0I}vNrYh z8{V69+1?g@@S0OHbd7F&D(!u#|uyZnZMF}bZ1kB9PP#m^o*#x3(jN+}I{oi`G!%EtymF;z3 zGjv|M4F!MwdV4atL>ho5f{@DNaxY|t+x21XbY_S4?v>?Cx!LJ-LsivEYqjTmE@Rg_ zP*ylf3B}!R8?&>=ixNm6KQc2@x;#sA4Co3|kY7Z#u;JZwSl_#P-`B*{*hJKysNGJN zp`r*degBy4(4W?{Vd#y^f8YC{t0k%3^g&8WMm3B4ppS@G-0GcmI|f8$g6*$aYZQKN z%36>YIQQM>Rn8jr#XbcO_bewTvZAUU5x<+tX}WL90Pfzh%tPJOQf=F;{OwJ98@HBj z=nt7m`0t6b=}p!~83)jhSw%&+_nuq%V=X0Gb&4|DYR4AAtDFpW;!nDcobbhfG4U!bph{$O7**y-xHyoyI1spOj}S07Kl?s{ zv%z?O)y(OA-Y+p|APSl*pLg2T%1r9wUCNs9G1M#|r|wCJ5iQo&mzXhXB^v%p`JCZ> zGzrKOgOtvPhay$hu}2IBaHv1$v6~oK4cVCXEoCp@b>D8K->40?r)4*qRu(*`yMJ#U z<7B(_?DIqD1k`H=TGAP(@@-LP>6Dr6M@jxd!$Di2nvG&wv(^gRz+`SseNu08I-{!E zNiyPY`XxaA(rGVjuwY+nmeW$AQID!JL~v@}H^-B=p=>i5v$((r#vCv57Sl176c-nj z7G{lZns3vE>*>Nr*uEe!oH0RGQg6zwrz72ChnW6}%ty#5_!`YI(^FNYBAu(@ z!Z*e-BhgV1=$$T%fI`Gvl#NB}b)oU*hw9WHob$@ohbyUy+INMQ+ON`egY|HP@{OMKV^*Y!mwlq=*WWdw?egtT9+lp$!Cce3p8-d2?|v)6@_+0&^LJHL-CwuUR>;9pOU#zOCQRTXmpUeJWqeGVti;sLtR+#10y~@{{E&BTjxpXvuBSSd=@qJ z>L}6N)*A56&rf|S;bC9|eFSI!+TNSJConMbZz9jZ`>4>x-N833glsUBV<-&W<*Kl$;lHK zLACKwDUEN^6fr$yucs}mFBA{@Lm!`ge1}TRy~{jkRC{+gT$Q0;_U*^X<Y_oR#g9s)QAJT#c^T>4sI{8lEiFEH!!F#8WX+ zQ6V5B5HNXk{LE;-y}P^e;8%Y*%xFJ%KF>-KU1;%s*c{0s4T!KM+DS=Dl2newt|L3h zSwwUa#e{)rMy8i>mz0$3coX{J&&gFFDq;DqRepB1<8eoipP%2!>%lI8ATS9=Mn;5F zKY#v=O{;2XXsp$2&vj;2pp2x*80_D8%j+kv9U|<`H zFmww1B4#FrfpMgtUOlzcZ{~Y1bCqW;O|-fClglt8Ep2haLJb8OnLw1AfXl68d>o5J zSy`FYuC2pQ>;(deCcdVPjZMN41HoX6rrmUkhmKc!0?KQ=m7iR4ifNnM+i(5M&CQF7 ziz>=1vbVt}Ik~vW$tf|;((?qShKJD+p8pp84K1%rbd|M6g@~&{j|Co;l+;(L`4oIh zX#|$98hW^|8a>KBq$DRd=wE%UtYm%m>={GC4s_G+5uco$opIjV8M;C@qxKZ$NJ&ZA zSlQaz+C(FW7QS#CV?>>xL%=i`+Q94sQ*9Z)O-V_queTQ+f`#Z`RGN|DgPu9I72WsL z=ko_z+GA1J=Wt+>iwX-@-fDxxFb!UpCYYO-(lD$de-%RhIy5xY`Cw*`d&H?D2;=(t zI!`v8`Q5w7g84kTbfG{rz!rIG4lZx51iX%MNIE{gD<~`sj&b$(_eatE{VtR)3NrvI z#mLC$E%19>qaJ!%Xw$9Sp@5EX?O{BQw3ksKgP&s`#|I z)sw4^&94t=R#sN{_{k?5gF}fdl)nVt(9;)ZX1*mSHyX(l5%%v4d7YP&tD>rk==T)4 zJ*bV}^LjUY@$UZaCV^461X*k5r;&`z02n_n1F{Q-tMdASq}GprIMaZ}^h@CTh$+5y zJhrQl@Sw%A2?8iG3zetMO-V_3`LKS&vH42QmPD-RN7(0ct%aHqtVXzniKzQK4iU1 zfrsVVj;D_$59VcaY-OMU4uIDwUzBVK9$cPukv!JrH=fjHXnLICO79S1^W>?p5YN(K z5pz!Rn!tz~8yPt{Vu8Ux*P!16x1Y~5_FA6ir~5;OhGlBZIpiGyT((A30S zOG--eg-6q=u?D?Y??(8on4X^Ar%#tn?iZ3$Qt+q*n|phF&buGcHviR%{k5Ha#Ftg96iCh+Kl>%7krB2#hpM(V9}^Q3pxA!Fm_aIza7}!q)HDnbge}J@vyHo_FoJ;= z1C_7K**nI@9B%!NSn*`ad1+}a#(v9O94wU<7UDDMcT@*iX=rF5kf0`4n4cBg-JH`> zQ(G<6v$3!^EH!)f_VzYh>=LnC;y`{hH+xN$Xq(8UQ!_HU;2yjrA}T2=n%^w3L(cn% zMbMRxMH40|gfL>}h!^&I)Bte*+5Y~}_a<-r#>dCmt!68MkZ^l@3z#aPMv;+`A+H(V z`ZZszC!g(1VP-KziB}r+#Vh5>g85veQPn#&m4HC;_U#JjD{E_OB_$;o7#PCu%F4=G zTU!$o6S=v$3ssAg1iYJz+CZIWF&X^v z%gZ4MO>SrA3-wMH`wN)C!m_fm4bFR`lamySo!4hO;EoY_J94@;#$i1#o;S88Oa*^b z2AcYc=>TYzW?b`Lmr^nt^RUH+f#D`N=j78A z5)z7&z#Nb5E9fvTbA{!-LcuUO{`&PRh3vOaJLmLlY*nH|d*E{aqkSdw%6XS$WRRdE zgocIo7&)++9?1+Y_{Yk%@^jYkdhfr(2|T z35!kcx^?!QZEa6UPWKlYGK2!xq0l#e$S5dkC0bkS>&72H3aVOH9xgPvWMpK3*KWMh)PKzwZC(6aw0ldYT@nvDI+7(^V3KKRPN8?*F#XP%1gvS&9)~9gAwToSr)R2u3C)aa&B%l}Bw1r6c)6{LsT!?GeFw zA1pTYZJdOJgtWJ}TUlB{1A&g6lbf5HnHim&OzTuXJ~RZt4R{O<4cY9^*Bz4rC?{wh zgNu_ZofsXHD%2br`W1Nz-FmXma+YIkcb9+peI`*F(P}f^#@4dgWM98Y{t#9Tbuqq) zyu3Wv8vqdCQCwU+RirKyTdGwzy12Lq(DC?qEHBme&JK_3F*IK(uOL5vAeASfKT6m8 z?hLSl$CBmiE0@MgooCwwn8v3#Abpsh5lGgLW(Cia3rs!7~7!f$L(w(d9Mpy|{7#OnF_p;zUh)^WlJ$lXR zqAVfsY#7$#h1t;HVu^}z5}-+koxZ*);N|~g_~DQ~s&A$@lWPYy0<-sB-7G@wR}6~_ z!1XZ0D!=|dfPYZA|A=WcOp<20gSu7CHcp;DhjaY12!Mwp2{7gW3CojC9o;OzXcxOZ zxPQ=S4xxDV`H|Xv=h8@e{I$tYqPC)9xx>a_AR3XXvNAv#L&*X*(C#QyP+{fL_u)3L|QtXdfYCcvv3EAw(*HF~6XIU&ht#@=(vj#3WOeCz}uSj6j~h zK#`337CHSRk2B2Wm3V=G4Cqy0ef_m~V3b%m5lJrwB!N+z=wgC1`91rR=gk7>FTuxO zzI^%h`4>1|WPI-arKNNL{?`D(OX2it8)>!cIK$Z5!WmUh%!lJr+4cP>U`Zc4rw0k_easRi- zKj@kBQ(aSIV=UBM)J#kY=~=|sxFVAgAt5&`>qB!c)*DbL0k3T&m4NGtAq3I}dg>~1 zM@Z+&=B8=R?@Rd0zeeT_{J(Y~@9p1EyUxtaOmImA9&Rh@>)raNnMhhm-01lH&;tit zqmPBv)LxS)D=8UR8KuUhl23?>i1^23DJj~&R1i3~E~=~Jf>5!rjCuOFYk3ery7jW# zqq4-LWn_XqWm4WTf$kKe04_1ib8e;LOwkV-8nZI9GYWzQU6v?9jLxA>i&Biz zFY*IjNoi@9ovZISpqt=Kf`Wq98`;24b&-K8(ZfB^lr5sFsbBWtIH$V0+WYgvuP4uX z?DG*j{sTvnQSIyLArW;4ViO&E2-Vcolz`K9tdEaR(VgViuc3$t$fkqIf89twD}P!J z8osCJtLfS}xgsvT7W`)xz~jEgp#@-FYjt(ph^~;YU$@8d&=h1}EErGf2gtO&gS~@;z0emS3b{1t*#AJeJaB_jrrJ1Qfe<1!F?w?jnix7{EKe>X zGzbi|%2uwvg#msuQwkL&t@wm)jn~3DeX^&Ahoht8t6Iid*AohLtHVF704~0bG6j%# ze}A8NE}cnRnetd;H!dN;#LyDDvqL*Ux7@u<`p9@-x<~#&hPsf0-6u4e@HFw~IM2blDbLkwTVLIfW~^oJNW4_N?dhdTpR z%AJ6nGCg7G#l=LLPtPcnoF0<#j*X3tntIFop+UgD|3af)^u~*Si+6T#U~gw=jx<1z zGXRjfI7p{misape_aobDCM%9V2f&HL&#KntK*!8%>zB{7rUW-09-bQ2)oj#$iS!!q zS;_nNgDEK~N_m5^9zWQsex`Dp6qhHxS3$|ij3_|%r$DWY z7bcpc_+RJpl9-%`+YwYJSQ0}}-c2r!n8$!}0=%MBF3;S?#(ASgsZXD30o8&Al+y$W zX95*xD3wP|L7}Y8#y=t9b>P5z1dInMG7|MUME|xb5(|I>z=^zar?+PP2vELWd%#1( zu{T0S=|VFqA|jA;Itl;@-Ct_aC3`88$V~32O%(;{w$qe)dcU;vpxNSe*O$QPp{WE$z|ruZGb z29HJ*8WO_ez1#?D`Eb&AE6ti>6z#bbL|}}$ULG!kt^npr*4r#}2vEE74Fbxm7pfel zc8aE4?(0ckg(O@tSg`&{<#9GPHeS44rGS_w9+YeIxWJYmlc_E=xm*l=6TpCg6I-gX zP!kjsw1C~+*=Zp0@U5tD0OV3xIku>h(xOuBu;h=7PH@~_txMO=H)#4&Qc^ul;zk&WbF(wVe9q(Z^8_TZQBh28`(yqb%c00ZIPSqzJFSSD!9{lKP**=NT_ zMrIm~PC%UpDEVS{admG`rlV`kK9wL99im@W3o!TcfxJ5Qrz>7eOw22uxH|d>6GKB` zx<2#l@81Q>Q6nyFbSV46!otY=G>HyD$F3H$iU<&DbdkY z)7CnEPxrf*zi}_Ojj9y=2MrPdAptIO0C*%O;s&;ppw?HPWa)r$M$hI$4Es#-GGF7+?-nhF_V&74lhh*^1UpZ6I*Rghj zT5b@IwRINYR*BLS5OEomumQcoA3y$Z>M)jwt%%NnR^vZu-c`Ep$-&6a-&|dN4uk-} z&UdFui52+0?{9zo`UMCJxak2a0jwe)#Yp8Fmw_?3d* ziR5K4Is}K|1ghz&-Bjcaq?Rl7va>U%f^AEtObat}Tzv2cgthR>W-N_znFHS0HGP;| zFFyxd5ixT@)cpityn3UZ)vgF&-v^@LziQ%1qPjRd{be^l)_ww1O+b)<`V&1Xuj)^} zC{2QaUh0ueR(ZypQ@~*Bb)LrrfTmPyAQw(pbLSirX$sO-+bZH{#os^ z7+iY?+>I~jNvy7;;5|Jmq+;Q>y;rmu@|)}H)s}Uq*i7^4Hot1@ zM8CQWo1`-{GoyP|xZq5=@y5hcn=gEMNjkA8OQ*HeO-L87ur$pR?o01nutHrV4+A`SU^)q0}JuFEe`VDI|n@L zyTcb;oTRn2!UP#Lb3Pf=z8_cx@6mimvbNT>tid^ToULeh(dRyoc@C80zq>zfJT+5X zC=h8v!@6JAnt?qhJvS?5F@NA0Fyd=N0jA8mzfpv9(|O0>qU`+{@X!uBKUYrSwmNiz zU4{t)RPu;s1o3^qi~c1jdzr4&Z%EI zG7S4@knD+w3d<&P=dA5HvV(UGbG;9|RJ_4@!Towu@X_=6+dh<6y2qUp6BQmzW5Fjm zy;$-V6BBFkJemA8{Bfq-h*UJxbWi@FeeyRu6Scx*-=zKeDeh*<_f!ne-pSwbpYlse z7QF=@eti}U=g-T6n1|fMrXp3c{1>~(tbC1&v9-S({+PwNy}vnVZ)>x(vWkh025b%R zaYJkCMYt&M@veHg*^0_)i*!fmAqLp~LZs){+W^oemN%oaB8Ua}y;eSniA;ztpm4u7 zl{1{R_$NIi;&=Si`4t=7hf^aXc6N5^%^p`kBMVabA2Pr4`$QI#-{H7(HFCNXG3xU2 z=s4({`jcIZ#{rTf50EZss#ECK+$&kTxxY7>VkBE!)P^>&8b#kreW)R-j`7U3fYuz z*Q{|LL=ieWJMVB$HuiXG9PI5;i8#e$(|PTfNl2D&{ZEe2Ryy_V935HJ1&$O}&hV$| zT(!u_$^XqXjE#;~)bS#MP%#QHG73b@fBkTIwUMsd;^ui0kqiXltCh|Wpt?n31C-?r z>J`HDWfVzJGELCR{_*wIt9Si7&4{S5;LN?GN|s z2r1LL>P8<@>7Ah!-l<;3VI}Z>x_tBI-A5q#|M!yxUJgOlJ9cKTqhr`qS;}76r#}95 zBF?hxkf8SUj>Rx?)K35v)ic@xO-=}bE7XzG{xm2*pBe&WcGDHV;1>}ugRa3Bx6{oL zTNi9>Y}s&Gi5>~zDi0n0y00E)9R2&#M+P1H%*@QZ^L#-Iz()Zc&C$sT0|GGFr0S&l zjQYPiowAsevVX{UP2r(aq3!pV{^P^LIJ}<@fuj`)8n=a{Q=svA(#F;h8!PMcr#@v- zOm&vl#%VFhzR+{Yo_}6L8tD5$W9^Xou2;I zwTjXAmt^{agzQzw&d!eA?UG$yb2ES4zfo|gn4-MA;QnAohu=IQB&gdJfdr@~8z;eQ zK#{hLm?gr+&Ckfkc=d|i?bKAA9{!(3XEz$m=YUVJy!p`-H&_sH<}q}rBRGCMP!#;o zk6zRKt=rnW>uhR$zhm3AKw-OpgHyK(?$q~_e|U2DaJxEmg|v?8?>&E;_3-(= zgT_x@Ru+}%wzsE8uS{LI4#184u{>mC)~W?*EKL)FVgaA1cmdIC>7eu6fqUXz7~ z5!7m~s#E7P(4qYzgM)kiGDv5E>uq6ZSjlhM6de4b43UHt7&G8TiV|n_YWw8k;*#lc z9lDjt9W|w2+StfTYCx*1t6R=r_ZeN|Kj;l*lPB&&W=qllg}o^)r0C`2<;#4VMIo0I zif(UbcXW7YTB&}VljXarU)tH|p#w-Wht(pPN+3*vy6-vJ4t|KC3;cMa4yj7%0xZ6socP>k}eFGU0Ibtpcs+rlEY!llYK4omp)tcWtMst?*@>M@mnM zyxf6=-2M&-y*qe|&8|D!+t>M;K)BLwbS$gVH?67+d<-t6*S`qROE1HQNqruAf`t;b zVT(-p5l56kaNU9;N_^b3?(0`c04aH%4=0%&C{-=gJTIq)8R*b+_}G8_;@v6JmVzy! zEQvjlKZJx?R}6lNjWy{UcxVd?3&5rVmdY&m=W0p!^gEQuS$VoweLZ@xu&@A#ehm)3 zI$Um#BoR_A);Pm$H-X{K1F9*=IZ<+PsRQvFbWfRKJVHXkN1^dOfki!#tHGENVs(y6>t&#slcw?O!zShG5f%K@(aC(wHVOOH0q$di!k zdGs;elddbPRt}Kya`~*R_7W?MnG^fJ|9JywVsvygJIZ$yF?ajln$U}^5pG3)``JVe zn@0kj#_O7yk#Y2=)wfu)1~U6hHxzijj9Qhp01j}56LZ>r%)c0Q*cienJa)YTYD+}2 z%ie62O|F;2{%xJt-L;ctCE^#HT`*AokPO8iK+pimRkczbWbRd^vBh9a%9WLs`^#0d zzuZP?_oTr@7I>1_gaon4tGkP(n3xz`N70?;kZ|&X8@buBv5Dl{Gef`ufEdl32%7aq-^jDk<>Ij)7u= zg3tc#+c#4)GuKa_Du?V$U=TJKQ-}q;8k3SV0QP;wsFM;KOI8;znuVK;bHi|Qc62n; z?Ab70-4PVozK)KBK;k2a{_^E$i|)hy-F2X!U!<V`iZN1)uIa>FZ`*tu;4=V~7*+v{g@()9(J^fpy^|dp8d2f-RX7s} z8YtC-mS%c&-Va_^H`}*CF|Lo%0QvmCw1crN1d`w0Bc_$Wo}8PRQPEZh+;a`$37~odL^aUgKMxExg<6BI@agGkKuH_D z?lh>d0{r|ubPi!Eg~7B1`IG=O;>AskDTxxW^gsgpWgy3i>lM@v_>uq6Xx4#+m@6Q+ zROOH`PVry*&#iADnlNOfx_GWz<>=^Ws#JHVZ%7D%UaQvD=jIEvt0&?maoKcH7(Pez zg#N?VrcYZd6&pjMVMJAK6Xuz=peCac^YeNy-?sY&f*Kujvkm3fsgel2`~eb8K#jtH z2;Y<59rrPUjki49-vB)t6d*96ByHZ1k{WCdXLKBcn;&4EY#K0ZAPd#o-Th;^TKjdh zxO)e&A{Ye_sBdsNSVYmo2N{TU;N|o%4EO;91N}>lo@2H` zJ?75syWxZa#@5z=l5}?;+Fk^OM8p)WzZ+fd9w7y!9U%kwFTt1;6ugpeXvlaaf%7ER zK21YIlR}Uh9UT*7{%`pp;^W;&U6uJ@t+u2$Rhk0n$G( z32bkd6of%}W6-J<^q2)YRC^$rH!y9LEu<+b8XHqYvq=2>AQ|=b_2Z@a7^I@N;A$!o zYpY#=Pz?$W=O3k-Yv=u%fjXazk!I1%f67mLcI1>%HA&u5W4U*itB;BVbVT-V zOMGvxru64e+rD^uhxPtoP@n!XbpFK_FVShbK3eSphOi)l0u@&IQ5v5>nkYLE?IMad z*4JOYMhfa&xxRMmDP@D%BTY}xRZy_|v+>N!%PXN&%lbnG(66+$n|hoP5fLBFAR{1f z5y^3H0TUgVLF3ak+Pb>wTCx%nFP6~LKr~Xzj&deAC?ybGpE=QkKmEh{+KIHZbW%&H z?EdOUv@Yt{2qC_=HX~b(JuXM<1IbUG!MzFQ5Jz?-^G0z7b164h^ifh)R#nX{D3BZ{ znXk3;?bP>-%Cp=Nb|SJjE-5U;4C#zMdt%A~aB9daMoAeNE62U6 z!l?jc+|i#}+rM6fboLGmkjGb40ClWd*%Q>#+RNIS`I>oNYktP`^9CrIw$A>FgH*CSaGVtHW1au~W$kdQQ++?;p< z7x=q{64qt53O3HkPPC-#bu29{-@o^1XlSUZaj~~&KBE0KF>wZFxCehrZ7nA+@BHuI zqF$unqJudG=4oAB9l*BHS|Ed!@YiEwV}rwGUn}#`6bD5XBm`a~JO|XW!g%0%_wvc5 za-T;6(9#sCu+}#=KxLc(u@C!VaWVjFgBP)zK%!5;yCopm!puy9=!1iU0}?9g`Vmmq z7|A$01_opbKy2XzWHW>La`W7vhwW(K(q@T<**iMMYOw(`_q{LN+1}jL`1omFy4PDo za7igajKFDI8Cabls5A&%ByyW4pXF9=<0=vo)ELKfVkl)^y%1^0d}u=OZ(sk0lPqnQ zd<ddGntv2`*0knQQ@1q#Gp z=^8};w_Fs~U>HFs#cXi~IR@zN?(Wu>LvORNd;}>6~i$0Vb=~2T*AQ_{wuij@!h5)x9=wqmd6QY za11Dard{vY^J`eJz_$Aj$>QQ7`GM48LL%51HgBQ)#^+lWv@x==! zX6DiHaZt3#5RGJhzOm4UfBSN`1zHIL3*RgL+6z9;Z!fx%3 zuCB)*3I#<#>qqc@L?ml9`0ppC>wDXKOtYjBC@&e4S)TbqpJ_^r<;w6lZVrQq%*)Gb zs3I#ZO~7It3YJO+=z$a$)L^~t?_89#u=G!`=9(G{5vcVq$*xWG;TaNcRyvVhg@{PI z(oqWtcyEp7m<*&8>XU}{C;OUc7K4y#r6PjCCm<%Lg6B43e z0-IhiVQl?k&vR7T-9D1#T~MdKrsf=oM>c!juoqEqb$x+WXuYQU@MmYoeRG%uB#R%j zk$G^zdD#cERej^*tSl@nyu7!dWs4xx)z^dNL-qiC#Kpw{Mx}_!^U2i}gm%=9mp992 zpTKxX0NVvvy`4rTOQ#M)$@zTNY6;#4+AL8l@80+Y;o?|>a`bZ+2znrNZ_@v*)wlvw z8b+PlPdU52aX=|9ARr_JU%&YJ215V^Cg{qOO-)KowX(J*di6>)788?)j0`J2UHzX~ z0J0zX`COcw;xfCoKo!aoi-=ar0jH?G_oxUjIMo|)2Izq(E?5?Fw2~fD|2_r~Iocg= z4=&)kY8+L=fAe|rc?dqCk}4KRMy33&eUM>yZRg>eco$t-LJ0D2M%1(}t16-knSt%+e7C8MH5+s>p?lMKhZTRDW zSr_E{M1`*PPt;E$ufioW6sckX_{Ur;t(~2U$AqKI-6zv zYqx_tAeRbS!&_N1Qor;4nYlK&i-Wlq+mW{A_P|w6uRp(hau%hAQU%0{dNP|L5Om(Vl!P7OUmFTa~GL3&yVxmNbyxZA!=XaJjdu%a3_65x3N`!}sF>PlN+q+VBt^(;!BoB!-!pKdl-gSa`158sCyjlYAlGsR0HrK?r%DX#{wSeR11*vUJ{D(?KJabyKanCRHlR62+<#!$*>&}IX{ z9P~?IM*-y)8U=HBjPotR@RJ?~()PRcw61j#|(H?_s~zO^0xZHDRGq!qN_^73+Ls&r#* zqsNWWZ@NXFQK$ZL_o_l6ORQL@Dv4^o!ej`5U2stz-Yt_brcXheHAcF^W&Rs`c_ssS zX%=yr1)`ekyQL-|;oCrB>6@OubnALTStko3;|`~DRC`XNxHx_gJ!|XztCJ0}FuX^+ zkk7NhA5r9rt?`J`Nx1>LO_(mipH|S1cxmd3LnAEB??1^3&X$Wou zBS6IO0ca%-Nu~8&J;lYu*LS<=LMd2?OtV=drU)c(zCNpju7^cPBxBRS{vRlsspsB8 zMrOq;2Fis1kSn$)3VY`MyhEM??B2)c$J{9q>4I-Q)H~)^SF?w7 z&Q|X&2|z3?EI=$25)1zCfVf*jLzyjGVEh7z#FQv)V6dv|b+x9{4x=5F7x*|sNZ-DF z#h^i@o)#U=Y;YY4?iDV}a3Is`>5(YxZ*RM;pCp`sd|{7sOd@8#i1e@ewvi71P=_#gR^N;o?KS6g z`$NnXI)sofXqy=w;*?o0cQ;ip&@ssWtQ`dALE2ZYxe!6XD~ItFBUc^NQjDZo6W zr9G}s^PxUbKx6^P2rTFUas(KrV5(S_(x(w!eFFmvAZwDs<#2p*0w6yKSnnJh$o(GP zEJ7Wqv0MEOgdASaYgQ(vBcLlAUIn1wgZLPjbwEby5%?6fOHJ5(v){mGF&P^l4v4Q*$3hJgP_1z+2JZ@Y>_D1enNVY`Ly6)gux!UrIePy~2JgS8v0E31q4OZF$V z;4Zc%su{^OYLk~(%)yh}NG!LFlQ< zrsb}>px{yY>#*0*z$;@1iG}A@25wt155?5W(6PyXoc|)Wph9__4I)JKoWY6)wSRbw1NiOID1f$ z0qFtAqE2hS_g9>-9uVI2^p^Y8SvDBIrGw9>r7=v5GcOr2>NbOBdv$e{%wbbqQ5pCnct16@_Sf1xtYrobDmY&0*5|~h%c!|5?mKQ+HX1d+^@JxqPKuRD5pfmcV;J_nZI+ zH#aqX;|JC;X|+vCM<A^KnKeQ7vVf7|ww%Crqp z<}r#&$e7GYp`w2(^H>=xA<{NBP?A)HC__;iOd+KWgLFoL}4vI+_m zuhH1McQ@>o*uK5Cwl-{MV2JHk1lDVlP^_b1d-MHb?e*)7igA{vrdt|MJ*tMA1~}i% z)AOjYvGlfWpPQPZV)Zk>Uy1}lNNvl~54L1G_{~p=Ji8YgyNvEM%(Ht^o0^*Tyh%yv zgNP$UZiX2IH*#CR%F^s4hm0fL&$F^Y>_S|wuw6LR528YPpZIx@)V<~bOLUI>XM9o; zi8-0^DoL<=bkuUPpx3W*0igw^$-^690_(WWD(>stDfH)Y1k70I@@QyiOp0(pH;VO-xBNWp4I}1HN4spXx4+9>b)BTsSf8(%5z_NwJ`i)l-!)b{8jepU) zO}HUEragTcf+IBC#U#m-)-l}r!Jbzx{vSWc9MIEqg0LI+cy2hO5XvF!_)^))wBl=;~__v$c+ zmmD7u-kD;g*ymazS1wL>sUd6c`mLVVUmSV2W>t{I`pwe9t1cC49Lu&(@S|($kTe-@ z&K622Js&VT`*Ox=xW~+Abozq4u&^*d9oZR-j);f|bXsc%J{o%n1T>7Ywjx>4ZmDPx!k;TMtaK@>NVj9@#9!UP4_Q_ha1}1bX{TKcx>=s zs}=iZ`rR-?y}R&hqo^nvBk*6PToc5>!!y|1n}gU7%gH@uf8r2Jd#V?F3l9xLC)F#q z&FAQjXHT*uvfA5ZT2ym-_Sf8l1bUls`qY$WJ;VLpBO46dy*jOzC!>?3v=25f6y9kP zpMD&1U*=3-)m^m75z+7v^0|s>G=(0`dVkz`flhO6upr18C8vgDtj?c5f1)6Z7i1xh zclYFG9MgI7!ir)xU#n+0_?<-Zdoe6^Ej-*odlfmT(r9yaOpkdk*;l~*PWEvA{fk<8 zK~l!h_%otZ{n95z?@HJRaH_Vxb&Z_h>UiVv1aW-lPH%i|CV0?$OuawLn)TFIx3~i^xt+7E@KVkc8uJzn)$t zj3lQ{k(ikFW6?$^12xIZ%fEj88Y0E7ZEgFjq1HO=FI|c5(5h9dN_@13JFb5|#I-m0 zS>vVtb`{7-A=wv;T9}_tH_e7Yuef~Qf|u8T)}n>Lp_}TH9@8CnFTVft`qF=X;7Gw4 zVEdmX9EQ39&Q=oxgM(YztDfiN9Fa54KH`t^qt^X4=qpGs+}yJ69lr+GQdrpb?b|63 z>uPIXuH=u&x8&w|#!1zy*_)c)J0i%=ekUTr19C(V44d{x#VETIft*3X6sy>Oo?G|N z&C;CR;zrl%BPYW>R9tZ=m%FM_b8HQ9E2vw_X|MngB2Zo1jfY$Ec1c%B2#437 z1H9JAlsrNBUF$Y*=dFxLRLZ!tN3|kixly&h4T5JplLH58u&)({v7p-!KHk5#o$Rgr z@$msiwYiyDl(e-}zoz%nbhBr;fXc32fFt{EaDVUaehHxa`0?g9%``;O;q_cIH+uEz zIfw2*k(9gd%d~ZRgU*&(uRs zR8%|fJ=|>zVM-m`@Smbg$UEKUg)2C7fQzs>ij(i16dS00Zga;w*vR5$SXiTK-Qd`m zl$7evB3i8PZg;ebuB{WzA%8gnfWXF9pJA;5DK{GTI~djxiN=R4zD5l6>&e6$YdxGh zZ2=!xxlq8nv)^}5v=tzf3n;rMLzbso2)!ztrDkf*lhe~1vUlX<+9>gik4O! z8gqa|_+ea*QY&tBZBLv?e)Q=0xpO(UC3h1<%Af)dH(4yB7*BTN#*I_)L#tQI$`Jay z*P`rv<9-tEu9GKE+S%Fd*|W!xm5vbRla(3x{$Ip5O-0IP+RF-cXUoc|hk2R`5!g62 zA93GO{c+B~d&hCLhBbi&2RHC=Lrb=vAAXyzqQ4&PrObBtSUxZ^j*&Y_ef<)Ngoinb zD}kIB)agxr<-;Z>U+-3)yR4kOmN2=By-*c@(e_t=ZQ;_WD@vNRtb!x(mX5t0ccx^f zq-+uqd5;Erd%GGEO}_Co_LuhV-TeIgXp|vGi*oYn7uL77=G&Dr?r_y6lk;ygSQYqQ z05Sd{m>GSl>o;z^$jIQT9&djeegD3y@9&>rw9a%Ew0oZ?m#-yc^xSL>XGkQJRwq$G z-WF7H?XUnO0-m+7@I@?!c|Xe+W`B5+;Qf`@x)m5b(!^0>X*Uc!aEjI;t>KjrRg1Q( z{i>0pR)f!;%>&TDrwiIdoH_??`m>?Nb_oeUM(7LfPK-_6WF~Cxbo-}U85>8V9gj*I z)hQ=uRDApx!e0~eBM;il!t~%905t3zBU?XNvbD6eb-ugc0Tw8DZP)mCLPCP{D_@xY zu3e+gI%#d)i9!bt6?}kh2Cvc?3zX@w*p(!KhKEIr{*sLImsIS*r?(Rmg`H$#A2=VR z(mFIWG~Kl?g#3Sh2hCPgq*==toc~!x(L_kYm@e{B-m--y?hXYr8bjo`8Ed^bE(`>xFZ>FwVfox%trld72&6cNN2(6BiHo`JN8SZY=nGEjt)6 z(V#`yf&>3(NJ{~idKL=>^|uz=snY>we+4&4tFA2mYWT^{&VJ)S=F_K@kY>~;Y5^8V zQ>N}5De#`?MlJ-NSVXT6f5~?|=*XfW4jld_X!Pg2s*@F>0gF9C)_&8CwjYAkroR}W zS&CVt2FRwp;=d&|_ z#U`uFtgIHunz7I>U;Y615VHG|Jk#1W?emwuKhkb@12YoNs{T7M@_JHQ8e%V$ATI4z z(HOysFnz4L$VOt~k}&-~?0N8k=+&W;kJ@hjIM4K8{`A3yQ)fX=!zkfOnU4DXCF^*( zpwGw-B_$;fkkjX`cNcd+6aj#X9?|!a5pd0*e7CFJg$)5=xvwwxcsWb$+dOV#Bcn%3 zSExQ0dwa4E^}zH4w6*pd;?qRF`R%|dKTC+eeMhp&J5Y&0gd(KkC5eKXDU85_M>a9p z1+-PdWUuIQheBCGO<2;`+G-ZTjP~v>Ik{iBabOX>&Ym4OVoeZo2==Di|M>$AKnKWg z;FF<9Uq;h8?v#wYd=8WtfYa7Fj<@G1a5`avRNdcCL?+ub0&v$4;l|jw86jRB3#?!M zH8@^mX-wFOX<35~N<~qkF!&BBY3a^XpgA&7P@d~cvFo0jN1^lj62_wObgFf{=3qZCxgIGL5M`nLe5Ys9nm6&AuG0d9Mqkt-+aeQ7`%f?p?mP9;!CoeSF52Zpz<}<-g91D3u7rkGBLaX? z$T8zqJoObTA44JdMDIeW%L{Y?TJ^_|JP>^EH5-C&+#m@F2|?FWdl8x!X=P=q%?EAA zcF=Z7&DWV8==0MM^$)*gf|MNXTv?vQR!sfvfO&J*rXK5~Wl)Z8JQE`$Rm#=c3JjTR zH64!KJl$-~%E%~t_`<*E0UKc_ZO|Unx4Lm}vcv#NR*oqwG4 zb;5HO{}2W5pIsQ0bL$qH78@E$NHn0f`1trB&2ISoSxrr?bRK~V*owFlPnbT5J>v==2UM+{d3TcsabY^IMkR9kkyMGJ? zy2s3Ucy1CL4cVs*a;hcA$;i&`p^3zP`?Zv(?C38;a}1IfyY9!>*fNaWjyC~99_8eG zf!_;ds^Vc~C8fN?M4RF(4CwTz`~J>MqWL{PKg4`cB{YK~xo7sU zu&_uME>3b;`z9Uj=&KC;GBh%RogH^LGg&Pn3$Nj zIJNVE`IQar>7LSsUwpJ41&&4EnHZoe@A16_59}L-!zftF%dG7rN_q@g@`3H@qK7W=4PcW@zYJ&_3ZB z%hXiflQDX#o1O^Vys0C?NVVSW>{)sSh6}Up=Sz3*ko$m(`93hP^K`3xdkqPw3z2TG ztQV;-2pM$Qs;4Y|hwyN>@&6Ux5l$FJHcE?l3Lgip8>>^eu6`SU(<;{9|(D%!PL2;hA8d6!>OrE zo}jjeP5x23xX8*(dGAAo5*Pvh`-Z=ctqmR%ca{n8w!F82NQ^c*wsvi;!@+*%`nc5h zi&>t})QLpbL-TqD+6;7JW+A*&_PX_IzL7U)NGFffS4F|R$`@H+sC4J7X7b%sE!W`H zgGFwj5plPgeBa!jVj^d6A_%g=rj8UHBh*3u{snn?dBXINxq*2B$;6&;=jPXvJKD8l1emTkSJBR)0qT1wpdZ8(}ElrgT_CPR{7SBu*=b!tsU}KU-mf z3!Dt_;Gy4*{TmcuugkW4PgQG|jw#eJcBR*`C6G#-U%93h*a(}iLJeSq%ZXs1%VAd- zsJ#WckA1_2T#p|H?a_RCg+-0=ME$IU+Q_{FI}`t0(G{3Bb@uJUY|o>4ejW{&%rj3) zN$8cwCA&UcOBr0>;WJK!y{^myRECM1_rjUYAn__h@$XfW@Sa;n|ElRJzQM<0WZf;lUk)t zDvgrcY}Jy$c#^_sB3VEiN{1zt10aUD64%kM6K zs*!edujvgU0>?7v=6Aoz&i=)Abvdmzk92hM>}=}Ov>gpqGp8ZD?M%Ngwb}CF(+g>j z``zM`Ty{dM_iu67^RqB?dfSAByAUne+DkFEiQku;M@C*hj%S`&%x7S zm1)OEVzS`z|FTtnZY%L1<-BFn8e?ccn5%9vgFN1aZ3DJ+KuT@@rdqU!;`3Rj-j z`Sb93{wSUNf5Ej&G-!a0^p|4Hw9KN|8?GyJ{%3HODie1SLyhg~=vYx#$8|jZHuZ^^ z*vZ7+I3kJ>`sc3RHE@sR`6Z8hl9HUfo{K9q06MSIva;(f>?qjejW%&Rh?QTG5~VoC z$KUmnG5g_P$wWhN+D&9SEao4yghpq(q$D~#XMpe^8^bb^h*DBeP~NqRg;zcm!<CqY-WS|^nbtkKXF5*BAzD=#SX=`^1d;nC5qU48GImJjYtt72uc0;%yKtD#PP1T z|GkG4;}ac~b-c{%9DiVI=0O^@;{IW#J`mR0{PTH=okN4~3BqO_EkD1jQeHdMjeqi^ z$OsK_@$hKb!`6`V7gcQy*{*;L zu565qJs77r+GWi$6g4~7=;GL|>G0I+_+O(XD*In$VrI0Iu~B{L(3+a$)-au1j&aFi ztMQ_L`Eu?f}XC=-?gLl~{n0y3A1<291ED8728`LBePcQ9~aWF3nADDFF+xE*Ab!1TfXAD^Ag zDI+KNihpy;f0X%cn6>#0@20?V^`fj33G+dRPoBOr8 z(^7lX+p=n$vpjs|cT1hW7iBr$q@ke|<$t)vTd#x8*_201ZyUy=3UcISWX>WZNH6~g zJ$%yDb)2%|ieQ{tSh!MHw=jzlq@jK1&BxNwAe50o1K>9@_80zFQx!Ee2Q2RXcFkU? z?RekOR<7b_p5MeDH?9cuPWR`)Ka@I8b5@6{ZzoSyier=;L=oU2ON(FmoW`s(@5PC7 z;B*xMr61%+O;6azE?s?Y(DD323v}xVRKXOdOaK>KEGOoBAT>6bir1)ezdNqDUC= zYq6^Y2A#>?=ijgT<&EVBC=&s&y}Nru>I{9CZ?$Q!Q2Gi}qPYa67ZWsA>WrTh#-c9I z_Z%*nd|;{qT|A3`dSrA0Rr^!BMYmvSrVSPCK-B)b*|OPEmihRvX#DT@;-Ckn8ez&J z>b7v7cE-=m1h6iS?NtlW*=^Ql8bJ-IJD+?St?t!pMRuI=&} z)MG2XJ%-7Qd`f55S1X;8Us_UXQfiSJj1 zg4H>9C9VW&v6A!;9FUZhjI=6n`n=hY)o|hB41RY+RYOr(NchO^Q)td6Kyr?j^dlSHHZjd=O(}Qz+70 zbi(%i_za7nD)+i|B2w_@QJeqZn(Wpw-93j;;bZv+^Wkdzz& z7B8HubPE0s7KWHGN_fb*r=?D!$*ECHb~PtKYg-wae1z+ z^~>0`*<@~%AnPk>TtC(}bW;3yHQ0oPMUR@89dyrKrk+422_7Qh0VuKy?@b1l<9Moo2H*1_p+Vca!>{ z9pQjNU5=j3DT&l;0r~hDs>y5M7{_W68JVBp3hLAsUL?&qD;~D8k_yB4!z@%Zz**8; zx567_2^FF+J?K3uxrMICn11%Tui49OG*gjh{MV2_K ztE=N+d};A;NGS(mpPc+v!if2iPoJVSoQBe3|JQFagF(Snr9qhO1gq7_6DM>Hoz$@@ zg}l2i($LZ!u}sr9Fo?2BQC6(gNMP|X8@_*k+Q}xz3G!<5GD!ug-lN&&`Zk# zW(PqbGIX=PcWAWr!@TQ0LqAjIbH5%rK1l0e=i5JP-t>=1!mxIR&z<=IXVk9Ng|5r2 z{!4MzE}RgzoF5)G2UV~}%NvYZ{JoVL2*2XVLr>AD(`_W(-OmI&3@#f_;?t7Q9)0~P zl!EZh_01=`oH{ikp5SY@=r~@=Wqlw(ZAoL}@*@li19kPpAim+W2bgJ8lvS%6`tI2M|ZonoJ^(GD`F+$ zST>$ujX>jPwtkAA?qo@Pa_-k>$J{h4uVXt~n=dZL?=CwN^`f%uP} za1AN?;$*#uoGO&CCntkYg;K|3NL7#Qm-M@1WHFk5Bg3n)KwzLzGCxb=o`w0tBn9D^ zJod;!?M&Tn5z$UHfB)Sp?ZRy;tr{8=ZY=2b%)Eas-e94S=iM|N0x* zMCsg|5mq@SZL_)YjO4Qi-VW<#$aMemWhLj#VXK3;pKlqkn_l&wNJSML3L??r9*C-z zu}TIaaB|)MH(HPJ@p$<+5CrtUXlk4B_*Gej0O;9)?K|;S{|fc~OZ@leo4wW=#zI|P zUoT^nRuQ8=qfcI38`+B=@2FKc(&PV0ZY!CLX0eIIj9cLf>%>FBx9@^ho=|oAdO8Ms J(s$cj`VaWX4RQbg literal 30260 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 diff --git a/doc/salome/gui/GEOM/input/shape_processing_operation.doc b/doc/salome/gui/GEOM/input/shape_processing_operation.doc index aa97ec32f..c92d48b8c 100644 --- a/doc/salome/gui/GEOM/input/shape_processing_operation.doc +++ b/doc/salome/gui/GEOM/input/shape_processing_operation.doc @@ -51,11 +51,27 @@ spots and strips. possible face size.
  • Drop Small Edges (DropSmallEdges) - removes edges, which -merge with neighbouring edges.
  • +merge with neighboring edges.
    • 3D Tolerance (DropSmallEdges.Tolerance3d) - defines minimum possible distance between two parallel edges.
    +
  • Drop Small Solids (DropSmallSolids) - either removes small + solids or merges them with neighboring ones.
  • +
      +
    • Width factor tol. (DropSmallSolids.WidthFactorThreshold) - + defines maximum value of 2V/S of a solid which is + considered small, where \a V is volume and \a S is surface area of + the solid.
    • +
    • Volume tol. (DropSmallSolids.VolumeThreshold) - defines + maximum volume of a solid which is considered small.
    • +
    • To merge solids (DropSmallSolids.MergeSolids) - if + activated, small solids are removed, else small solids are merged to + adjacent non-small solids or left untouched if cannot be merged. +
    • +
    +If the both tolerances are activated a solid is considered small if +it meets the both criteria.
  • Split Angle (SplitAngle) - splits faces based on conical surfaces, surfaces of revolution and cylindrical surfaces in segments using a certain angle.
  • diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 31679839b..8f7d8a97a 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -6716,6 +6716,18 @@ Please close this message box and select edges for gluing Enabling this option may result in a very time-consuming operation for some input shapes. Would you like to continue? + + WIDTH_FACTOR_TOL + Width factor tol. + + + VOLUME_TOL + Volume tol. + + + TO_MERGE_SOLIDS + To merge solids + GEOMToolsGUI_DeleteDlg diff --git a/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx b/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx index e05f008d3..7933c1552 100755 --- a/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx +++ b/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx @@ -83,15 +83,15 @@ void RepairGUI_ShapeProcessDlg::init() initParamsValues(); initSelection(); - setWindowTitle( tr( "GEOM_SHAPEPROCESS_TITLE" ) ); + setWindowTitle( tr( "GEOM_SHAPEPROCESS_TITLE" )); mainFrame()->GroupConstructors->hide(); // select widget on the top mySelectWdgt = new DlgRef_1Sel( centralWidget() ); - mySelectWdgt->GroupBox1->setTitle( tr( "GEOM_SHAPE" ) ); - mySelectWdgt->TextLabel1->setText( tr( "GEOM_SELECTED_OBJECTS" ) ); - mySelectWdgt->PushButton1->setIcon( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); + mySelectWdgt->GroupBox1->setTitle( tr( "GEOM_SHAPE" )); + mySelectWdgt->TextLabel1->setText( tr( "GEOM_SELECTED_OBJECTS" )); + mySelectWdgt->PushButton1->setIcon( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ))); mySelectWdgt->LineEdit1->setReadOnly( true ); // layout the two group boxes in the middle, add a list of operations @@ -100,7 +100,7 @@ void RepairGUI_ShapeProcessDlg::init() // operations list widget myOpList = new QListWidget( anOperGr ); myOpList->setSortingEnabled( false ); - myOpList->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) ); + myOpList->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding )); QVBoxLayout* aOperLay = new QVBoxLayout( anOperGr ); aOperLay->setMargin( 9 ); @@ -109,7 +109,7 @@ void RepairGUI_ShapeProcessDlg::init() QGroupBox* aParamsGr = new QGroupBox( tr( "GEOM_PARAMETERS" ), centralWidget() ); // add a widget stack to the parameters group box - QStackedLayout* aStack = new QStackedLayout( aParamsGr ); + myStack = new QStackedLayout( aParamsGr ); // continueties values.. QStringList aContinueties = QString( "C0,G1,C1,G2,C2,C3,CN" ).split( "," ); @@ -152,6 +152,32 @@ void RepairGUI_ShapeProcessDlg::init() aLay->addWidget( myFixFaceSizeTol, 0, 1 ); aLay->setRowStretch( aLay->rowCount(), 5 ); } + else if ( myOpLst[i] == "DropSmallSolids" ) { + // DropSmallSolids + w = new QWidget( aParamsGr ); + QGridLayout* aLay = new QGridLayout( w ); + aLay->setMargin( 9 ); aLay->setSpacing( 6 ); + + myDropSmallSolidsWidChk = new QCheckBox( tr("WIDTH_FACTOR_TOL"), w ); + myDropSmallSolidsVolChk = new QCheckBox( tr("VOLUME_TOL"), w ); + myDropSmallSolidsWidTol = new SalomeApp_DoubleSpinBox( w ); + myDropSmallSolidsVolTol = new SalomeApp_DoubleSpinBox( w ); + initSpinBox( myDropSmallSolidsWidTol, 0., 100., 1e-7, "len_tol_precision" ); + initSpinBox( myDropSmallSolidsVolTol, 0., 100., 1e-7, "len_tol_precision" ); + myDropSmallSolidsWidTol->setValue( 1e-7 ); + myDropSmallSolidsVolTol->setValue( 1e-7 ); + myDropSmallSolidsVolChk->setChecked( true ); + myDropSmallSolidsWidTol->setEnabled( false ); + myDropSmallSolidsMergeChk = new QCheckBox( tr("TO_MERGE_SOLIDS"), w ); + + aLay->addWidget( myDropSmallSolidsWidChk, 0, 0 ); + aLay->addWidget( myDropSmallSolidsWidTol, 0, 1 ); + aLay->addWidget( myDropSmallSolidsVolChk, 1, 0 ); + aLay->addWidget( myDropSmallSolidsVolTol, 1, 1 ); + aLay->addWidget( myDropSmallSolidsMergeChk, 2, 0, 1, 2 ); + + aLay->setRowStretch( aLay->rowCount(), 5 ); + } else if ( myOpLst[i] == "DropSmallEdges" ) { // DropSmallEdges w = new QWidget( aParamsGr ); @@ -295,7 +321,7 @@ void RepairGUI_ShapeProcessDlg::init() else { w = new QWidget( aParamsGr ); // dumb widget } - aStack->insertWidget( i, w ); + myStack->insertWidget( i, w ); } QGridLayout* layout = new QGridLayout( centralWidget() ); @@ -305,25 +331,30 @@ void RepairGUI_ShapeProcessDlg::init() layout->addWidget( aParamsGr, 1, 1 ); // signals and slots connections - connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( onOk() ) ); - connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( onApply() ) ); + connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( onOk() )); + connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( onApply() )); - connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), - SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() ) ); + connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ))->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() )); - connect( mySelectWdgt->PushButton1, SIGNAL( clicked() ), this, SLOT( selectClicked() ) ); - connect( mySelectWdgt->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( lineEditReturnPressed() ) ); + connect( mySelectWdgt->PushButton1, SIGNAL( clicked() ), this, SLOT( selectClicked() )); + connect( mySelectWdgt->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( lineEditReturnPressed() )); - connect( myToBezierSurfModeChk, SIGNAL( toggled( bool ) ), this, SLOT( advOptionToggled( bool ) ) ); + connect( myToBezierSurfModeChk, SIGNAL( toggled( bool )), this, SLOT( advOptionToggled( bool ))); + connect( myDropSmallSolidsWidChk, SIGNAL( toggled( bool )), this, SLOT( advOptionToggled( bool ))); + connect( myDropSmallSolidsVolChk, SIGNAL( toggled( bool )), this, SLOT( advOptionToggled( bool ))); - connect( myOpList, SIGNAL( currentRowChanged( int ) ), aStack, SLOT( setCurrentIndex( int ) ) ); + connect( myOpList, SIGNAL( currentRowChanged( int )), myStack, SLOT( setCurrentIndex( int ))); + connect( myOpList, SIGNAL( itemChanged( QListWidgetItem* )), this, SLOT( operatorChecked( QListWidgetItem* ))); adjustSize(); loadDefaults(); // init dialog fields with values from resource file //myOpList->setCurrentRow( myOpList->findItem( 0 ); reset(); - initName( tr( "PROCESS_SHAPE_NEW_OBJ_NAME" ) ); + myStack->setCurrentIndex( 0 ); + + initName( tr( "PROCESS_SHAPE_NEW_OBJ_NAME" )); selectionChanged(); } @@ -373,14 +404,14 @@ void RepairGUI_ShapeProcessDlg::selectionChanged() myObjects->length(aSelList.Extent()); for (SALOME_ListIteratorOfListIO anIt (aSelList); anIt.More(); anIt.Next()) { GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( anIt.Value() ); - if ( !CORBA::is_nil( aSelectedObject ) ) + if ( !CORBA::is_nil( aSelectedObject )) myObjects[i++] = aSelectedObject; } myObjects->length( i ); if ( i == 1 ) - mySelectWdgt->LineEdit1->setText( GEOMBase::GetName( myObjects[0] ) ); + mySelectWdgt->LineEdit1->setText( GEOMBase::GetName( myObjects[0] )); else if ( i > 0 ) - mySelectWdgt->LineEdit1->setText( QString::number( i ) + "_" + tr( "GEOM_OBJECTS" ) ); + mySelectWdgt->LineEdit1->setText( QString::number( i ) + "_" + tr( "GEOM_OBJECTS" )); } @@ -413,8 +444,8 @@ void RepairGUI_ShapeProcessDlg::lineEditReturnPressed() void RepairGUI_ShapeProcessDlg::activate() { GEOMBase_Skeleton::ActivateThisDialog(); - connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication( ) ))->selectionMgr(), - SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() ) ); + connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication( )))->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() )); reset(); //myGeomGUI->SetState( 0 ); @@ -451,7 +482,7 @@ void RepairGUI_ShapeProcessDlg::reset() //================================================================================= const char* get_convert( const char* theParam, const QString& theValue ) { - if ( !strcmp( theParam, "SplitAngle.Angle" ) ) { + if ( !strcmp( theParam, "SplitAngle.Angle" )) { double doubleValue = theValue.toDouble() * M_PI / 180.; return CORBA::string_dup( QString::number( doubleValue ).toLatin1().constData() ); } @@ -464,7 +495,7 @@ const char* get_convert( const char* theParam, const QString& theValue ) //================================================================================= QString set_convert( const char* theParam, const char* theValue ) { - if ( !strcmp( theParam, "SplitAngle.Angle" ) ) { + if ( !strcmp( theParam, "SplitAngle.Angle" )) { Kernel_Utils::Localizer loc; double doubleValue = atof( theValue ) * 180. / M_PI; return QString::number( doubleValue ); @@ -502,7 +533,7 @@ void RepairGUI_ShapeProcessDlg::loadDefaults() for ( int j = 0; j < aParams->length(); j++ ) { QWidget* aCtrl = getControl( (const char*)aParams[j] ); - setValue( aCtrl, set_convert( (const char*)aParams[j], aValues[j] ) ); + setValue( aCtrl, set_convert( (const char*)aParams[j], aValues[j] )); } } } @@ -514,13 +545,13 @@ void RepairGUI_ShapeProcessDlg::loadDefaults() void RepairGUI_ShapeProcessDlg::setValue( QWidget* theControl, const QString& theValue ) { if ( theControl && !theValue.isNull() ) { - if ( qobject_cast( theControl ) ) + if ( qobject_cast( theControl )) qobject_cast( theControl )->setValue( theValue.toDouble() ); - else if ( qobject_cast( theControl ) ) + else if ( qobject_cast( theControl )) qobject_cast( theControl )->setValue( theValue.toInt() ); - else if ( qobject_cast( theControl ) ) + else if ( qobject_cast( theControl )) qobject_cast( theControl )->setEditText( theValue ); - else if ( qobject_cast( theControl ) ) + else if ( qobject_cast( theControl )) qobject_cast( theControl )->setChecked( theValue.toInt() != 0 ); } } @@ -532,13 +563,13 @@ void RepairGUI_ShapeProcessDlg::setValue( QWidget* theControl, const QString& th QString RepairGUI_ShapeProcessDlg::getValue( QWidget* theControl ) const { if ( theControl ) { - if ( qobject_cast( theControl ) ) + if ( qobject_cast( theControl )) return QString::number( qobject_cast( theControl )->value() ); - else if ( qobject_cast( theControl ) ) + else if ( qobject_cast( theControl )) return QString::number( qobject_cast( theControl )->value() ); - else if ( qobject_cast( theControl ) ) + else if ( qobject_cast( theControl )) return qobject_cast( theControl )->currentText(); - else if ( qobject_cast( theControl ) ) + else if ( qobject_cast( theControl )) return qobject_cast( theControl )->isChecked() ? "1" : "0"; } return 0; @@ -551,9 +582,9 @@ QString RepairGUI_ShapeProcessDlg::getValue( QWidget* theControl ) const QString RepairGUI_ShapeProcessDlg::getText( QWidget* theControl ) const { if ( theControl ) { - if ( qobject_cast( theControl ) ) + if ( qobject_cast( theControl )) return qobject_cast( theControl )->text(); - else if ( qobject_cast( theControl ) ) + else if ( qobject_cast( theControl )) return qobject_cast( theControl )->text(); } return QString::null; @@ -583,9 +614,10 @@ bool RepairGUI_ShapeProcessDlg::isValid( QString& msg ) while( aListIter.hasNext() ) { const QString& aParam = aListIter.next(); QWidget* aControl = getControl( aParam ); - if ( qobject_cast( aControl ) ) + if ( !aControl->isEnabled() ) continue; + if ( qobject_cast( aControl )) ok = qobject_cast( aControl )->isValid( msg, !IsPreview() ) && ok; - else if ( qobject_cast( aControl ) ) + else if ( qobject_cast( aControl )) ok = qobject_cast( aControl )->isValid( msg, !IsPreview() ) && ok; } } @@ -699,6 +731,9 @@ QWidget* RepairGUI_ShapeProcessDlg::getControl( const QString& theParam ) else if ( theParam == "SplitClosedFaces.NbSplitPoints" ) return mySplitClosedFacesNum; else if ( theParam == "FixFaceSize.Tolerance" ) return myFixFaceSizeTol; else if ( theParam == "DropSmallEdges.Tolerance3d" ) return myDropSmallEdgesTol3D; + else if ( theParam == "DropSmallSolids.WidthFactorThreshold" ) return myDropSmallSolidsWidTol; + else if ( theParam == "DropSmallSolids.VolumeThreshold" ) return myDropSmallSolidsWidTol; + else if ( theParam == "DropSmallSolids.MergeSolids" ) return myDropSmallSolidsMergeChk; else if ( theParam == "BSplineRestriction.SurfaceMode" ) return myBSplineSurfModeChk; else if ( theParam == "BSplineRestriction.Curve3dMode" ) return myBSpline3DCurveChk; else if ( theParam == "BSplineRestriction.Curve2dMode" ) return myBSpline2DCurveChk; @@ -740,6 +775,11 @@ void RepairGUI_ShapeProcessDlg::initParamsValues() myOpLst << "DropSmallEdges"; myValMap["DropSmallEdges"] << "DropSmallEdges.Tolerance3d"; + myOpLst << "DropSmallSolids"; + myValMap["DropSmallSolids"] << "DropSmallSolids.WidthFactorThreshold"; + myValMap["DropSmallSolids"] << "DropSmallSolids.VolumeThreshold"; + myValMap["DropSmallSolids"] << "DropSmallSolids.MergeSolids"; + myOpLst << "SplitAngle"; myValMap["SplitAngle"] << "SplitAngle.Angle"; myValMap["SplitAngle"] << "SplitAngle.MaxTolerance"; @@ -808,13 +848,13 @@ GEOM::string_array* RepairGUI_ShapeProcessDlg::getValues( const GEOM::string_arr { GEOM::string_array_var aValues = new GEOM::string_array(); aValues->length( theParams.length() ); - + for ( int i = 0; i < theParams.length(); i++ ) { QWidget* aCtrl = getControl( (const char*)theParams[i] ); - if ( aCtrl ) - aValues[i] = get_convert( (const char*)theParams[i], getValue( aCtrl ) ); + if ( aCtrl && aCtrl->isEnabled() ) + aValues[i] = get_convert( (const char*)theParams[i], getValue( aCtrl )); } - + return aValues._retn(); } @@ -863,9 +903,43 @@ void RepairGUI_ShapeProcessDlg::initSelection() void RepairGUI_ShapeProcessDlg::advOptionToggled( bool on ) { QAbstractButton* btn = (QAbstractButton*)sender(); - if ( on && btn->isCheckable() && - SUIT_MessageBox::warning( this, - tr( "GEOM_WRN_WARNING" ), tr( "TIME_CONSUMING" ), - SUIT_MessageBox::Yes | SUIT_MessageBox::No ) == SUIT_MessageBox::No ) - btn->toggle(); + if ( btn == myToBezierSurfModeChk ) + { + if ( on && btn->isCheckable() && + SUIT_MessageBox::warning( this, + tr( "GEOM_WRN_WARNING" ), tr( "TIME_CONSUMING" ), + SUIT_MessageBox::Yes | SUIT_MessageBox::No ) == SUIT_MessageBox::No ) + btn->toggle(); + } + + // either myDropSmallSolidsWidChk or myDropSmallSolidsVolChk must be checked + if ( btn == myDropSmallSolidsWidChk ) + { + myDropSmallSolidsWidTol->setEnabled( on ); + if ( !on ) { + myDropSmallSolidsVolChk->setChecked( true ); + myDropSmallSolidsVolTol->setEnabled( true ); + } + } + if ( btn == myDropSmallSolidsVolChk ) + { + myDropSmallSolidsVolTol->setEnabled( on ); + if ( !on ) { + myDropSmallSolidsWidChk->setChecked( true ); + myDropSmallSolidsWidTol->setEnabled( true ); + } + } +} + +//======================================================================= +//function : operatorChecked +//purpose : show parameters of a selected operator +//======================================================================= + +void RepairGUI_ShapeProcessDlg::operatorChecked( QListWidgetItem * item ) +{ + if ( item && item->checkState() == Qt::Checked ) + { + myStack->setCurrentIndex( myOpList->row( item )); + } } diff --git a/src/RepairGUI/RepairGUI_ShapeProcessDlg.h b/src/RepairGUI/RepairGUI_ShapeProcessDlg.h index 4a6480220..2049a0d62 100755 --- a/src/RepairGUI/RepairGUI_ShapeProcessDlg.h +++ b/src/RepairGUI/RepairGUI_ShapeProcessDlg.h @@ -34,9 +34,11 @@ class DlgRef_1Sel; class SalomeApp_IntSpinBox; class SalomeApp_DoubleSpinBox; -class QComboBox; class QCheckBox; +class QComboBox; class QListWidget; +class QListWidgetItem; +class QStackedLayout; //================================================================================= // class : RepairGUI_ShapeProcessDlg @@ -87,6 +89,7 @@ private: DlgRef_1Sel* mySelectWdgt; QListWidget* myOpList; + QStackedLayout* myStack; SalomeApp_DoubleSpinBox* myFixShapeTol3D; SalomeApp_DoubleSpinBox* myFixShapeMaxTol3D; @@ -120,7 +123,13 @@ private: SalomeApp_DoubleSpinBox* myToBezierMaxTol; SalomeApp_DoubleSpinBox* mySameParameterTol3D; - + + QCheckBox* myDropSmallSolidsWidChk; + QCheckBox* myDropSmallSolidsVolChk; + SalomeApp_DoubleSpinBox* myDropSmallSolidsWidTol; + SalomeApp_DoubleSpinBox* myDropSmallSolidsVolTol; + QCheckBox* myDropSmallSolidsMergeChk; + private slots: void onOk(); bool onApply(); @@ -131,6 +140,7 @@ private slots: void selectionChanged(); void selectClicked(); void advOptionToggled( bool ); -}; + void operatorChecked( QListWidgetItem * item ); +}; #endif // REPAIRGUI_SHAPEPROCESSDLG_H diff --git a/src/ShHealOper/ShHealOper_ShapeProcess.cxx b/src/ShHealOper/ShHealOper_ShapeProcess.cxx index d991e1f7e..26905677a 100644 --- a/src/ShHealOper/ShHealOper_ShapeProcess.cxx +++ b/src/ShHealOper/ShHealOper_ShapeProcess.cxx @@ -62,7 +62,6 @@ ShHealOper_ShapeProcess::ShHealOper_ShapeProcess ( ) : myLevel = TopAbs_EDGE; myDone = Standard_False; myOperations.Context()->SetDetalisation ( TopAbs_EDGE ); - myOperations.Context()->SetTraceLevel( 3 ); } //======================================================================= @@ -131,23 +130,8 @@ void ShHealOper_ShapeProcess::Perform(const TopoDS_Shape& theOldShape, myStatistics.AddModif( txt.ToCString() ); } } - -// for (TopTools_DataMapIteratorOfDataMapOfShapeShape It (myOperations.Context()->Map()); It.More(); It.Next()) { -// TopoDS_Shape keyshape = It.Key(), valueshape = It.Value(); -// /* if (keyshape.ShapeType() == TopAbs_SHELL) { -// if (valueshape.IsNull()) SN++; -// else SS++; -// } -// else if (keyshape.ShapeType() == TopAbs_FACE)*/ { -// if (valueshape.IsNull()) cout << "Removed" << endl; -// else { -// TopAbs::Print( keyshape.ShapeType(), cout ) << " -> "; -// TopAbs::Print( valueshape.ShapeType(), cout ) << " IsSame()=" << keyshape.IsSame(valueshape) << endl; -// } -// } -// } - } + //======================================================================= //function : SetOperators //purpose : -- 2.39.2