-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include <Material_ResourceMgr.h>
#include <Material_Model.h>
+#include <Basics_OCCTVersion.hxx>
+
#include <SUIT_Desktop.h>
#include <SUIT_MessageBox.h>
#include <SUIT_ResourceMgr.h>
#include <SALOMEDS_SObject.hxx>
#include <QtxFontEdit.h>
+#include <QtxInfoPanel.h>
// External includes
#include <QDir>
}
}
-GeometryGUI::TextureMap GeometryGUI::myTextureMap;
-
GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
}
return anObj._retn();
}
+//=================================================================================
+// function : IsInGeomComponent
+// purpose : Check if an SObject is under GEOM component
+//=================================================================================
+bool GeometryGUI::IsInGeomComponent( _PTR(SObject) sobject )
+{
+ if ( sobject )
+ if ( _PTR(SComponent) aComp = sobject->GetFatherComponent() )
+ return aComp->ComponentDataType() == "GEOM";
+ return false;
+}
//=======================================================================
// function : GetStudy
if ( !myGUIMap.contains( libraryName ) ) {
// try to load library if it is not loaded yet
#if defined(WIN32)
- QString dirs = getenv( "PATH" );
+ QString dirs = Qtx::getenv( "PATH" );
#elif defined(__APPLE__)
- QString dirs = getenv( "DYLD_LIBRARY_PATH" );
+ QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
#else
- QString dirs = getenv( "LD_LIBRARY_PATH" );
+ QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
#endif
#if defined(WIN32)
QString sep = ";";
while ( it.hasPrevious() ) {
QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
if ( fi.exists() ) {
- OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
+ OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
if ( !res ) {
MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
// try to load library if it is not loaded yet
#if defined(WIN32)
- QString dirs = getenv( "PATH" );
+ QString dirs = Qtx::getenv( "PATH" );
#elif defined(__APPLE__)
- QString dirs = getenv( "DYLD_LIBRARY_PATH" );
+ QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
#else
- QString dirs = getenv( "LD_LIBRARY_PATH" );
+ QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
#endif
#if defined(WIN32)
QString sep = ";";
while ( it.hasPrevious() ) {
QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
if ( fi.exists() ) {
- OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
+ OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
if ( !res ) {
MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
- case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
- case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
+ case GEOMOp::OpMaterialMenu: // POPUP MENU - MATERIAL PROPERTIES (sub-menu)
+ case GEOMOp::OpPredefMaterial: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - <SOME MATERIAL>
+ case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - CUSTOM...
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
createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
+ createGeomAction( GEOMOp::OpMaterialMenu, "POP_MATERIAL_PROPERTIES");
+ action(GEOMOp::OpMaterialMenu)->setMenu( new QMenu() );
createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
#ifndef DISABLE_GRAPHICSVIEW
// material properties
mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
- mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
+ mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=false", QtxPopupMgr::VisibleRule );
+ mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 );
+ mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=true", QtxPopupMgr::VisibleRule );
// texture
mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
}
}
+namespace
+{
+ QString wrap(const QString& text, const QString& tag)
+ { return QString("<%1>%2</%3>").arg(tag).arg(text).arg(tag);}
+}
+
//=======================================================================
// function : GeometryGUI::activateModule()
// purpose : Called when GEOM module is activated
//=======================================================================
bool GeometryGUI::activateModule( SUIT_Study* study )
{
+ // Fill in: Help Panel
+ SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( application() );
+ app->infoPanel()->setTitle(tr("INFO_WELCOME_TO_GEOM"));
+
+ int gb = app->infoPanel()->addGroup(tr("INFO_GRP_CREATE_MODEL"));
+ QString lab;
+ QStringList items;
+ items << wrap(tr("INFO_VERTICES"), "li")
+ << wrap(tr("INFO_EDGES"), "li")
+ << wrap(tr("INFO_WIRES"), "li")
+ << wrap(tr("INFO_FACES"), "li")
+ << wrap(tr("INFO_SHELLS"), "li")
+ << wrap(tr("INFO_SOLIDS"), "li");
+ lab = tr("INFO_BOTTOM_UP_CONSTRUCTION") + ":" + wrap(items.join(""), "ul");
+ items.clear();
+
+ items << wrap(tr("INFO_BOX"), "li")
+ << wrap(tr("INFO_CYLINDER"), "li")
+ << wrap(tr("INFO_CONE"), "li")
+ << wrap("...", "li");
+ lab = lab + tr("INFO_PRIMITIVES") + ":" + wrap(items.join(""), "ul");
+ items.clear();
+
+ lab = lab + tr("INFO_BOOLEANS") + "<br/>";
+ lab = lab + tr("INFO_TRANSFORMATIONS");
+
+ app->infoPanel()->addLabel(lab, gb);
+
+ gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MODEL"));
+ items << wrap("BREP", "li")
+ << wrap("STEP", "li")
+ << wrap("IGES", "li")
+ << wrap("STL", "li")
+ << wrap("XAO", "li");
+ lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul");
+ items.clear();
+
+ app->infoPanel()->addLabel(lab, gb);
+ // << Help Panel
+
if ( CORBA::is_nil( myComponentGeom ) )
return false;
}
Py_XDECREF(pluginsmanager);
+
return true;
}
void GeometryGUI::windows( QMap<int, int>& mappa ) const
{
mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
+ mappa.insert( SalomeApp_Application::WT_InfoPanel, Qt::RightDockWidgetArea );
mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
#ifndef DISABLE_PYCONSOLE
mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
Handle(SALOME_InteractiveObject) io = selIt.Value();
if ( !io->hasEntry() ) continue;
_PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
- if ( !sobj ) continue;
+ if ( !GeometryGUI::IsInGeomComponent( sobj )) continue;
CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
if ( !gobj->_is_nil() )
Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
{
theWidth = theHeight = 0;
-
Handle(TColStd_HArray1OfByte) aTexture;
- aTexture = myTextureMap[ theId ];
- if ( aTexture.IsNull() ) {
- GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
- if ( !aInsOp->_is_nil() ) {
- CORBA::Long aWidth, aHeight;
- SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
- if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
- theWidth = aWidth;
- theHeight = aHeight;
-
- aTexture = new TColStd_HArray1OfByte (1, aStream->length());
-
- for ( CORBA::ULong i = 0; i < aStream->length(); i++)
- aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
- myTextureMap[ theId ] = aTexture;
- }
+ GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
+ if ( !aInsOp->_is_nil() ) {
+ CORBA::Long aWidth, aHeight;
+ SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
+ if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
+ theWidth = aWidth;
+ theHeight = aHeight;
+
+ aTexture = new TColStd_HArray1OfByte (1, aStream->length());
+
+ for ( CORBA::ULong i = 0; i < aStream->length(); i++)
+ aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
}
}
return aTexture;
SALOME_ListIO lst;
getApp()->selectionMgr()->selectedObjects( lst );
- //Add submenu for predefined materials
- bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
+ // Update submenu for predefined materials
if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
- QtxPopupMgr* mgr = popupMgr();
- //get parrent for submenu
- QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
- //Clear old menu
- QMenu* oldMenu = act->menu() ;
- if( oldMenu ) {
- delete oldMenu;
- }
- if( isPredefMat ){
- QMenu* matMenu = new QMenu();
- QSignalMapper* signalMapper = new QSignalMapper( matMenu );
-
- //Get current material model for the object
- QVariant v;
- LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
- if ( anApp && anApp->activeViewManager() ) {
- LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
- if( aStudy ) {
- v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
- }
+ QMenu* matMenu = action( GEOMOp::OpMaterialMenu )->menu();
+ matMenu->clear();
+ QSignalMapper* signalMapper = new QSignalMapper( menu );
+
+ QVariant v;
+ LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
+ if ( anApp && anApp->activeViewManager() ) {
+ LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
+ if( aStudy ) {
+ v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
}
- QString curModel = "";
- if ( v.canConvert<QString>() ) curModel = v.toString();
- // get list of all predefined materials
- QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
- bool found = false;
- foreach ( QString material, materials )
- {
- QAction* menAct = matMenu->addAction( material );
- connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
- signalMapper->setMapping( menAct, material );
- menAct->setCheckable( true );
- // Set checked if this material is current
- Material_Model aModel;
- aModel.fromResources( material );
- if ( !found && aModel.toProperties() == curModel ) {
- menAct->setChecked( true );
- found = true;
- }
+ }
+ QString curModel = "";
+ if ( v.canConvert<QString>() ) curModel = v.toString();
+
+ // get list of all predefined materials
+ QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
+ bool found = false;
+ foreach ( QString material, materials )
+ {
+ QAction* a = matMenu->addAction( material );
+ connect( a, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
+ signalMapper->setMapping( a, material );
+ a->setCheckable( true );
+
+ Material_Model aModel;
+ aModel.fromResources( material );
+ if ( !found && aModel.toProperties() == curModel ) {
+ a->setChecked( true );
+ found = true;
}
- matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
- matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
- connect( signalMapper, SIGNAL( mapped( const QString & ) ),
- this, SLOT( OnSetMaterial( const QString & ) ) );
- act->setMenu( matMenu );
}
+ matMenu->addSeparator();
+ matMenu->addAction( action( GEOMOp::OpPredefMaterCustom ) );
+ connect( signalMapper, SIGNAL( mapped( const QString & ) ),
+ this, SLOT( OnSetMaterial( const QString & ) ) );
}
//Set name
if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
// add enginier font into combobox
/*int fontID =*/ QFontDatabase::addApplicationFont( aFontFile );
- Handle(Font_SystemFont) sf = new Font_SystemFont(
- new TCollection_HAsciiString("Y14.5M-2009"),
- Font_FA_Regular,
- new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
+ Handle(Font_SystemFont) sf = new Font_SystemFont( TCollection_AsciiString("Y14.5M-2009") );
+ sf->SetFontPath( Font_FA_Regular,
+ TCollection_AsciiString( aFontFile.toLatin1().data() ) );
// register font in OCC font manager
fmgr->RegisterFont( sf, Standard_False );
const PropMap& aProps = o_it.value();
//Check that object exists in the study
- _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
+ _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
if ( !obj || !(aProps.count() > 0))
continue;
// entry is "encoded" = it does NOT contain component address, since it is a
// subject to change on next component loading
- std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
+ std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
_PTR(GenericAttribute) anAttr;
if (!obj->FindAttribute(anAttr, "AttributeIOR"))
if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
- o_it.key().toLatin1().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
+ o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
if (!anAnnotationInfo.empty()) {
param = occParam + "ShapeAnnotationVisibleItems";
ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
{
- std::string aStudyEntry = (*aEntryIt).toLatin1().data();
+ std::string aStudyEntry = (*aEntryIt).toUtf8().data();
std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
// store dimension parameters
GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
if ( aDimensions.GetNumber() != 0 ) {
- ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
+ ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
}
_PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
if ( !aShapeAnnAttr.IsNull() ) {
- ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toLatin1().data() );
+ ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
}
}
}
// Check that the entry corresponds to a real object in the Study
// as the object may be deleted or modified after the visual state is saved.
- _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
+ _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
if (!so) continue; //Skip the not existent entry
std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
{
GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
- aDimensionProp.SaveToAttribute( entry.toLatin1().data() );
+ aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
}
else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
{
return result;
}
- _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
+ _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
_PTR(GenericAttribute) anAttr;
if ( obj ) {
if ( obj->FindAttribute(anAttr, "AttributeName") ) {
_PTR(AttributeName) aName (anAttr);
- aName->SetValue( name.toLatin1().data() ); // rename the SObject
+ aName->SetValue( name.toUtf8().data() ); // rename the SObject
GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
if (!CORBA::is_nil(anObj)) {
- anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
+ anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
emit SignalTextTreeRenameObject( entry );
}