From 2981cca5dd1ce44999a72fd8d46878518e5093fb Mon Sep 17 00:00:00 2001 From: rnv Date: Tue, 13 Mar 2012 08:41:21 +0000 Subject: [PATCH] Implementation of the "0021239: EDF 1829 OCC: Bring to front selected objects" issue. --- doc/salome/gui/GEOM/images/bring_example.png | Bin 0 -> 53635 bytes doc/salome/gui/GEOM/images/dialog.png | Bin 7626 -> 9870 bytes doc/salome/gui/GEOM/input/bring_to_front.doc | 10 ++ .../gui/GEOM/input/viewing_geom_obj.doc | 4 + resources/SalomeApp.xml.in | 1 + src/GEOMGUI/GEOMGUI_Selection.cxx | 39 +++++ src/GEOMGUI/GEOMGUI_Selection.h | 1 + src/GEOMGUI/GEOM_Displayer.cxx | 19 ++- src/GEOMGUI/GEOM_msg_en.ts | 28 ++++ src/GEOMGUI/GeometryGUI.cxx | 45 +++++- src/GEOMGUI/GeometryGUI.h | 3 + src/GEOMGUI/GeometryGUI_Operations.h | 2 + src/GEOMToolsGUI/GEOMToolsGUI.cxx | 6 + src/GEOMToolsGUI/GEOMToolsGUI.h | 2 + src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 144 ++++++++++++++++-- src/OBJECT/GEOM_AISShape.cxx | 45 +++++- src/OBJECT/GEOM_AISShape.hxx | 5 + src/OBJECT/GEOM_Actor.cxx | 4 +- src/OBJECT/GEOM_Constants.h | 3 +- 19 files changed, 333 insertions(+), 28 deletions(-) create mode 100755 doc/salome/gui/GEOM/images/bring_example.png create mode 100644 doc/salome/gui/GEOM/input/bring_to_front.doc diff --git a/doc/salome/gui/GEOM/images/bring_example.png b/doc/salome/gui/GEOM/images/bring_example.png new file mode 100755 index 0000000000000000000000000000000000000000..62be78dfd25917274486d989487d8b81edd8bd81 GIT binary patch literal 53635 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⁢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 literal 7626 zcma)BbyQUE)*cWk=>aK+5&;1zrMqNk7={KVM7q1XTN(igk!}fLD2bs#kuCvYh=HLS z`Nq4x`}^+t-Fw&i{y6KLGyA+}_PfvC@AK^Ejn+_8AjGG^2LJ$sieNbi`rHiwVA$be zqp#eXm#6>$P_m+&G}J3+FV{C|@kdr);uZh%rRVFqUD%kj!5FMm3z_$O0KrMn^jfhI zjxdrnuLh!C5=dj({Jd&;6Mj>Zjp9ZkA-C*Ezkmrt1XZo6tzcUc*4J7wzPh^6VIqNk zD$%nz#L|+_KK&kD>l8$JM@M<51EH(2pI%)pQHJ_@x)*~&VT!I=oUq_luTT48Sj0Uz~F zZ?nc#=jt-Y=iV$8Bl3sp^m5zY`3D%(oYp~e8tTn2PZkU3>t=Hs*6LDoT`RmeGSa5R z=iag>_MP3#K2p9!8R53TMh)m=-QHMK3fz)>7tz3y^J2qf5+lbTrHcu|C6<>8i)3Q> zDoaYTT7VmM@K1A|T&?}2C;EU4yWe(plzjpOw4KrN+ato=CEG9)Z%$mqZYGCmJGj65 zd69L)hG+D+P%9em0U>Ms^!B}~cePKEJYYFRAxdX>p)H-X3g)ucj-kcy_-%jd;CP^( z=RK~LLuc5@7NLd3D?L|nz)z0h>3e{HWBS+JhIfL3lKhw6>qE9q8!?0_D}sxz6xEmA zlfNHfk-p3B$8r?6%_VEUgcc|WUAHRKUF?SU-|YYe)6=}Ymk2M`n(5&3g5trk9k*D3 zpTjGc6df?6E+A;-rk)|F^LHETVdI86CLk~HV196~=HhqFA@WxD9w4vde8=D`>qmld zrcBSv`Fd2K&((sS+v($!mGRcIZ-e6qqfVl?f4qkK`<=G!vP!Ek2d+8W^1oi*ih~N!=*o!vg2y$ zH2wK-jF|7;l%C5jwwUY66cP`-^yAhu&b%7 z)-zJrxOtDJ{NJpVOBfqYd zec-M$`aMc-Pas70-R^T7ZuRZz^QLVQ#wimKx&N3l=#0u6>;%G&28vDlrNLIrfc&be zXGkGjJi<@1|CV&D6AERPDjziK>`a^(21vkRrPFjHyEJoZm><+lBr>TdEj4g4wf361 zjb{ct$i67@PgMi@fSR1d=vV=rX4y&JE^Y5Xzp-BnCH8>=ZKY1wK0d4%}) z8GL?fOcwZ5pS-P9(-9}kDpS9}a%YU`UBOc#p02r9(@b}UwQAKvZ%h&C*NVvC@D>CKbI|@ zru{1_Ut+rcNZ<2^b~I1$Vr)!~$B65W*Y9O6r**GQs=XY?gRhoSKTlFB7VG?ym&B&Q zf~l`r>pvrbq@#+UvF%AMO6W&6c>sbwSq}^gyQ$^k8w)0BQNXVD9gvs50ApgO%p(%3 zUTz*90%9g=uFS<3-{^+qc+y8#L+{-KyQ@Z4vkf2`qTs**gv-FN_b*p(w)z-YP9!IS zH*?&41%90$7mwK*;eEU*jBWQRnJ_yfT0pbz=To3GUtZ9=akFDzM}~}HOdf_|b^s`* z5EB5^4maJJfD&dGm@64#;@r6auFpoD$T6gbDIjX(^RijE^AN?6t^MBFS=@-oNL~vi z!G1V=B3Vr~-NMb&)67mqT0sGaTtC=hD^uc0yns7F8MOQpAO@&cKKi`c1A-iSn6aQ= z*;4i%OTB%s;Ng(NE|_d$?ps2&3bwJaF}URU*3OO`%Tn;z7=eh0NYdb&B(;)n$@@~4 zETM9o5m2UR6_#~nsp9zQ>ebe#hBkd>jbmjFWP~9XqeF5ev3(QE(-Cg1_p(%I4!s_M zKp-$n%GMV6F`c?ffTN?Mg03f}nKK^RRQASRJeb14GTZx^p|UrbMEvj3q3;Em%mqcy zqQ~55TA8J_pdTSmsUm`#1n^oNR00y=W>zRGh2KAg)*u9ja*NIRFt(*#?O@&Cn?>I` z^|Nr96=lRo6?_$F$pOHAEV5{<7pk&+$w7ss;7{)+pcI2pe0zKQfu11p6u;ZhEXqdT zcD{q16~7l(f)!R@vI{Y>lcM0HDQ0Mgqu}e{PmriSb8zuH^rrto0(lb@d3)D+nUmzi=w$gct+vXb`1PFV*)q`0Bt$V1$<8qLtySL{ zAp2>)RV_uouip%&sDc)Tf7mO~VV6q+_a>{b6u{#{sNUgOWgBdfn(;D|IhQIC3_{7! zu<1q^El0cNjNlEXq}OcTh0S}^b}K}_{2XaeN)l|k1@1MI;!A**6PCRpi!fzKQ({U} zqQENLM*BOVP0a&k1}ZX>6Acz$G3 zIlIBCLr7iDd%-->Qz?(@%CjTqip>1y=JUy*p;h4p)*$0i;eD|l4a@Hz5#q0Wa2_wMg zSPqjQL8vHi@pk+IP|u)AlQ7jY)~06{MQTk7m~!=O_BySP9?}+McYXnE%xRcFFQG?^ z-y@KbrWrFFj%A9KTK+ojzWVAp*4b^c0khQ^0iG#b`e_a23**5hY1XO2aBgEq%Eu^@ zFGYFB==GCkmBzSg)%SA$VP{{ z{R@LxVPqmd0WtMr{s*)v*_P|VS&CW-J3^9tNM_Y!N>$`Pp<~iya>5a5PG_5%ZhK~% zC#GIN%E2Va!e(FVktguz@!I@#=dbn2QrVGsLLVb$~ zz#iyS5n(pPR!I}5#cj@Ic(t?}5WAw>d`eR>6|k2Nppj+9?r&77KU}w14A?_cr3V7Y zgJ?N*6Zxv+@QPy5_<6_2n*x-HJzV0(lO5}vz?Mk4=Xdrgg7`R|J4Jz<^{5~@PSXV zVOaP73sL@?SCcQ8tRh$y-!s01DCQGS2)FZg(44}8zq4bv2@m@Tsf%F-rp}ii)~zP< zL_0AK&#!9GR#Go@lMb4B)z4*?-&G&i&VMk(&`Udq&|7mBB;tK7eDTEPNb)Fz zR`LniGo}{bx6({7lpx=X%lIwzyF=1f+K#KpV!AG(OyWv0E| z-3NR`GMEL;&CO<6Rk)S-!0$0UAf|uoG{}Q-gy{46@hl{ypN(H%^W)`?9|NB!XF-8j z9$G9S4t1kNCH-oln=WfE5?Q;XJn3J9GRInPo z@cGSt&VgSuabGijD=0$|k*?wVEf@aLQ=v#m@vn$T%`pD9%)<{cTI=d~35W^r0SJ0B zZ|=6^)$=P5wzHj{f(gR6v9rIgP=^ilM&AyC@D6DeNbMGy2*>Xn>B+XOHK2s+k>~3z z+j|#_i(GyO-7l?j5#|fKojuiiw*WTG?|v;lsjcRlPr>xAG%q8td5U&HoOjdOvyHZt z%kw_OE}`^Aosx;N^tW>vK{=cnR>?9q{W@5Ql4n9^^s|ZG!O}=kp|ConYo_;!&b^j_TmgxYAUr+?8NVVGtfHc#*?Nly%!*%sb}_v2 z*?tn2m}qWhhWW*aNYrz`_W?I72u&DQCkkZ$xIVwIaOktrwk2E)&j_j{Xo;CUWh$;^ zWqkD%*o_`P?dXT0rJhM_(T@qcSZ0fO=}JYLkvz=7BjGFYdwYeh>-!VR)r<8+_*ky! z;jGsC+H>xnOv%ok^Pf475S7!eBT_I33#Rc*LH~2`m>8jwnl$^f$0=G#-`%W4@;Bj! z-`3GwlUBSe1E2JbtM{)r zgx>Ozh13&-_ku8b00gp;rc~gPNi-P^`7}f&dcv5Bq*^=lV#DeB5&1)T&KwwFDmCL~ z^|IiQHbS!=5?Rg8^WuJaIn%>f#>w=qLgA&0wYAHw{e1^;kQ%lwy1{HuJ;g$g(a~lr zPk> zTiJjn+`Rr*ZX-GTz->2?N^^#fT=U4?*MbQhrhY-ko40y(BxLwG`Y-=$o15()ndi4DoFjCH>G%2i-lOMtGADN{ z!x!6C8G>Ra=xRzsO;q^Tn9YB-M&~~c(W9=GZwV=#PS_qd-jqILFx=ak&Jg021^gf; zhSA6hx2+#q>V18buj8JNivcGSM5(nB#qmP*K@Do1BsJ&lak&e>!_Jp4s<<({y@Q)p z4mK9e)`mQ-tgLWp1s!@7#o?=Ac||-D^P%H8E&|Iwr}BOm`)`q3fp{^TqWhfe9kQEv zS8{enmqZ{jFB0y~8@`U_8(*(q(QUjEE!4L)cXT~H>lX)mg2}Y>@@75}|Eau6{f7Kq5jDwMG)!K@y(^6hOY zH5V1N*LBG1c(8At77v$qN2n{6IlUiv!zZ-&c{1Oc=IBz42qY3_#D!x#!z(5hcYA%l zURsp!mHL>g-&|cRF1#cV!?E*Lz&{c^39OoFK;(TwTpI@?k}+L$>cQbjBIW+L+xh691K~Pj|)%*nnA)thKGp zx%)n)RJui6TpU_9Aw(BoJK|Iz9F=4&ix3KdUJ%8{#WB1eHS_a(WNvP*F%^PJ;v7y9 z@9{;oM~eHNy+}i8G`i>nmaYp)KSIAeA|ir^hbJgG`Ol+Sx)wKSrQ5wOgCLAHC zl_P&x=ej?^BbuN>w%JC^PlIdLngvOcwsxJb(A<*ZOpT8G=N2 z&&GJ(YIH%@cEV$KB;_FXL+;`((l3RrbPK`~l6W2v$6qn?^PMtR_vy@QV(rm%)mEG! zbV-=sDM(%a`0A#lIw=<2wT*8(brAC*_$UH&GBwX7z{(b6rIk#S>$Mi$f~+6TXH#Mv z73QPj%JsV&{P4iBMUcR}K906>6U#S?i@FI;LhEV^VGJ>g(K-RKQvjTPf$pR8nCpZL zjj`480KF2S00A!7c``Rg&Fq)Xn1QYujF>$<`PK&E0Hr&w{HNXn>#|hz^l;mn_J~j% z;s{b-Y7aGX)1KwWS9%fxn)3(B85F*_{E`VbvnB;0dIZOtqplmGP{$&>-s^kFUWg+x z*?kN$Pv{O$3OO}-GFYO4QBT)Hi0POvtT$PY_&a?r&Z}4Wm z3|4u$85;0`KwwHbhy3H}!$W5RLPAqysD#yrlj}{ zCOikQe>+!RmL7nv2Gs-B#yq#efV}6&e+Kri_)U05;SyV>lm4ZG+aZ7_r>FO+aTtRq z78VTaMs%=r!tt!-Gl~B1nZG2xt|xwcpWU4|q!5%kgirB_bF_Vr8ia&d@SWfFqiJVQ zzxwBza2qX7#a*C}$Qy^C%?QiJF|pC_H%sMqRfO|M-#5#ajs6RLN`>-UOb1HVJ`kHO z3wM6O5Fv_WK#lXl**Uw81Kf<*hWuoN;uSuHC3UkXiG@*L6ys+LSPFjX#t*F1q;fl z?%3Rp(~1A=Ch95{aHiqlgWr5z@v!7l2stL*=&wJ8f_^aO90fC%=+3M1)m>pM-URiH z7rW2SeN3&cK@9DaS1jnZ&*SB14~M_EhdnZ^LVVVbTI`}KwLgk~Z=cIj=wEc)ixj~@(ZBdz=iD2p314&xr_Bw-j zeXu$13((QR@#LXb`GJV4@YByL+PtXHS1 zQmazux?y-@R1l{e6iK0WT|Twi^ECaf^N*zcmSdvzrUi!wq6r#N^NE@q=untCq1w-1 z9`9?Ays(|I|D>JpSS8!W#E84`Hlo&LWK>GdiQbgbkjnz^BTb)8>B9q-g8V!P@MXo@ABG7!lSc)%tR_SWG=kD;;LW%ayxK$b&a8&sfxoPj+&ph=PNY^W6wOECoKAG=;;TxoE|)_YRg_p z@V;|ccg?P|kid5Ju0iy~OD0YEBs=?iT5Sxa={4ES{W^zWa2hrdaOhUMX(!GI*A-hs zCfXx}RU5L^4WCIIpY@IFEMyMr^{rV1>P$Wwy=J*@6rJxC-ihkCo|v4}YN{?N!8u>@ ze624m3j4%hih!S9kqh@3CElq&yM8?FMMG7iSBEL;fn+mmHir{cqHoSu0t2Ulou9RQ zIeI@C#Nc{u;PZ*6UrNn7cdLbtYQ<-_O0VJV=&$;`ygWr|@(fDfFdHxT=T3%+89ujP zZOv^yJ3{!8{aU@UBGBv|PUBYc+uK{cR<|;HYC)k}l6WhIseOpHZGL=9!;?a|I=Qnr z{9@S`_3WBc5z@yeS=NU$V7sJts-yhaCVE^IW#Q=wuToE@fIWwT)SJPmF9 viewer and from the Object Browser.
  • \subpage display_mode_page "Display Mode" - allows to select between Wireframe and Shading presentation.
  • +
  • \subpage bring_to_front_page "Bring To Front" - allows to bring to +front of the viewer selected geometrical object.
  • +
  • Clear Top Level State - allows to remove from foregroung of the viewer +geometrical objects which were added there via Bring To Front command.
  • \subpage color_page "Color" - allows to change the filling color in the standard Select Color menu.
  • \subpage transparency_page "Transparency" - allows to change the diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index f910e6569..ae902aa02 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -49,6 +49,7 @@ + diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index ca089eb23..d7977004b 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -149,6 +149,8 @@ QVariant GEOMGUI_Selection::parameter( const int idx, const QString& p ) const v = isAutoColor( idx ); else if ( p == "isVectorsMode" ) v = isVectorsMode( idx ); + else if ( p == "topLevel" ) + v = topLevel( idx ); else if ( p == "hasHiddenChildren" ) v = hasHiddenChildren( idx ); else if ( p == "hasShownChildren" ) @@ -512,3 +514,40 @@ QString GEOMGUI_Selection::selectionMode() const } return ""; } + +bool GEOMGUI_Selection::topLevel( const int index ) const { + bool res = false; + +#ifdef USE_VISUAL_PROP_MAP + bool found = false; + QVariant v = visibleProperty( entry( index ), TOP_LEVEL_PROP ); + if ( v.canConvert() ) { + res = v.toBool(); + found = true; + } + + if ( !found ) { +#endif + SALOME_View* view = GEOM_Displayer::GetActiveView(); + QString viewType = activeViewType(); + if ( view && viewType == OCCViewer_Viewer::Type() ) { + SALOME_Prs* prs = view->CreatePrs( entry( index ).toLatin1().constData() ); + if ( prs ) { + if ( viewType == OCCViewer_Viewer::Type() ) { // assuming OCC + SOCC_Prs* occPrs = (SOCC_Prs*) prs; + AIS_ListOfInteractive lst; + occPrs->GetObjects( lst ); + if ( lst.Extent() ) { + Handle(AIS_InteractiveObject) io = lst.First(); + if ( !io.IsNull() ) { + Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(io); + if ( !aSh.IsNull() ) + res = (bool)aSh->isTopLevel(); + } + } + } + } + } + } + return res; +} diff --git a/src/GEOMGUI/GEOMGUI_Selection.h b/src/GEOMGUI/GEOMGUI_Selection.h index edcdcfada..ed9ed7182 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.h +++ b/src/GEOMGUI/GEOMGUI_Selection.h @@ -69,6 +69,7 @@ private: bool hasHiddenChildren( const int ) const; bool hasShownChildren( const int ) const; bool compoundOfVertices( const int ) const; + bool topLevel( const int ) const; bool isComponent( const int ) const; GEOM::GEOM_Object_ptr getObject( const int ) const; diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 8d7bb7603..ea0fbcade 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -666,15 +666,18 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs ) AISShape->SetDisplayMode( aPropMap.value(DISPLAY_MODE_PROP).toInt() ); AISShape->SetDisplayVectors(aPropMap.value(VECTOR_MODE_PROP).toInt()); - //Color property - if(aPropMap.contains(COLOR_PROP)) { + if(aPropMap.contains(TOP_LEVEL_PROP)) { + AISShape->setTopLevel( aPropMap.value(TOP_LEVEL_PROP).value() ); + } + + if(aPropMap.contains(COLOR_PROP)) { Quantity_Color quant_col = SalomeApp_Tools::color( aPropMap.value(COLOR_PROP).value()); AISShape->SetShadingColor( quant_col ); } else useObjColor = true; }else { MESSAGE("myDisplayMode = "<< myDisplayMode) - AISShape->SetDisplayMode( myDisplayMode ); + AISShape->SetDisplayMode( myDisplayMode ); AISShape->SetShadingColor( myShadingColor ); } @@ -848,7 +851,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs ) AISShape->SetOwnDeviationCoefficient(aDC); } } - + if ( HasTexture() ) { AISShape->SetTextureFileName(TCollection_AsciiString(myTexture.c_str())); @@ -856,7 +859,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs ) AISShape->DisableTextureModulate(); AISShape->SetDisplayMode(3); } - + if ( HasWidth() ) AISShape->SetWidth( GetWidth() ); @@ -899,7 +902,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs ) anAspect->SetTypeOfMarker( myTypeOfMarker ); AISShape->Attributes()->SetPointAspect( anAspect ); } - } else if(!hasColor) { + } else if( !hasColor ) { //In case if color wasn't defined in the property map of the object //and GEOM_Object color also wasn't defined get default color from Resource Mgr. QColor col = aResMgr->colorValue( "Geometry", "shading_color", QColor( 255, 0, 0 ) ); @@ -2025,6 +2028,10 @@ PropMap GEOM_Displayer::getDefaultPropertyMap(const QString& viewer_type) { //11. Width of iso-lines aDefaultMap.insert( ISOS_WIDTH_PROP , aResMgr->integerValue("Geometry", "isolines_width", 1)); + if(viewer_type == SOCC_Viewer::Type()) { + + aDefaultMap.insert(TOP_LEVEL_PROP, Standard_False); + } return aDefaultMap; } diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 0854f89bf..802b44394 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -2363,6 +2363,30 @@ Please, select face, shell or solid and try again MEN_DISPLAY_ONLY Show Only + + MEN_BRING_TO_FRONT + Bring To Front + + + TOP_BRING_TO_FRONT + Bring To Front + + + STB_BRING_TO_FRONT + Bring To Front + + + MEN_CLS_BRING_TO_FRONT + Clear Top Level State + + + TOP_CLS_BRING_TO_FRONT + Clear Top Level State + + + STB_CLS_BRING_TO_FRONT + Clear Top Level State + MEN_EDGE Edge @@ -2935,6 +2959,10 @@ Please, select face, shell or solid and try again PREF_ISOS_COLOR Color of isolines + + PREF_TOPLEVEL_COLOR + Top level color + PREF_LINE_COLOR Color of edges, vectors, wires diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 09aa1abf1..4eebd7280 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -426,6 +426,8 @@ void GeometryGUI::OnGUIEvent( int id ) case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH + case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT + case GEOMOp::OpClsBringToFront: // libName = "GEOMToolsGUI"; break; case GEOMOp::OpDisplayMode: // MENU VIEW - WIREFRAME/SHADING @@ -844,6 +846,8 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true ); createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true ); createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" ); + createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true ); + createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" ); createGeomAction( GEOMOp::OpHide, "ERASE" ); createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true ); @@ -1216,6 +1220,17 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule ); mgr->insert( separator(), -1, -1 ); // ----------- + +#if OCC_VERSION_LARGE > 0x06050200 + //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false"; + QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true"; + mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front + mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule ); + mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule ); + mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front + mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule ); +#endif + mgr->insert( separator(), -1, -1 ); // ----------- dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule ); @@ -1308,7 +1323,6 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule); mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule ); - mgr->insert( separator(), -1, -1 ); mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object @@ -1693,6 +1707,12 @@ void GeometryGUI::createPreferences() addPreference( tr( "PREF_ISOS_COLOR" ), genGroup, LightApp_Preferences::Color, "Geometry", "isos_color" ); + addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup, + LightApp_Preferences::Color, "Geometry", "toplevel_color" ); + + addPreference( "", genGroup, LightApp_Preferences::Space ); + + int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup, LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" ); @@ -1964,6 +1984,13 @@ void GeometryGUI::storeVisualParameters (int savePoint) param = occParam + TRANSPARENCY_PROP; ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data()); } + + if(aProps.contains(TOP_LEVEL_PROP)) { + param = occParam + TOP_LEVEL_PROP; + Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value(); + if (val == Standard_True) + ip->setParameter(entry, param, "1"); + } } if(aProps.contains(ISOS_PROP)) { @@ -2092,9 +2119,12 @@ void GeometryGUI::restoreVisualParameters (int savePoint) } else if(paramNameStr == OPACITY_PROP) { aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble()); - } else if(paramNameStr == TRANSPARENCY_PROP) { - aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, val.toDouble()); + } else if(paramNameStr == TRANSPARENCY_PROP) { + aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() ); + } else if(paramNameStr == TOP_LEVEL_PROP) { + aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False ); + } else if(paramNameStr == DISPLAY_MODE_PROP) { aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt()); @@ -2179,6 +2209,15 @@ void GeometryGUI::onViewAboutToShow() } } +/*! + \brief Return action by id + \param id identifier of the action + \return action +*/ +QAction* GeometryGUI::getAction(const int id) { + return action(id); +} + /*! \brief Check if this object is can't be renamed in place diff --git a/src/GEOMGUI/GeometryGUI.h b/src/GEOMGUI/GeometryGUI.h index b584fd7e3..ccb81254b 100644 --- a/src/GEOMGUI/GeometryGUI.h +++ b/src/GEOMGUI/GeometryGUI.h @@ -56,6 +56,7 @@ class QDialog; class QMenu; +class QAction; class GEOMGUI_OCCSelector; class LightApp_VTKSelector; class LightApp_Selection; @@ -131,6 +132,8 @@ public: virtual void storeVisualParameters (int savePoint); virtual void restoreVisualParameters(int savePoint); + QAction* getAction(const int id); + public slots: virtual bool deactivateModule( SUIT_Study* ); virtual bool activateModule( SUIT_Study* ); diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index a4ad5eadf..c21e405e2 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -70,6 +70,8 @@ namespace GEOMOp { OpShadingWithEdges = 2202, // POPUP MENU - DISPLAY MODE - SHADING WITH EDGES OpVectors = 2203, // POPUP MENU - DISPLAY MODE - SHOW EDGE DIRECTION OpTexture = 2204, // POPUP MENU - DISPLAY MODE - TEXTURE + OpBringToFront = 2205, // POPUP MENU - BRING TO FRONT + OpClsBringToFront = 2206, // BasicGUI ------------------//-------------------------------- OpPoint = 3000, // MENU NEW ENTITY - BASIC - POINT OpLine = 3001, // MENU NEW ENTITY - BASIC - LINE diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index 05259bf29..0234bd4bc 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -373,6 +373,12 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) case GEOMOp::OpIsosWidth: OnIsosWidth(); break; + case GEOMOp::OpBringToFront: + OnBringToFront(); + break; + case GEOMOp::OpClsBringToFront: + OnClsBringToFront(); + break; default: SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); break; diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h index 2141f0c97..e6b80f3cc 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.h +++ b/src/GEOMToolsGUI/GEOMToolsGUI.h @@ -78,6 +78,8 @@ private: void OnMaterialProperties(); void OnEdgeWidth(); void OnIsosWidth(); + void OnBringToFront(); + void OnClsBringToFront(); // Shortcut commands void OnChangeTransparency( bool ); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index 31b734b33..3a002dbfa 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -23,6 +23,8 @@ // File : GEOMToolsGUI_1.cxx // Author : Sergey ANIKIN, Open CASCADE S.A.S. (sergey.anikin@opencascade.com) +#define protected public + #include #include "GEOMToolsGUI.h" @@ -81,6 +83,9 @@ #include #include #include +#include +#include + #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include @@ -89,6 +94,7 @@ #endif // QT Includes +#include #include #include #include @@ -103,7 +109,6 @@ // VTK includes #include - void GEOMToolsGUI::OnCheckGeometry() { SalomeApp_Application* app = @@ -296,13 +301,17 @@ void GEOMToolsGUI::OnColor() } } // if ( isVTK ) else if ( isOCC ) { - Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( selected.First() ); + Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( selected.First() ); if ( !io.IsNull() ) { Quantity_Color aColor; - io->Color( aColor ); - QColor initcolor ((int)( aColor.Red() * 255.0 ), - (int)( aColor.Green() * 255.0 ), - (int)( aColor.Blue() * 255.0 )); + io->Color( aColor ); + QColor ic = QColor((int )( aColor.Red() * 255.0 ), + (int)( aColor.Green() * 255.0 ), + (int)( aColor.Blue() * 255.0 )); + + QVariant v = appStudy->getObjectProperty(mgrId,selected.First()->getEntry(), COLOR_PROP, ic); + + QColor initcolor = v.value(); QColor c = QColorDialog::getColor( initcolor, app->desktop() ); if ( c.isValid() ) { SUIT_OverrideCursor(); @@ -343,16 +352,16 @@ void GEOMToolsGUI::OnColor() ic->SetLocalAttributes(io, aCurDrawer, Standard_False); } } - + io->SetColor( aColor ); if ( io->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) { Handle(GEOM_AISShape) aGAISShape = Handle(GEOM_AISShape)::DownCast( io ); aGAISShape->SetShadingColor( aColor ); aGAISShape->storeBoundaryColors(); } - + appStudy->setObjectProperty(mgrId,It.Value()->getEntry(), COLOR_PROP, c); - + io->Redisplay( Standard_True ); // store color to GEOM_Object @@ -367,7 +376,7 @@ void GEOMToolsGUI::OnColor() aSColor.G = (double)c.green() / 255.0; aSColor.B = (double)c.blue() / 255.0; anObject->SetColor( aSColor ); - anObject->SetAutoColor( false ); + anObject->SetAutoColor( false ); } } // for ic->UpdateCurrentViewer(); @@ -406,8 +415,8 @@ void GEOMToolsGUI::OnTexture() io = GEOMBase::GetAIS( It.Value(), true ); if ( !io.IsNull() ) { if ( io->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) - Handle(GEOM_AISShape)::DownCast( io )->SetTextureFileName(TCollection_AsciiString(aTexture.toStdString().c_str())); - io->Redisplay( Standard_True ); + Handle(GEOM_AISShape)::DownCast( io )->SetTextureFileName(TCollection_AsciiString(aTexture.toStdString().c_str())); + io->Redisplay( Standard_True ); } // if ( !io.IsNull() ) } // for ic->UpdateCurrentViewer(); @@ -570,7 +579,7 @@ void GEOMToolsGUI::OnNbIsos( ActionType actionType ) Handle(AIS_Drawer) CurDrawer = CurObject->Attributes(); QVariant v = aStudy->getObjectProperty( aMgrId, CurObject->getIO()->getEntry(), EDGE_WIDTH_PROP , QVariant() ); - + int width = v.isValid() ? v.toInt() : 1; CurDrawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width , newNbUIso) ); @@ -1187,3 +1196,112 @@ void GEOMToolsGUI::OnIsosWidth() { GeometryGUI::Modified(); } // end vtkviewer } + +void GEOMToolsGUI::OnBringToFront() { + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) + return; + + SalomeApp_Module* mod = dynamic_cast(app->activeModule()); + if(!mod) + return; + + GEOM_Displayer* disp = dynamic_cast(mod->displayer()); + + if(!disp) + return; + + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) + return; + + SALOME_ListIO selected; + aSelMgr->selectedObjects( selected ); + if ( selected.IsEmpty() ) + return; + + SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); + if(!appStudy) + return; + + SUIT_ViewWindow* window = app->desktop()->activeWindow(); + + OCCViewer_Viewer* vm = dynamic_cast( window->getViewManager()->getViewModel() ); + if ( !vm ) + return; + + bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); + + QAction* a = getGeometryGUI()->action( GEOMOp::OpBringToFront ); + bool checked = a->isChecked(); + + if ( isOCC ) { + GEOMBase* gb = new GEOMBase(); + Handle(GEOM_AISShape) aisShape; + + Handle(AIS_InteractiveContext) ic = vm->getAISContext(); + SALOME_ListIO anIOlst; + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + aisShape = gb->ConvertIOinGEOMAISShape( It.Value(), true ); + if ( !aisShape.IsNull() ) { + aisShape->setTopLevel(checked); + int aMgrId = window->getViewManager()->getGlobalId(); + appStudy->setObjectProperty( aMgrId, aisShape->getIO()->getEntry(), TOP_LEVEL_PROP, checked ); + anIOlst.Append(aisShape->getIO()); + } + } // for... + disp->Redisplay(anIOlst); + GeometryGUI::Modified(); + } // if ( isOCC ) +} + +void GEOMToolsGUI::OnClsBringToFront() { + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if(!app) + return; + + SalomeApp_Module* mod = dynamic_cast(app->activeModule()); + if(!mod) + return; + + GEOM_Displayer* disp = dynamic_cast(mod->displayer()); + + if(!disp) + return; + + + SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); + if(!appStudy) + return; + + SUIT_ViewWindow* window = app->desktop()->activeWindow(); + + bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); + + if(isOCC){ // if is OCCViewer + + OCCViewer_Viewer* vm = dynamic_cast( window->getViewManager()->getViewModel() ); + Handle (AIS_InteractiveContext) ic = vm->getAISContext(); + + SALOME_ListIO anIOlst; + AIS_ListOfInteractive aList; + ic->DisplayedObjects( aList ); + for ( AIS_ListIteratorOfListOfInteractive it( aList ); it.More(); it.Next() ) { + + Handle(GEOM_AISShape) CurObject = Handle(GEOM_AISShape)::DownCast(it.Value()); + + if(CurObject.IsNull()) + continue; + + CurObject->setTopLevel(Standard_False); + + int aMgrId = window->getViewManager()->getGlobalId(); + appStudy->setObjectProperty( aMgrId, QString(CurObject->getIO()->getEntry()), TOP_LEVEL_PROP, Standard_False ); + anIOlst.Append(CurObject->getIO()); + } + disp->Redisplay(anIOlst); + GeometryGUI::Modified(); + } +} + diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index 9313c6ee7..81a6dbe1c 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -72,6 +72,11 @@ #include #include +#include + +#include +#include + static void getEntityOwners( const Handle(AIS_InteractiveObject)& theObj, const Handle(AIS_InteractiveContext)& theIC, @@ -139,6 +144,8 @@ GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape, myUIsoNumber = -1; myVIsoNumber = -1; + + myTopLevel = Standard_False; } void GEOM_AISShape::setIO(const Handle(SALOME_InteractiveObject)& io){ @@ -174,17 +181,30 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent const Standard_Integer aMode) { if (IsInfinite()) aPrs->SetInfiniteState(Standard_True); //pas de prise en compte lors du FITALL + + Handle(AIS_InteractiveContext) anIC = GetContext(); -// StdSelect_DisplayMode d = (StdSelect_DisplayMode) aMode; + // StdSelect_DisplayMode d = (StdSelect_DisplayMode) aMode; switch (aMode) { case 0://StdSelect_DM_Wireframe: { + restoreIsoNumbers(); // Restore wireframe edges colors restoreBoundaryColors(); + + if(isTopLevel()) { + SetColor(topLevelColor()); + + Handle(Prs3d_LineAspect) anAspect = Attributes()->WireAspect(); + anAspect->SetColor( topLevelColor() ); + Attributes()->SetWireAspect( anAspect ); + } + StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer); + break; } case 1://StdSelect_DM_Shading: @@ -200,7 +220,10 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent } case 3: //StdSelect_DM_HLR: { - AIS_TexturedShape::Compute(aPresentationManager, aPrs, aMode); + if(!isTopLevel()) + AIS_TexturedShape::Compute(aPresentationManager, aPrs, aMode); + else + shadingMode(aPresentationManager, aPrs, AIS_Shaded); break; } } @@ -373,7 +396,7 @@ void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPre // P->SetPrimitivesAspect(a4bis); // G->SetGroupPrimitivesAspect(a4bis); //a4bis->SetInteriorColor(myShadingColor); - myDrawer->ShadingAspect()->SetColor(myShadingColor); + myDrawer->ShadingAspect()->SetColor(isTopLevel() ? topLevelColor() : myShadingColor); // PAL12113: AIS_Shape::Compute() works correctly with shapes containing no faces //StdPrs_ShadedShape::Add(aPrs,myshape,myDrawer); @@ -433,3 +456,19 @@ void GEOM_AISShape::restoreBoundaryColors() anAspect->SetColor( myUnFreeBoundaryColor ); myDrawer->SetUnFreeBoundaryAspect( anAspect ); } + + +Standard_Boolean GEOM_AISShape::isTopLevel() { + return myTopLevel; +} + +void GEOM_AISShape::setTopLevel(Standard_Boolean f) { + myTopLevel = f; +} + +Quantity_Color GEOM_AISShape::topLevelColor() { + SUIT_Session* session = SUIT_Session::session(); + SUIT_ResourceMgr* resMgr = session->resourceMgr(); + QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) ); + return SalomeApp_Tools::color(c); +} diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx index 387b3ef37..21e1c5a7e 100644 --- a/src/OBJECT/GEOM_AISShape.hxx +++ b/src/OBJECT/GEOM_AISShape.hxx @@ -99,6 +99,8 @@ public: void setIO(const Handle(SALOME_InteractiveObject)& name) ; void setName(const Standard_CString aName) ; Standard_CString getName() ; + Standard_Boolean isTopLevel(); + void setTopLevel(Standard_Boolean); Handle_SALOME_InteractiveObject getIO() ; void highlightSubShapes(const TColStd_IndexedMapOfInteger& aIndexMap, const Standard_Boolean aHighlight ); ~GEOM_AISShape(); @@ -126,6 +128,8 @@ public: void storeBoundaryColors(); + static Quantity_Color topLevelColor(); + protected: void shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPrs, @@ -146,6 +150,7 @@ protected: private: TCollection_AsciiString myName; bool myDisplayVectors; + Standard_Boolean myTopLevel; }; diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx index 9b956bf68..bc9c5c9f1 100644 --- a/src/OBJECT/GEOM_Actor.cxx +++ b/src/OBJECT/GEOM_Actor.cxx @@ -1012,7 +1012,7 @@ void GEOM_Actor::SetIsosWidth(const int width) { } int GEOM_Actor::GetIsosWidth() const { - return myWireframeFaceActor->GetProperty()->GetLineWidth(); + return (int)myWireframeFaceActor->GetProperty()->GetLineWidth(); } void GEOM_Actor::SetWidth(const int width) { @@ -1025,7 +1025,7 @@ void GEOM_Actor::SetWidth(const int width) { } int GEOM_Actor::GetWidth() const { - return myIsolatedEdgeActor->GetProperty()->GetLineWidth(); + return (int)myIsolatedEdgeActor->GetProperty()->GetLineWidth(); } void GEOM_Actor::RestoreIsoNumbers() diff --git a/src/OBJECT/GEOM_Constants.h b/src/OBJECT/GEOM_Constants.h index 655dfc125..de4adb9c8 100644 --- a/src/OBJECT/GEOM_Constants.h +++ b/src/OBJECT/GEOM_Constants.h @@ -46,6 +46,7 @@ #define FRONT_MATERIAL_PROP "FrontMaterial" //Object front material property #define BACK_MATERIAL_PROP "BackMaterial" //Object back material property #define EDGE_WIDTH_PROP "EdgeWidth" //Width of the edge -#define ISOS_WIDTH_PROP "IsosWidth" //Width of the iso-lines +#define ISOS_WIDTH_PROP "IsosWidth" //Width of the iso-lines +#define TOP_LEVEL_PROP "TopLevelFlag" //Top level flag #endif //GEOM_CONSTANTS_H -- 2.39.2