1 // GEOM GEOMGUI : GUI for Geometry component
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : EntityGUI.cxx
25 // Author : Damien COQUERET
30 #include "EntityGUI.h"
32 #include "QAD_RightFrame.h"
33 #include "OCCViewer_Viewer3d.h"
34 #include "VTKViewer_ViewFrame.h"
35 #include "GEOM_AssemblyBuilder.h"
36 #include "SALOMEGUI_ImportOperation.h"
37 #include "SALOMEGUI_QtCatchCorbaException.hxx"
39 #include <BRepTools_WireExplorer.hxx>
40 #include <TopoDS_Wire.hxx>
41 #include <TopoDS_Compound.hxx>
42 #include <BRep_Tool.hxx>
43 #include <BRep_Builder.hxx>
45 #include <TopExp_Explorer.hxx>
46 #include <Geom_Circle.hxx>
47 #include <Precision.hxx>
49 #include "DisplayGUI.h"
50 #include "EntityGUI_SubShapeDlg.h" // Method SUBSHAPE
52 //=======================================================================
53 // function : EntityGUI()
54 // purpose : Constructor
55 //=======================================================================
56 EntityGUI::EntityGUI() :
59 myGeomBase = new GEOMBase();
60 myGeomGUI = GEOMContext::GetGeomGUI();
61 myGeom = myGeomGUI->myComponentGeom;
65 //=======================================================================
66 // function : ~EntityGUI()
67 // purpose : Destructor
68 //=======================================================================
69 EntityGUI::~EntityGUI()
74 //=======================================================================
75 // function : OnGUIEvent()
77 //=======================================================================
78 bool EntityGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
80 EntityGUI* myEntityGUI = new EntityGUI();
81 myEntityGUI->myGeomGUI->EmitSignalDeactivateDialog();
82 SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
84 QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
90 ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->onViewTop(); // DCQ : 28/02/2002
92 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
94 myEntityGUI->myGeomGUI->GetSketcher() = Sketch(v3d->getViewer3d());
95 myEntityGUI->myGeomGUI->myState = 2;
97 Mb->setItemChecked(4052, false);
98 Mb->setItemChecked(4053, false);
100 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(LENGTH_PARAMETER, Mb->isItemChecked(4061));
101 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(ANGLE_PARAMETER, Mb->isItemChecked(4062));
102 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(RADIUS_PARAMETER, Mb->isItemChecked(4063));
103 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(XVALUE_PARAMETER, Mb->isItemChecked(4064));
104 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(YVALUE_PARAMETER, Mb->isItemChecked(4065));
106 myEntityGUI->myGeomGUI->GetSketcher().SetTransitionStatus(NOCONSTRAINT);
109 case 4041: // SKETCH Segment
111 myEntityGUI->myGeomGUI->GetSketcher().ChangeMode(SEGMENT);
114 case 4042: // SKETCH Arc
116 myEntityGUI->myGeomGUI->GetSketcher().ChangeMode(ARC_CHORD);
119 case 4043: // SKETCH Set Angle
121 myEntityGUI->OnSketchSetAngle();
124 case 4044: // SKETCH Set X
126 myEntityGUI->OnSketchSetx();
129 case 4045: // SKETCH Set Y
131 myEntityGUI->OnSketchSety();
134 case 4046: // SKETCH Delete
136 myEntityGUI->OnSketchDelete();
139 case 4047: // SKETCH End
141 myEntityGUI->OnSketchEnd();
144 case 4048: // SKETCH Close
146 myEntityGUI->OnSketchClose();
149 case 4051: // sketcher Set Plane
154 case 4052: // sketcher TANGENT
156 Mb->setItemChecked(theCommandID, !Mb->isItemChecked(theCommandID));
157 if(Mb->isItemChecked(theCommandID) == true)
158 myEntityGUI->myGeomGUI->GetSketcher().SetTransitionStatus(TANGENT);
160 myEntityGUI->myGeomGUI->GetSketcher().SetTransitionStatus(NOCONSTRAINT);
162 Mb->setItemChecked(4053, false);
165 case 4053: // sketcher PERPENDICULAR
167 Mb->setItemChecked(theCommandID, !Mb->isItemChecked(theCommandID));
168 if(Mb->isItemChecked(theCommandID) == true)
169 myEntityGUI->myGeomGUI->GetSketcher().SetTransitionStatus(PERPENDICULAR);
171 myEntityGUI->myGeomGUI->GetSketcher().SetTransitionStatus(NOCONSTRAINT);
173 Mb->setItemChecked(4052, false);
176 case 4061: // SKETCH OptionsOnofflengthdimension
178 Mb->setItemChecked(theCommandID, !Mb->isItemChecked(theCommandID));
179 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(LENGTH_PARAMETER, Mb->isItemChecked(theCommandID));
182 case 4062: // SKETCH OptionsOnoffangledimension
184 Mb->setItemChecked(theCommandID, !Mb->isItemChecked(theCommandID));
185 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(ANGLE_PARAMETER, Mb->isItemChecked(theCommandID));
188 case 4063: // SKETCH OptionsOnoffradiusdimension
190 Mb->setItemChecked(theCommandID, !Mb->isItemChecked(theCommandID));
191 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(RADIUS_PARAMETER, Mb->isItemChecked(theCommandID));
194 case 4064: // SKETCH OptionsOnoffxdimension
196 Mb->setItemChecked(theCommandID, !Mb->isItemChecked(theCommandID));
197 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(XVALUE_PARAMETER, Mb->isItemChecked(theCommandID));
200 case 4065: // SKETCH OptionsOnoffydimension
202 Mb->setItemChecked(theCommandID, !Mb->isItemChecked(theCommandID));
203 myEntityGUI->myGeomGUI->GetSketcher().SetParameterVisibility(YVALUE_PARAMETER, Mb->isItemChecked(theCommandID));
206 case 407: // EXPLODE : use ic
208 Handle(AIS_InteractiveContext) ic;
209 if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
210 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
211 ic = v3d->getAISContext();
213 EntityGUI_SubShapeDlg *aDlg = new EntityGUI_SubShapeDlg(parent, "", myEntityGUI, Sel, ic);
218 parent->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
226 //=======================================================================
227 // function : OnSketchSetAngle()
229 //=======================================================================
230 void EntityGUI::OnSketchSetAngle()
232 Standard_Real anAngle = myGeomGUI->GetSketcher().GetSegmentAngle()/PI180;
233 Sketch::fitInResol(anAngle);
234 Standard_Boolean res = false;
235 QString Value = QString("%1").arg(anAngle);
236 anAngle = myGeomBase->Parameter(res, Value, tr("GEOM_MEN_ANGLE"), tr("GEOM_MEN_ENTER_ANGLE"),
237 -180.0, +180.0, 6) * PI180;
240 myGeomGUI->GetSketcher().SetSegmentAngle(anAngle);
241 QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
242 Mb->setItemChecked(4052, false);
243 Mb->setItemChecked(4053, false);
249 //=======================================================================
250 // function : OnSketchSetx()
252 //=======================================================================
253 void EntityGUI::OnSketchSetx()
255 Standard_Boolean res = false;
256 double X = myGeomBase->Parameter(res, "0.", tr("GEOM_MEN_X"), tr("GEOM_MEN_SKETCHER_X"),
257 2.0 * Precision::Confusion(), 1E6, 6);
259 myGeomGUI->GetSketcher().SetXDimension(X);
260 QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
261 Mb->setItemChecked(4052, false);
262 Mb->setItemChecked(4053, false);
267 //=======================================================================
268 // function : OnSketchSety()
270 //=======================================================================
271 void EntityGUI::OnSketchSety()
273 Standard_Boolean res = false;
274 double Y = myGeomBase->Parameter(res, "0.", tr("GEOM_MEN_Y"), tr("GEOM_MEN_SKETCHER_Y"), 2.0 * Precision::Confusion(), 1E6, 6);
276 myGeomGUI->GetSketcher().SetYDimension(Y);
277 QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
278 Mb->setItemChecked(4052, false);
279 Mb->setItemChecked(4053, false);
284 //=======================================================================
285 // function : OnSketchDelete()
287 //=======================================================================
288 void EntityGUI::OnSketchDelete()
290 if(myGeomGUI->GetSketcher().GetmyEdgesNumber() == 1) {
291 QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
292 Mb->setItemEnabled(405, false); // SKETCH CONTRAINTS
293 myGeomGUI->GetSketcher().SetTransitionStatus(NOCONSTRAINT);
296 if(myGeomGUI->GetSketcher().Delete())
297 myGeomGUI->myState = -1;
302 //=======================================================================
303 // function : OnSketchClose()
305 //=======================================================================
306 void EntityGUI::OnSketchClose()
308 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
309 Handle(AIS_InteractiveContext) myContext = v3d->getAISContext();
311 TopoDS_Wire W = myGeomGUI->GetSketcher().Close();
313 GEOM::GEOM_Gen::ListOfIOR_var listShapes = new GEOM::GEOM_Gen::ListOfIOR;
314 listShapes->length(0);
317 BRepTools_WireExplorer Ex(W);
319 TopoDS_Edge E = Ex.Current();
322 pt1 = BRep_Tool::Pnt(TopExp::FirstVertex(E));
323 pt2 = BRep_Tool::Pnt(TopExp::LastVertex(E));
326 Handle(Geom_Curve) Curve;
327 Handle(Geom_Circle) Circle;
329 Standard_Real First,Last;
331 Curve = BRep_Tool::Curve(E,First,Last);
332 if(Curve->IsKind(STANDARD_TYPE(Geom_Circle))) {
333 Circle = Handle(Geom_Circle)::DownCast(Curve); // pointer on geom_circ
334 Circ = Circle->Circ(); // gp_Circ
336 Curve->D0((First + Last) / 2., CenterPoint);
338 GEOM::PointStruct pI = myGeom->MakePointStruct(pt1.X(), pt1.Y(), pt1.Z());
339 GEOM::PointStruct pC = myGeom->MakePointStruct(CenterPoint.X(), CenterPoint.Y(), CenterPoint.Z());
340 GEOM::PointStruct pE = myGeom->MakePointStruct(pt2.X(), pt2.Y(), pt2.Z());
342 GEOM::GEOM_Shape_var arc;
345 arc = myGeom->MakeArc(pI, pC, pE);
347 catch (const SALOME::SALOME_Exception& S_ex) {
348 QtCatchCorbaException(S_ex);
351 listShapes->length(i+1);
352 listShapes[i] = strdup(arc->Name());
356 GEOM::PointStruct pI = myGeom->MakePointStruct(pt1.X(), pt1.Y(), pt1.Z());
357 GEOM::PointStruct pE = myGeom->MakePointStruct(pt2.X(), pt2.Y(), pt2.Z());
358 GEOM::GEOM_Shape_var segment;
361 segment = myGeom->MakeEdge(pI,pE);
363 catch (const SALOME::SALOME_Exception& S_ex) {
364 QtCatchCorbaException(S_ex);
367 listShapes->length(i+1);
368 listShapes[i] = strdup(segment->Name());
373 GEOM::GEOM_Shape_var Wire = myGeom->MakeWire(listShapes);
374 TopoDS_Shape S = myGeomGUI->GetShapeReader().GetShape(myGeom, Wire);
375 Standard_CString type;
376 myGeomBase->GetShapeTypeString(S,type);
377 Wire->NameType(type);
379 if(myGeomBase->Display(Wire))
380 QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
382 myGeomGUI->myState = -1;
383 QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
384 Mb->setItemEnabled(405, false); // SKETCH CONTRAINTS
385 myGeomGUI->GetSketcher().SetTransitionStatus(NOCONSTRAINT);
390 //=======================================================================
391 // function : OnSketchEnd()
393 //=======================================================================
394 void EntityGUI::OnSketchEnd()
396 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
397 Handle (AIS_InteractiveContext) myContext = v3d->getAISContext();
399 TopoDS_Wire W = myGeomGUI->GetSketcher().End();
401 GEOM::GEOM_Gen::ListOfIOR_var listShapes = new GEOM::GEOM_Gen::ListOfIOR;
402 listShapes->length(0);
405 BRepTools_WireExplorer Ex(W);
407 TopoDS_Edge E = TopoDS::Edge(Ex.Current());
410 pt1 = BRep_Tool::Pnt(TopExp::FirstVertex(E));
411 pt2 = BRep_Tool::Pnt(TopExp::LastVertex(E));
414 Handle(Geom_Curve) Curve;
415 Handle(Geom_Circle) Circle;
417 Standard_Real First,Last;
419 Curve = BRep_Tool::Curve(E,First,Last);
420 if(Curve->IsKind(STANDARD_TYPE(Geom_Circle))) {
421 Circle = Handle(Geom_Circle)::DownCast(Curve); // pointer on geom_circ
422 Circ = Circle->Circ(); // gp_Circ
424 Curve->D0((First + Last) / 2., CenterPoint);
426 GEOM::PointStruct pI = myGeom->MakePointStruct(pt1.X(), pt1.Y(), pt1.Z());
427 GEOM::PointStruct pC = myGeom->MakePointStruct(CenterPoint.X(), CenterPoint.Y(), CenterPoint.Z());
428 GEOM::PointStruct pE = myGeom->MakePointStruct(pt2.X(), pt2.Y(), pt2.Z());
430 GEOM::GEOM_Shape_var arc;
433 arc = myGeom->MakeArc(pI, pC, pE);
435 catch (const SALOME::SALOME_Exception& S_ex) {
436 QtCatchCorbaException(S_ex);
439 listShapes->length(i+1);
440 listShapes[i] = strdup(arc->Name());
443 GEOM::PointStruct pI = myGeom->MakePointStruct(pt1.X(), pt1.Y(), pt1.Z());
444 GEOM::PointStruct pE = myGeom->MakePointStruct(pt2.X(), pt2.Y(), pt2.Z());
445 GEOM::GEOM_Shape_var segment;
448 segment = myGeom->MakeEdge(pI,pE);
450 catch (const SALOME::SALOME_Exception& S_ex) {
451 QtCatchCorbaException(S_ex);
454 listShapes->length(i+1);
455 listShapes[i] = strdup(segment->Name());
461 GEOM::GEOM_Shape_var Wire = myGeom->MakeWire(listShapes);
462 TopoDS_Shape S = myGeomGUI->GetShapeReader().GetShape(myGeom, Wire);
463 Standard_CString type;
464 myGeomBase->GetShapeTypeString(S,type);
465 Wire->NameType(type);
467 if(myGeomBase->Display(Wire))
468 QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_DONE"));
470 myGeomGUI->myState = -1;
471 QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
472 Mb->setItemEnabled(405, false); // SKETCH CONTRAINTS
473 myGeomGUI->GetSketcher().SetTransitionStatus(NOCONSTRAINT);
478 //=====================================================================================
479 // function : SObjectExist()
481 //=====================================================================================
482 bool EntityGUI::SObjectExist(SALOMEDS::SObject_ptr theFatherObject, const char* IOR)
484 SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
485 SALOMEDS::ChildIterator_var it = aStudy->NewChildIterator(theFatherObject);
486 SALOMEDS::SObject_var RefSO;
487 SALOMEDS::GenericAttribute_var anAttr;
488 SALOMEDS::AttributeIOR_var anIOR;
489 for(; it->More();it->Next()) {
490 SALOMEDS::SObject_var SO= it->Value();
491 if(SO->FindAttribute(anAttr, "AttributeIOR")) {
492 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
493 if(strcmp( anIOR->Value(), IOR ) == 0)
496 if(SO->ReferencedObject(RefSO)) {
497 if(RefSO->FindAttribute(anAttr, "AttributeIOR")) {
498 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
499 if(strcmp(anIOR->Value(), IOR) == 0)
508 //=====================================================================================
509 // function : OnSubShapeGetAll()
510 // purpose : Explode a shape in all sub shapes with a SubShapeType
511 //=====================================================================================
512 bool EntityGUI::OnSubShapeGetAll(const TopoDS_Shape& ShapeTopo, const char* ShapeTopoIOR, const int SubShapeType)
514 SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
515 SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR(ShapeTopoIOR);
516 if(theObj->_is_nil()) {
517 QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_SHAPE_IN_STUDY"));
521 SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
522 SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->entry());
523 SALOMEDS::GenericAttribute_var anAttr;
524 SALOMEDS::AttributeName_var aName;
525 SALOMEDS::AttributeIOR_var anIOR;
526 SALOMEDS::AttributePixMap_var aPixmap;
528 /* We create a sub object for each sub shape as attribute of the main object */
529 /* Each sub object contains list (length=1) containing its index in the main shape */
530 GEOM::GEOM_Shape_var aShape = myGeom->GetIORFromString(ShapeTopoIOR);
531 GEOM::GEOM_Gen::ListOfGeomShapes_var listGeomShapes = new GEOM::GEOM_Gen::ListOfGeomShapes;
532 GEOM::GEOM_Shape_var aResult;
535 listGeomShapes = myGeom->SubShapeAll(aShape, SubShapeType);
536 if(listGeomShapes->length() < 1) {
537 QAD_Application::getDesktop()->putInfo (tr("GEOM_PRP_ABORT"));
541 catch(const SALOME::SALOME_Exception& S_ex) {
542 QtCatchCorbaException(S_ex);
545 /* open transaction */
546 QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
549 TopoDS_Shape mainTopo = myGeomGUI->GetShapeReader().GetShape(myGeom, aShape);
550 TopoDS_Shape mainShape;
553 if(aShape->IsMainShape()) {
554 mainShape = myGeomGUI->GetShapeReader().GetShape(myGeom, aShape);
558 aShape = myGeom->GetIORFromString(aShape->MainName());
561 /* Loop on each sub shape created */
562 /* int i = 1 ; /* index for the nameType */
563 for(int j=0; j<listGeomShapes->length(); j++) {
564 /* Get each sub shape extracted CORBA and OCC */
565 aResult = listGeomShapes[j] ;
566 TopoDS_Shape S = myGeomGUI->GetShapeReader().GetShape(myGeom, aResult);
569 QAD_Application::getDesktop()->putInfo (tr("GEOM_PRP_ABORT"));
573 /* Set the nameType of sub shape */
574 char* nameG = (char *)malloc(20);
575 Standard_CString Type;
576 if(myGeomBase->GetShapeTypeString(S, Type)) {
577 aResult->NameType(Type);
578 sprintf(nameG, "%s_%d", Type, myGeomBase->GetIndex(S, mainShape, SubShapeType));
581 aResult->NameType(tr("GEOM_SHAPE"));
582 sprintf(nameG, "%s_%d", tr("GEOM_SHAPE").latin1(), myGeomGUI->GetNbGeom()++);
584 SALOMEDS::SObject_var SO = aStudy->FindObjectIOR(aResult->Name());
586 bool allreadyexist = false;
588 if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
589 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
590 Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
592 Handle(GEOM_AISShape) result = new GEOM_AISShape(S, nameG);
593 Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(aResult->Name(), myGeomGUI->GetFatherior(), "GEOM");
595 MESSAGE ("SO->_is_nil() " << SO->_is_nil())
598 SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(theObj);
599 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
600 aName = SALOMEDS::AttributeName::_narrow(anAttr);
601 aName->SetValue(nameG);
602 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
603 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
604 anIOR->SetValue(aResult->Name());
606 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
607 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
608 MESSAGE(" Type " << S.ShapeType())
609 if (S.ShapeType() == TopAbs_COMPOUND)
610 aPixmap->SetPixMap("ICON_OBJBROWSER_COMPOUND");
611 else if(S.ShapeType() == TopAbs_COMPSOLID)
612 aPixmap->SetPixMap("ICON_OBJBROWSER_COMPSOLID");
613 else if(S.ShapeType() == TopAbs_SOLID)
614 aPixmap->SetPixMap("ICON_OBJBROWSER_SOLID");
615 else if(S.ShapeType() == TopAbs_SHELL)
616 aPixmap->SetPixMap("ICON_OBJBROWSER_SHELL");
617 else if(S.ShapeType() == TopAbs_FACE)
618 aPixmap->SetPixMap("ICON_OBJBROWSER_FACE");
619 else if(S.ShapeType() == TopAbs_WIRE)
620 aPixmap->SetPixMap("ICON_OBJBROWSER_WIRE");
621 else if(S.ShapeType() == TopAbs_EDGE)
622 aPixmap->SetPixMap("ICON_OBJBROWSER_EDGE");
623 else if(S.ShapeType() == TopAbs_VERTEX)
624 aPixmap->SetPixMap("ICON_OBJBROWSER_VERTEX");
626 MESSAGE(" aPixmap->GetPixMap " << aPixmap->GetPixMap())
628 SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
629 aStudyBuilder->Addreference(newObj1, newObj);
630 IO->setEntry(newObj->GetID());
632 aResult->StudyShapeId(newObj->GetID());
635 allreadyexist = true;
636 if(!this->SObjectExist(theObj, aResult->Name())) {
637 SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(theObj);
638 aStudyBuilder->Addreference(newObj1, SO);
639 IO->setEntry(SO->GetID());
640 aResult->StudyShapeId(SO->GetID());
645 result->setName(nameG);
650 else if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
651 VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
653 int themode = myRenderInter->GetDisplayMode();
654 vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
655 vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
657 Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(aResult->Name(), myGeomGUI->GetFatherior(), "GEOM");
660 SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(theObj);
661 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
662 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
663 anIOR->SetValue(aResult->Name());
664 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
665 aName = SALOMEDS::AttributeName::_narrow(anAttr);
666 aName->SetValue(nameG);
668 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
669 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
670 if(S.ShapeType() == TopAbs_COMPOUND)
671 aPixmap->SetPixMap("ICON_OBJBROWSER_COMPOUND");
672 else if(S.ShapeType() == TopAbs_COMPSOLID)
673 aPixmap->SetPixMap("ICON_OBJBROWSER_COMPSOLID");
674 else if(S.ShapeType() == TopAbs_SOLID)
675 aPixmap->SetPixMap("ICON_OBJBROWSER_SOLID");
676 else if(S.ShapeType() == TopAbs_SHELL)
677 aPixmap->SetPixMap("ICON_OBJBROWSER_SHELL");
678 else if(S.ShapeType() == TopAbs_FACE)
679 aPixmap->SetPixMap("ICON_OBJBROWSER_FACE");
680 else if(S.ShapeType() == TopAbs_WIRE)
681 aPixmap->SetPixMap("ICON_OBJBROWSER_WIRE");
682 else if(S.ShapeType() == TopAbs_EDGE)
683 aPixmap->SetPixMap("ICON_OBJBROWSER_EDGE");
684 else if(S.ShapeType() == TopAbs_VERTEX)
685 aPixmap->SetPixMap("ICON_OBJBROWSER_VERTEX");
687 SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
688 aStudyBuilder->Addreference(newObj1, newObj);
689 IO->setEntry(newObj->GetID());
692 allreadyexist = true;
693 if(!this->SObjectExist(theObj, aResult->Name())) {
694 SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(theObj);
695 aStudyBuilder->Addreference(newObj1, SO);
696 IO->setEntry(SO->GetID());
701 vtkActorCollection* theActors = GEOM_AssemblyBuilder::BuildActors(S,0,themode,Standard_True);
702 theActors->InitTraversal();
703 vtkActor* anActor = (vtkActor*)theActors->GetNextActor();
704 while(!(anActor==NULL)) {
705 GEOM_Actor* GActor = GEOM_Actor::SafeDownCast(anActor);
707 GActor->setName(nameG);
708 theRenderer->AddActor(GActor);
710 anActor = (vtkActor*)theActors->GetNextActor();
716 /* commit transaction */
719 QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser();
720 QAD_Application::getDesktop()->putInfo (tr("GEOM_PRP_READY"));
725 //=====================================================================================
726 // function : OnSubShapeGetSelected()
728 //=====================================================================================
729 bool EntityGUI::OnSubShapeGetSelected(const TopoDS_Shape& ShapeTopo, const char* ShapeTopoIOR, const int SubShapeType, Standard_Integer& aLocalContextId, bool& myUseLocalContext)
731 //* Test the type of viewer */
732 if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
735 SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
736 SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR(ShapeTopoIOR);
737 if(theObj->_is_nil()) {
738 QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_SHAPE_IN_STUDY"));
742 OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
743 Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
745 if( myUseLocalContext == false ) {
746 /* local context is from DialogBox */
747 MESSAGE("Error : No local context opened for sub shapes method" << endl ) ;
751 GEOM::GEOM_Shape_var aShape = myGeom->GetIORFromString( ShapeTopoIOR );
752 TopoDS_Shape mainTopo = myGeomGUI->GetShapeReader().GetShape(myGeom, aShape);
754 TopoDS_Shape mainShape;
757 if(aShape->IsMainShape()) {
758 mainShape = myGeomGUI->GetShapeReader().GetShape(myGeom, aShape);
762 aShape = myGeom->GetIORFromString(aShape->MainName());
765 GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
767 int nbSelected = ic->NbSelected();
768 ListOfID->length(nbSelected);
770 TopoDS_Compound compound;
771 ic->InitSelected(); /* to init again */
773 B.MakeCompound(compound);
776 /* We create a unique compound containing all the sub shapes selected by user as attribute of the main shape */
777 /* the compound is homogenous by selection */
778 while(ic->MoreSelected()) {
779 int index = myGeomBase->GetIndex(ic->SelectedShape(), mainShape, SubShapeType);
781 B.Add(compound, ic->SelectedShape());
786 /* Test if user has selected sub shapes */
787 if(ListOfID->length() < 1)
790 GEOM::GEOM_Shape_var aResult;
792 aResult = myGeom->SubShape(aShape, SubShapeType, ListOfID);
794 catch (const SALOME::SALOME_Exception& S_ex) {
795 QtCatchCorbaException(S_ex);
798 /* local context from DialogBox */
799 ic->CloseLocalContext(aLocalContextId);
800 myUseLocalContext = false ;
802 char* nameG = (char *)malloc(20);
803 Standard_CString Type;
805 Handle(GEOM_AISShape) result;
806 Handle(GEOM_InteractiveObject) IO;
808 if(nbSelected == 1) {
809 TopExp_Explorer Exp (compound, TopAbs_ShapeEnum(SubShapeType));
811 if(myGeomBase->GetShapeTypeString(Exp.Current(),Type)) {
812 aResult->NameType(Type);
813 sprintf (nameG, "%s_%d", Type, myGeomBase->GetIndex( Exp.Current(), mainTopo, SubShapeType));
816 aResult->NameType(tr("GEOM_SHAPE"));
817 sprintf (nameG, "%s_%d", tr("GEOM_SHAPE").latin1(), myGeomGUI->GetNbGeom()++);
819 result = new GEOM_AISShape(Exp.Current(), nameG);
820 IO = new GEOM_InteractiveObject(aResult->Name(), myGeomGUI->GetFatherior(), "GEOM");
824 if ( myGeomBase->GetShapeTypeString(compound,Type)) {
825 aResult->NameType(Type);
826 sprintf (nameG, "%s_%d", Type, myGeomGUI->GetNbGeom()++);
828 aResult->NameType(tr("GEOM_SHAPE"));
829 sprintf (nameG, "%s_%d", tr("GEOM_SHAPE").latin1(), myGeomGUI->GetNbGeom()++);
831 result = new GEOM_AISShape(compound, nameG);
832 IO = new GEOM_InteractiveObject(aResult->Name(), myGeomGUI->GetFatherior(), "GEOM");
835 SALOMEDS::SObject_var SO = aStudy->FindObjectIOR(aResult->Name());
837 /* open transaction */
838 QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
841 SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
842 SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->entry());
843 SALOMEDS::GenericAttribute_var anAttr;
844 SALOMEDS::AttributeName_var aName;
845 SALOMEDS::AttributeIOR_var anIOR;
846 SALOMEDS::AttributePixMap_var aPixmap;
848 bool allreadyexist = false;
851 SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(theObj);
852 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
853 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
854 anIOR->SetValue(aResult->Name());
855 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
856 aName = SALOMEDS::AttributeName::_narrow(anAttr);
857 aName->SetValue(result->getName());
859 anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
860 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
861 if(result->Shape().ShapeType() == TopAbs_COMPOUND)
862 aPixmap->SetPixMap("ICON_OBJBROWSER_COMPOUND");
863 else if(result->Shape().ShapeType() == TopAbs_COMPSOLID)
864 aPixmap->SetPixMap("ICON_OBJBROWSER_COMPSOLID");
865 else if(result->Shape().ShapeType() == TopAbs_SOLID)
866 aPixmap->SetPixMap("ICON_OBJBROWSER_SOLID");
867 else if(result->Shape().ShapeType() == TopAbs_SHELL)
868 aPixmap->SetPixMap("ICON_OBJBROWSER_SHELL");
869 else if(result->Shape().ShapeType() == TopAbs_FACE)
870 aPixmap->SetPixMap("ICON_OBJBROWSER_FACE");
871 else if(result->Shape().ShapeType() == TopAbs_WIRE)
872 aPixmap->SetPixMap("ICON_OBJBROWSER_WIRE");
873 else if(result->Shape().ShapeType() == TopAbs_EDGE)
874 aPixmap->SetPixMap("ICON_OBJBROWSER_EDGE");
875 else if(result->Shape().ShapeType() == TopAbs_VERTEX)
876 aPixmap->SetPixMap("ICON_OBJBROWSER_VERTEX");
878 SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
879 aStudyBuilder->Addreference(newObj1, newObj);
881 IO->setEntry(newObj->GetID());
882 aResult->StudyShapeId(newObj->GetID());
885 allreadyexist = true;
886 if(!this->SObjectExist(theObj, aResult->Name())) {
887 SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(theObj);
888 aStudyBuilder->Addreference(newObj1, SO);
890 IO->setEntry(SO->GetID());
891 aResult->StudyShapeId(SO->GetID());
895 /* commit transaction */
899 result->setName(nameG);
904 DisplayGUI* myDisplayGUI = new DisplayGUI();
905 myDisplayGUI->OnDisplayAll(true);
907 QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser();
908 QAD_Application::getDesktop()->putInfo (tr("GEOM_PRP_READY"));
913 //=====================================================================================
915 //=====================================================================================
918 bool OnGUIEvent(int theCommandID, QAD_Desktop* parent)
919 {return EntityGUI::OnGUIEvent(theCommandID, parent);}