diff --git a/src/GEOMGUI/CMakeLists.txt b/src/GEOMGUI/CMakeLists.txt
index b4005537f..c5dc25f8a 100755
--- a/src/GEOMGUI/CMakeLists.txt
+++ b/src/GEOMGUI/CMakeLists.txt
@@ -87,11 +87,27 @@ SET(_moc_HEADERS
GeometryGUI.h
)
+# --- resources ---
+
+# resource files / to be processed by rcc
+SET(_rcc_RESOURCES GEOMGUI.qrc)
+
+# resource files / to be processed by lrelease
+SET(_ts_RESOURCES
+ GEOM_images.ts
+ GEOM_msg_en.ts
+ GEOM_msg_fr.ts
+ GEOM_msg_ja.ts
+)
+
# --- sources ---
# sources / moc wrappings
QT4_WRAP_CPP(_moc_SOURCES ${_moc_HEADERS})
+# sources / rcc wrappings
+QT4_ADD_RESOURCES(_rcc_SOURCES ${_rcc_RESOURCES})
+
SET(GEOMGUI_SOURCES
GeometryGUI.cxx
GEOMGUI.cxx
@@ -103,18 +119,9 @@ SET(GEOMGUI_SOURCES
GEOMGUI_CreationInfoWdg.cxx
GEOMGUI_DimensionProperty.cxx
${_moc_SOURCES}
+ ${_rcc_SOURCES}
)
-# --- resources ---
-
-# resource files / to be processed by lrelease
-SET(GEOMGUI_RESOURCES
- GEOM_images.ts
- GEOM_msg_en.ts
- GEOM_msg_fr.ts
- GEOM_msg_ja.ts
-)
-
# --- rules ---
ADD_LIBRARY(GEOM ${GEOMGUI_SOURCES})
@@ -122,4 +129,4 @@ TARGET_LINK_LIBRARIES(GEOM ${_link_LIBRARIES})
INSTALL(TARGETS GEOM EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
INSTALL(FILES ${GEOMGUI_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
-QT4_INSTALL_TS_RESOURCES("${GEOMGUI_RESOURCES}" "${SALOME_GEOM_INSTALL_RES_DATA}")
+QT4_INSTALL_TS_RESOURCES("${_ts_RESOURCES}" "${SALOME_GEOM_INSTALL_RES_DATA}")
diff --git a/src/GEOMGUI/GEOMGUI.qrc b/src/GEOMGUI/GEOMGUI.qrc
new file mode 100644
index 000000000..43311c3ae
--- /dev/null
+++ b/src/GEOMGUI/GEOMGUI.qrc
@@ -0,0 +1,5 @@
+
+
+ images/default_texture.png
+
+
diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx
index 16131193c..098436963 100644
--- a/src/GEOMGUI/GEOM_Displayer.cxx
+++ b/src/GEOMGUI/GEOM_Displayer.cxx
@@ -158,6 +158,50 @@ namespace
return aMap;
}
+ //===========================================================================
+ // Function : imageToPixmap
+ // Purpose : Concert QImage to OCCT pixmap
+ //===========================================================================
+ static inline Handle(Image_PixMap) imageToPixmap( const QImage& anImage )
+ {
+ Handle(Image_PixMap) aPixmap = new Image_PixMap();
+ if ( !anImage.isNull() ) {
+ aPixmap->InitTrash( Image_PixMap::ImgBGRA, anImage.width(), anImage.height() );
+ aPixmap->SetTopDown( Standard_True );
+
+ const uchar* aImageBytes = anImage.bits();
+
+ for ( int aLine = anImage.height() - 1; aLine >= 0; --aLine ) {
+ Image_ColorBGRA* aPixmapBytes = aPixmap->EditData().ChangeRow(aLine);
+
+ // convert pixels from ARGB to renderer-compatible RGBA
+ for ( int aByte = 0; aByte < anImage.width(); ++aByte ) {
+ aPixmapBytes->b() = (Standard_Byte) *aImageBytes++;
+ aPixmapBytes->g() = (Standard_Byte) *aImageBytes++;
+ aPixmapBytes->r() = (Standard_Byte) *aImageBytes++;
+ aPixmapBytes->a() = (Standard_Byte) *aImageBytes++;
+ aPixmapBytes++;
+ }
+ }
+ }
+ return aPixmap;
+ }
+
+ //===========================================================================
+ // Function : getDefaultTexture
+ // Purpose : Get default texture
+ //===========================================================================
+ static inline Handle(Image_PixMap) getDefaultTexture()
+ {
+ static Handle(Image_PixMap) aPixmap;
+ if ( aPixmap.IsNull() ) {
+ QPixmap px(":images/default_texture.png");
+ if ( !px.isNull() )
+ aPixmap = imageToPixmap( px.toImage() );
+ }
+ return aPixmap;
+ }
+
//===========================================================================
// Function : cacheTextureFor
// Purpose : Load and cache image for the specified presentation.
@@ -187,24 +231,7 @@ namespace
if ( anImage.isNull() )
return NULL;
- aPixmap = new Image_PixMap();
- aPixmap->InitTrash( Image_PixMap::ImgBGRA, anImage.width(), anImage.height() );
- aPixmap->SetTopDown( Standard_True );
-
- const uchar* aImageBytes = anImage.bits();
-
- for ( int aLine = anImage.height() - 1; aLine >= 0; --aLine ) {
- Image_ColorBGRA* aPixmapBytes = aPixmap->EditData().ChangeRow(aLine);
-
- // convert pixels from ARGB to renderer-compatible RGBA
- for ( int aByte = 0; aByte < anImage.width(); ++aByte ) {
- aPixmapBytes->b() = (Standard_Byte) *aImageBytes++;
- aPixmapBytes->g() = (Standard_Byte) *aImageBytes++;
- aPixmapBytes->r() = (Standard_Byte) *aImageBytes++;
- aPixmapBytes->a() = (Standard_Byte) *aImageBytes++;
- aPixmapBytes++;
- }
- }
+ aPixmap = imageToPixmap( anImage );
aPixmapCacheMap.insert( thePath, aPixmap );
@@ -866,7 +893,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
study->setObjectProperty( aMgrId, entry, GEOM::propertyName( GEOM::Texture ), QString( GetTexture().c_str() ) );
study->setObjectProperty( aMgrId, entry, GEOM::propertyName( GEOM::DisplayMode ), 3 );
- // Update porpeties map
+ // Update propeties map
propMap = getObjectProperties( study, entry, myViewFrame );
}
}
@@ -875,26 +902,29 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
aImagePath = propMap.value( GEOM::propertyName( GEOM::Texture ) ).toString();
}
- if ( !aImagePath.isEmpty() ) {
#if OCC_VERSION_LARGE > 0x06070000
- Handle(Image_PixMap) aPixmap = cacheTextureFor( aImagePath, AISShape );
+ Handle(Image_PixMap) aPixmap;
+ if ( !aImagePath.isEmpty() )
+ aPixmap = cacheTextureFor( aImagePath, AISShape );
+ else
+ aPixmap = getDefaultTexture();
- // apply image to shape
- if ( !aPixmap.IsNull() ) {
- AISShape->SetTexturePixMap( aPixmap );
- AISShape->SetTextureMapOn();
- AISShape->DisableTextureModulate();
- }
- else
- AISShape->SetTextureMapOff();
+ // apply image to shape
+ if ( !aPixmap.IsNull() ) {
+ AISShape->SetTexturePixMap( aPixmap );
+ AISShape->SetTextureMapOn();
+ AISShape->DisableTextureModulate();
+ }
+ else {
+ AISShape->SetTextureMapOff();
+ }
#else
+ if ( !aImagePath.isEmpty() ) {
AISShape->SetTextureFileName( TCollection_AsciiString( aImagePath.toUtf8().constData() ) );
AISShape->SetTextureMapOn();
AISShape->DisableTextureModulate();
-#endif
}
- else
- AISShape->SetTextureMapOff();
+#endif
// set line width
AISShape->SetWidth( HasWidth() ?
diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx
index 8327f4869..fab29f562 100644
--- a/src/GEOMGUI/GeometryGUI.cxx
+++ b/src/GEOMGUI/GeometryGUI.cxx
@@ -224,6 +224,8 @@ GeometryGUI::GeometryGUI() :
myCreationInfoWdg = 0;
connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
+
+ Q_INIT_RESOURCE( GEOMGUI );
}
//=======================================================================
@@ -2488,11 +2490,13 @@ void GeometryGUI::createPreferences()
aModesList.append( tr("MEN_WIREFRAME") );
aModesList.append( tr("MEN_SHADING") );
aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
+ aModesList.append( tr("MEN_TEXTURE") );
QList anIndexesList;
anIndexesList.append(0);
anIndexesList.append(1);
anIndexesList.append(2);
+ anIndexesList.append(3);
setPreferenceProperty( dispmode, "strings", aModesList );
setPreferenceProperty( dispmode, "indexes", anIndexesList );
diff --git a/src/GEOMGUI/images/default_texture.png b/src/GEOMGUI/images/default_texture.png
new file mode 100755
index 000000000..b1caf0466
Binary files /dev/null and b/src/GEOMGUI/images/default_texture.png differ