void occQt::testCommon() { gp_Ax2 anAxis; anAxis.SetLocation(gp_Pnt(0.0, 110.0, 0.0)); TopoDS_Shape aTopoBox = BRepPrimAPI_MakeBox(anAxis, 3.0, 4.0, 5.0); TopoDS_Shape aTopoSphere = BRepPrimAPI_MakeSphere(anAxis, 2.5); TopoDS_Shape aCommonShape = BRepAlgoAPI_Common(aTopoBox, aTopoSphere); gp_Trsf aTrsf; aTrsf.SetTranslation(gp_Vec(8.0, 0.0, 0.0)); BRepBuilderAPI_Transform aTransform(aCommonShape, aTrsf); Handle_AIS_Shape anAisBox = new AIS_Shape(aTopoBox); Handle_AIS_Shape anAisSphere = new AIS_Shape(aTopoSphere); Handle_AIS_Shape anAisCommonShape = new AIS_Shape(aTransform.Shape()); anAisBox->SetColor(Quantity_NOC_SPRINGGREEN); anAisSphere->SetColor(Quantity_NOC_STEELBLUE); anAisCommonShape->SetColor(Quantity_NOC_ROYALBLUE); mContext->Display(anAisBox); mContext->Display(anAisSphere); mContext->Display(anAisCommonShape); }
//================================================================ // Function : TexturesExt_Presentation::sampleLand // Purpose : //================================================================ void TexturesExt_Presentation::sampleTerrain() { TopoDS_Shape aShape; if (!loadShape(aShape, "terrain.brep")) return; // a part of the landscape is textured TopTools_IndexedMapOfShape aFaces; TopExp::MapShapes(aShape, TopAbs_FACE, aFaces); // TopLoc_Location aLoc; // Handle_Geom_Surface aSur = BRep_Tool::Surface(TopoDS::Face(aFaces(1)), aLoc); // Standard_Real u1,u2,v1,v2; // aSur->Bounds(u1,u2,v1,v2); // gp_Pnt aPnt = aSur->Value(u1, v1); gp_Pnt aPnt(82100,80300,10940);// point at u1,v1 // resize and move the shape to the center of the viewer gp_Trsf aMoveTrsf; gp_Ax3 New(gp_Pnt(-30,-30, 0),gp_Dir(0,0,1)); gp_Ax3 Current(aPnt,gp_Dir(0,0,1)); aMoveTrsf.SetDisplacement(Current, New); gp_Trsf aScaleTrsf; aScaleTrsf.SetScale(aPnt,0.0075); BRepBuilderAPI_Transform aTransform(aMoveTrsf*aScaleTrsf); aTransform.Perform(aFaces(1)); aShape = aTransform; getAISContext()->Display(Texturize(aShape, "terrain.gif")); }
//================================================================ // Function : moveScale // Purpose : move a shape a little left and scale it to 15%. //================================================================ static void moveScale(TopoDS_Shape& aShape) { gp_Trsf aMoveTrsf; gp_Ax3 New(gp_Pnt(-30,-30, -10),gp_Dir(0,0,1)); gp_Ax3 Current(gp_Pnt(0,0,0),gp_Dir(0,0,1)); aMoveTrsf.SetDisplacement(Current, New); gp_Trsf aScaleTrsf; aScaleTrsf.SetScale(gp_Pnt(0,0,0),0.15); BRepBuilderAPI_Transform aTransform(aMoveTrsf*aScaleTrsf); aTransform.Perform(aShape); aShape = aTransform; }
void occQt::makeLoft() { // bottom wire. TopoDS_Edge aCircleEdge = BRepBuilderAPI_MakeEdge(gp_Circ(gp_Ax2(gp_Pnt(0.0, 80.0, 0.0), gp::DZ()), 1.5)); TopoDS_Wire aCircleWire = BRepBuilderAPI_MakeWire(aCircleEdge); // top wire. BRepBuilderAPI_MakePolygon aPolygon; aPolygon.Add(gp_Pnt(-3.0, 77.0, 6.0)); aPolygon.Add(gp_Pnt(3.0, 77.0, 6.0)); aPolygon.Add(gp_Pnt(3.0, 83.0, 6.0)); aPolygon.Add(gp_Pnt(-3.0, 83.0, 6.0)); aPolygon.Close(); BRepOffsetAPI_ThruSections aShellGenerator; BRepOffsetAPI_ThruSections aSolidGenerator(true); aShellGenerator.AddWire(aCircleWire); aShellGenerator.AddWire(aPolygon.Wire()); aSolidGenerator.AddWire(aCircleWire); aSolidGenerator.AddWire(aPolygon.Wire()); // translate the solid. gp_Trsf aTrsf; aTrsf.SetTranslation(gp_Vec(18.0, 0.0, 0.0)); BRepBuilderAPI_Transform aTransform(aSolidGenerator.Shape(), aTrsf); Handle_AIS_Shape anAisShell = new AIS_Shape(aShellGenerator.Shape()); Handle_AIS_Shape anAisSolid = new AIS_Shape(aTransform.Shape()); anAisShell->SetColor(Quantity_NOC_OLIVEDRAB); anAisSolid->SetColor(Quantity_NOC_PEACHPUFF); mContext->Display(anAisShell); mContext->Display(anAisSolid); }