mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-02-05 03:14:17 +05:00
rnc :
first try to properly manage textures - SALOME_AISShape inherits now from AIS_TexturedShape instead of AIS_Shape - a bug remains that prevents the proper display of the textures
This commit is contained in:
parent
80fcb4b456
commit
1aff347400
@ -65,10 +65,13 @@
|
||||
|
||||
#include <Precision.hxx>
|
||||
|
||||
#include <set>
|
||||
#include <utility>
|
||||
|
||||
// Constructors
|
||||
enum{
|
||||
CORNERS,
|
||||
CONTOURS,
|
||||
CORNERS
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -117,8 +120,8 @@ EntityGUI_FeatureDetectorDlg::EntityGUI_FeatureDetectorDlg( GeometryGUI* theGeom
|
||||
/***************************************************************/
|
||||
|
||||
mainFrame()->GroupConstructors->setTitle(tr("GEOM_FEATURES"));
|
||||
mainFrame()->RadioButton1->setText(tr("GEOM_CORNERS"));
|
||||
mainFrame()->RadioButton2->setText(tr("GEOM_CONTOURS"));
|
||||
mainFrame()->RadioButton1->setText(tr("GEOM_CONTOURS"));
|
||||
mainFrame()->RadioButton2->setText(tr("GEOM_CORNERS"));
|
||||
// mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
|
||||
// mainFrame()->RadioButton2->close();
|
||||
// mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
|
||||
@ -140,7 +143,7 @@ EntityGUI_FeatureDetectorDlg::EntityGUI_FeatureDetectorDlg( GeometryGUI* theGeom
|
||||
myPushButton->setIcon(image0);
|
||||
myPushButton->setCheckable(true);
|
||||
|
||||
mySnapshotLabel = new QLabel(tr("GEOM_DETECT_ZONE"), mySelectionGroup);
|
||||
mySnapshotLabel = new QLabel(mySelectionGroup);
|
||||
mySelectGrpLayout->addWidget(mySnapshotLabel, 0);
|
||||
mySelectGrpLayout->addWidget(myPushButton, 0);
|
||||
mySelectGrpLayout->addStretch(1);
|
||||
@ -268,7 +271,7 @@ void EntityGUI_FeatureDetectorDlg::Init()
|
||||
myY2->setEnabled(false);
|
||||
myZ2->setEnabled(false);
|
||||
|
||||
initName(tr("GEOM_CORNERS"));
|
||||
initName(tr("GEOM_CONTOURS"));
|
||||
resize(100,100);
|
||||
|
||||
myViewGroup->RadioButton1->setChecked(true);
|
||||
@ -285,6 +288,8 @@ void EntityGUI_FeatureDetectorDlg::Init()
|
||||
myGeomGUI->SetWorkingPlane( aGlobalCS );
|
||||
myGeomGUI->ActiveWorkingPlane();
|
||||
|
||||
ConstructorsClicked(myConstructorId);
|
||||
|
||||
// SUIT_ViewWindow* theViewWindow = getDesktop()->activeWindow();
|
||||
// OCCViewer_Viewer* anOCCViewer = ( (OCCViewer_ViewManager*)( theViewWindow->getViewManager() ) )->getOCCViewer();
|
||||
// OCCViewer_ViewPort3d* vp = ((OCCViewer_ViewWindow*)theViewWindow)->getViewPort();
|
||||
@ -516,10 +521,12 @@ void EntityGUI_FeatureDetectorDlg::setEndPnt(const QPoint& theEndPnt)
|
||||
//=================================================================================
|
||||
GEOM::GEOM_IOperations_ptr EntityGUI_FeatureDetectorDlg::createOperation()
|
||||
{
|
||||
// if (myConstructorId == CORNERS)
|
||||
return myGeomGUI->GetGeomGen()->GetIShapesOperations( getStudyId() );
|
||||
// else
|
||||
// return myGeomGUI->GetGeomGen()->GetICurvesOperations( getStudyId() );
|
||||
GEOM::GEOM_IOperations_ptr anOp;
|
||||
if (myConstructorId == CORNERS || myConstructorId == CONTOURS)
|
||||
anOp=myGeomGUI->GetGeomGen()->GetIShapesOperations( getStudyId() );
|
||||
else
|
||||
anOp=myGeomGUI->GetGeomGen()->GetIBlocksOperations( getStudyId() );
|
||||
return anOp;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
@ -665,8 +672,9 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
||||
GEOM::ListOfGO_var geomContourPnts = new GEOM::ListOfGO();
|
||||
geomContourPnts->length( contour.size() );
|
||||
|
||||
std::cout<<"repere1"<<std::endl;
|
||||
int j = 0;
|
||||
std::set< std::vector<int> > existing_points;
|
||||
std::pair< std::set< std::vector<int> >::iterator,bool > pnt_it;
|
||||
for ( it=contour.begin() ; it < contour.end(); it++ )
|
||||
{
|
||||
// gp_Pnt aContourPnt = EntityGUI::ConvertClickToPoint(viewLeft + it->x*imgZoomRatio, viewTop + it->y*imgZoomRatio, vp->getView());
|
||||
@ -675,18 +683,24 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
||||
// double z = aContourPnt.Z();
|
||||
|
||||
// When using the new way with textures on shapes we just have to do the following
|
||||
// double pnt_array[] = {it->x,it->y};
|
||||
// std::vector<int> pnt (pnt_array, pnt_array + sizeof(pnt_array) / sizeof(double) );
|
||||
//
|
||||
// pnt_it=existing_points.insert(pnt);
|
||||
// if (pnt_it.second == true)
|
||||
// {
|
||||
// MESSAGE("point absent du contour insere")
|
||||
double x = it->x;
|
||||
double y = height - it->y;
|
||||
double z = 0;
|
||||
|
||||
aGeomContourPnt = aBasicOperations->MakePointXYZ( x,y,z );
|
||||
geomContourPnts[j] = aGeomContourPnt;
|
||||
j++;
|
||||
// }
|
||||
}
|
||||
std::cout<<"repere2"<<std::endl;
|
||||
GEOM::GEOM_Object_var aWire = aCurveOperations->MakePolyline(geomContourPnts.in(), false);
|
||||
// GEOM::GEOM_Object_var aContourCompound = aShapesOperations->MakeCompound(geomContourPnts);
|
||||
// GEOM::GEOM_Object_var aWire = aCurveOperations->MakeSplineInterpolation(geomContourPnts.in(), false, true);
|
||||
std::cout<<"repere3"<<std::endl;
|
||||
if ( !aWire->_is_nil() )
|
||||
{
|
||||
geomContours->length(contourCount + 1);
|
||||
@ -694,15 +708,48 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
||||
contourCount++;
|
||||
// objects.push_back( aWire._retn() );
|
||||
}
|
||||
// if ( !aContourCompound->_is_nil() )
|
||||
// {
|
||||
// geomContours->length(contourCount + 1);
|
||||
// geomContours[contourCount] = aContourCompound;
|
||||
// contourCount++;
|
||||
// // objects.push_back( aWire._retn() );
|
||||
// }
|
||||
}
|
||||
std::cout<<"repere4, contourCount = "<<contourCount<<std::endl;
|
||||
GEOM::GEOM_Object_var aContoursCompound = aShapesOperations->MakeCompound(geomContours);
|
||||
std::cout<<"repere5"<<std::endl;
|
||||
if ( !aContoursCompound->_is_nil() )
|
||||
{
|
||||
objects.push_back( aContoursCompound._retn() );
|
||||
}
|
||||
|
||||
res=true;
|
||||
}
|
||||
else if (myConstructorId == 2)
|
||||
{
|
||||
// gp_Pnt p1(0,0,0);
|
||||
// gp_Pnt p2(0,height,0);
|
||||
// gp_Pnt p3(width,height,0);
|
||||
// gp_Pnt p4(width,0,0);
|
||||
|
||||
GEOM::GEOM_Object_var P1 = aBasicOperations->MakePointXYZ( 0,0,0 );
|
||||
GEOM::GEOM_Object_var P2 = aBasicOperations->MakePointXYZ( 0,height,0 );
|
||||
GEOM::GEOM_Object_var P3 = aBasicOperations->MakePointXYZ( width,height,0 );
|
||||
GEOM::GEOM_Object_var P4 = aBasicOperations->MakePointXYZ( width,0,0 );
|
||||
|
||||
GEOM::GEOM_IBlocksOperations_var aBlocksOperations = myGeomGUI->GetGeomGen()->GetIBlocksOperations( getStudyId() );
|
||||
GEOM::GEOM_Object_var aFace = aBlocksOperations->MakeQuad4Vertices(P1,P2,P3,P4);
|
||||
getDisplayer()->SetTexture(theImgFileName.toStdString());
|
||||
// getDisplayer()->SetDisplayMode(3);
|
||||
vp->getView()->SetSurfaceDetail(V3d_TEX_ALL);
|
||||
// OCCViewer_Viewer* anOCCViewer =((OCCViewer_ViewWindow*)theViewWindow)->getViewManager())->getOCCViewer();
|
||||
// Handle(AIS_InteractiveContext) aContext = anOCCViewer->getAISContext();
|
||||
|
||||
MESSAGE("EntityGUI_FeatureDetectorDlg::execute() theImgFileName = "<<theImgFileName.toStdString());
|
||||
if ( !aFace->_is_nil() )
|
||||
{
|
||||
objects.push_back( aFace._retn() );
|
||||
}
|
||||
|
||||
res=true;
|
||||
}
|
||||
// else
|
||||
|
@ -142,8 +142,10 @@ void GEOMBase_Helper::display( GEOM::GEOM_Object_ptr object, const bool updateVi
|
||||
{
|
||||
// Unset color of shape ( this color may be set during preview displaying )
|
||||
// Default color will be used
|
||||
getDisplayer()->UnsetColor();
|
||||
// getDisplayer()->UnsetColor();
|
||||
getDisplayer()->UnsetWidth();
|
||||
|
||||
MESSAGE("GEOMBase_Helper::display myTexture = "<<getDisplayer()->GetTexture())
|
||||
|
||||
// Enable activisation of selection
|
||||
getDisplayer()->SetToActivate( true );
|
||||
@ -832,9 +834,7 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction )
|
||||
bool result = false;
|
||||
|
||||
try {
|
||||
MESSAGE("publish ="<<publish<<"useTransaction ="<<useTransaction)
|
||||
if ( ( !publish && !useTransaction ) || openCommand() ) {
|
||||
MESSAGE("Entered the if")
|
||||
SUIT_OverrideCursor wc;
|
||||
SUIT_Session::session()->activeApplication()->putInfo( "" );
|
||||
ObjectList objects;
|
||||
|
@ -87,6 +87,8 @@
|
||||
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
|
||||
// VTK Includes
|
||||
#include <vtkActorCollection.h>
|
||||
#include <vtkProperty.h>
|
||||
@ -312,6 +314,7 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st )
|
||||
myColor = -1;
|
||||
// This color is used for shape displaying. If it is equal -1 then
|
||||
// default color is used.
|
||||
myTexture = "";
|
||||
|
||||
myWidth = -1;
|
||||
myType = -1;
|
||||
@ -722,6 +725,17 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( HasTexture() )
|
||||
{
|
||||
MESSAGE("GEOM_Displayer::Update HasTexture() == true")
|
||||
AISShape->SetTextureMapOn();
|
||||
AISShape->DisableTextureModulate();
|
||||
AISShape->SetMaterial(Graphic3d_NOM_SATIN);
|
||||
AISShape->SetDisplayMode( 3 );
|
||||
AISShape->SetTextureFileName(TCollection_AsciiString(myTexture.c_str()));
|
||||
// Attributes()->ShadingAspect()
|
||||
MESSAGE("AISShape->TextureFile() = "<<AISShape->TextureFile())
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( onlyVertex )
|
||||
@ -1518,6 +1532,31 @@ void GEOM_Displayer::UnsetColor()
|
||||
myShadingColor = SalomeApp_Tools::color( col );
|
||||
}
|
||||
|
||||
//=================================================================
|
||||
/*!
|
||||
* GEOM_Displayer::SetTexture
|
||||
* Set color for shape displaying. If it is equal -1 then default color is used.
|
||||
* Available values are from Quantity_NameOfColor enumeration
|
||||
*/
|
||||
//=================================================================
|
||||
void GEOM_Displayer::SetTexture( const std::string& texureFileName )
|
||||
{
|
||||
if(texureFileName!="")
|
||||
{
|
||||
myTexture = texureFileName;
|
||||
}
|
||||
}
|
||||
|
||||
bool GEOM_Displayer::HasTexture() const
|
||||
{
|
||||
return myTexture != "";
|
||||
}
|
||||
|
||||
std::string GEOM_Displayer::GetTexture() const
|
||||
{
|
||||
return myTexture;
|
||||
}
|
||||
|
||||
//=================================================================
|
||||
/*!
|
||||
* GEOM_Displayer::SetWidth
|
||||
|
@ -123,6 +123,11 @@ public:
|
||||
void UnsetColor();
|
||||
int GetColor () const;
|
||||
bool HasColor () const;
|
||||
|
||||
/* Set texture for shape displaying. */
|
||||
void SetTexture ( const std::string& );
|
||||
bool HasTexture () const;
|
||||
std::string GetTexture () const;
|
||||
|
||||
/* Set width for shape displaying. If it is equal -1 then default width is used. */
|
||||
void SetWidth ( const double );
|
||||
@ -202,6 +207,7 @@ protected:
|
||||
Handle(SALOME_InteractiveObject) myIO;
|
||||
TopoDS_Shape myShape;
|
||||
std::string myName;
|
||||
std::string myTexture;
|
||||
int myType;
|
||||
SALOME_View* myViewFrame;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user