OpenCASCADE 7.1.0 AIS_TexturedShape has no texture

Hello,

I want to display a textured shape. The program doesn't crash, but the shapes are plain. I can change color, material, transparency, etc., but no textures.

I found in other forum posts that I have to call SetSurfaceDetail(V3d_TEX_ALL) from my V3d_Viewer.

However, this was deleted in OpenCASCADE 7.1.0.

I know that my BMP file exists, and I also tried using "1" in SetTextureFileName, but still nothing happens

Any ideas what might be wrong or what should I try?

Here's my code:


void UMAT_MainDoc::displayShape(Handle(AIS_Shape) shape, const Quantity_Color col, const Standard_Real transparency /*= 0.0*/)

{

Handle(AIS_TexturedShape) occ_aisTextured = new AIS_TexturedShape(shape->Shape());



TCollection_AsciiString fileName("C:\\Users\\serban.stoenescu\\Pictures\\bitmap.bmp");

//TCollection_AsciiString fileName("1");



occ_aisTextured->SetTextureFileName(fileName);

occ_aisTextured->SetTextureMapOn();

int nRepeat = 2;

double toScale = 0.5;

occ_aisTextured->SetTextureRepeat(Standard_True, nRepeat, nRepeat);

occ_aisTextured->SetTextureScale(Standard_True, toScale, toScale);

occ_aisTextured->SetTextureOrigin(Standard_True, 0, 0);

//occ_aisTextured->DisableTextureModulate();

occ_aisTextured->SetDisplayMode(3); // mode 3 is "textured" mode



occ_aisTextured->SetMaterial(Graphic3d_NOM_SILVER);



m_hAISContext->SetDisplayMode(occ_aisTextured, 3);

//m_hAISContext->Display(occ_aisTextured, 3,-1);

m_hAISContext->Display(occ_aisTextured);

m_hAISContext->UpdateCurrentViewer();

occ_aisTextured->UpdateAttributes();



}

 

anshi wang's picture

I have the same problem, have you resoved?  

florian_149749's picture

Hello,

I'm very interested in this solution as well, since I have the same problem!
I just created a Box and wanted to texture it. The texture is loaded, because I save it to another folder to check this.

TopoDS_Shape aTopoBox = BRepPrimAPI_MakeBox(3.0, 4.0, 5.0);
  Handle(AIS_TexturedShape) anAisBox = new AIS_TexturedShape(aTopoBox);
  Handle(Image_AlienPixMap) pixMap = new Image_AlienPixMap;
  pixMap->Load("D:/testimage.png");
  pixMap->Save("test.png");
  anAisBox->SetTexturePixMap(pixMap);
  anAisBox->SetTextureMapOn();
  anAisBox->SetDisplayMode(3);
  anAisBox->SetTextureRepeat(true, 1.0, 1.0);
  anAisBox->DisableTextureModulate();
  m_aisContext->Display(anAisBox, Standard_True);

Does anybody know, what I'm doing wrong here?

w d's picture

SOS! I meet the same problem ,have you found the solution?Could you share it?TKS.

Frank Martinez's picture

This code is working for me:

        Handle(AIS_TexturedShape) textured = new AIS_TexturedShape(shape);
        textured->SetTextureFileName("/...../texture.jpg");
        textured->SetTextureMapOn();
        textured->SetTextureRepeat(true, 1.0, 1.0);
        textured->DisableTextureModulate();
        textured->SetDisplayMode(3);

But I have another problem: The texture is applied to each face independently. Does anyone know how to map the texture to the whole solid?

screenshot: https://old.opencascade.com/system/files/forum/screenshot_29.png

Attachments: 
hsieb's picture

Hello, I have a question,this code can be used on windows. There are textures, but it is invalid in Linux. Why? The opencascade version is the same.

Kirill Gavrilov's picture

How exactly it becomes invalid in Linux in your case? Have you checked console output for error messages from OCCT?

Most likely, OCCT has been built with different options on Linux and Windows - for instance, FreeImage dependency (USE_FREEIMAGE in CMake) wasn't selected.

hsieb's picture

Hello, thank you very much for your reply. Maybe I didn't describe the problem clearly. My code is as follows:

TopoDS_Shape aTopoBox = BRepPrimAPI_MakeBox(30.0, 40.0, 50.0);
Handle_AIS_TexturedShape texture = new AIS_TexturedShape(aTopoBox);
texture->SetTextureFileName("./test.png");
//texture->SetTextureFileName(Graphic3d_NOT_2D_CHESS);
texture->SetTextureMapOn();
texture->SetDisplayMode(3);
texture->SetTextureRepeat(true, 2, 2);
//texture->EnableTextureModulate();
texture->DisableTextureModulate();

The effect of the same code in windos and Linux is shown in the following picture

Hakan Kaya's picture

Hi, I am having the same problem. Any progress?

My code:
Handle(AIS_TexturedShape) Texturize(const TopoDS_Shape& aShape,
TCollection_AsciiString aTFileName,
Standard_Real toScaleU,
Standard_Real toScaleV,
Standard_Real toRepeatU,
Standard_Real toRepeatV,
Standard_Real originU,
Standard_Real originV)
{
// create a textured presentation object for aShape
Handle(AIS_TexturedShape) aTShape = new AIS_TexturedShape(aShape);

aTShape->SetTextureFileName(aTFileName);

// do other initialization of AIS_TexturedShape
aTShape->SetTextureMapOn();
// aTShape->SetTextureScale(Standard_True, toScaleU, toScaleV);
aTShape->SetTextureRepeat(Standard_True, toRepeatU, toRepeatV);
// aTShape->SetTextureOrigin(Standard_True, originU, originV);
aTShape->DisableTextureModulate();
aTShape->SetDisplayMode(3); // mode 3 is "textured" mode

return aTShape;
}

Kirill Gavrilov's picture

To Hakan Kaya,

1. There is no need in using obsolete class AIS_TexturedShape, texture mapping could be enabled directly for AIS_Shape.

Handle(AIS_Shape) aShapePrs = new AIS_Shape (theShape);
aShapePrs->Attributes()->SetupOwnShadingAspect();
Handle(Graphic3d_Texture2Dmanual) aTexture = new Graphic3d_Texture2Dmanual ("image.png");
aShapePrs->Attributes()->ShadingAspect()->Aspect()->SetTextureMapOn (true);
aShapePrs->Attributes()->ShadingAspect()->Aspect()->SetTextureMap (aTexture);

2. Check console output - there could be error messages. Make sure your OCCT build configuration includes USE_FREEIMAGE flag.

Hakan Kaya's picture

I solved the problem. I got the build again by setting USE FREE IMAGE=ON in the CMakeCache.txt file. And the texture is no longer black