| Why does AIS module not have AIS_Rectangle ? |
 |
| Venugopal Gudimetla | 2010/03/11 13:39 |
Hi, one more question not sure if it gets answered at all, but it's worth a try :
we have many AIS objects - point, circles, ellipses etc, but not rectangles why is that so ?, is there another way to construct AIS_Rectagles and display them ?
Thanks. |  |
|
|  |
| Jonathan Greig | 2010/03/12 01:22 | You can create an AIS_Shape. The code below is based off of the Tutorial(Qt) MakeBottle function, but stripped down quite a bit. In fact, I do not use the AIS_Point/Line/Circle for any of my shapes. I'm not sure if using a AIS_Shape versus the other classes provides any performance benefits, but so far, it seems to be a solution I like so far that can be adapted many ways. If there is a better way, or any negatives to this approach, I'm all ears, as this is a solution that has worked for me.
[code]
void MyClass::MakeRect(const gp_Pnt point1, const gp_Pnt point2)
{
if(point1.X() == point2.X() || point1.Y() == point2.Y())
{ return; }
//Profile : Define Support Points
gp_Pnt pt1(point1.X(),point1.Y(),point1.Z());
gp_Pnt pt2(point1.X(),point2.Y(),point1.Z());
gp_Pnt pt3(point2.X(),point2.Y(),point1.Z());
gp_Pnt pt4(point2.X(),point1.Y(),point1.Z());
//Profile : Define the Geometry
Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(pt1, pt2);
Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(pt2, pt3);
Handle(Geom_TrimmedCurve) aSegment3 = GC_MakeSegment(pt3, pt4);
Handle(Geom_TrimmedCurve) aSegment4 = GC_MakeSegment(pt4, pt1);
//Profile : Define the Topology
TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);
TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aSegment2);
TopoDS_Edge aEdge3 = BRepBuilderAPI_MakeEdge(aSegment3);
TopoDS_Edge aEdge4 = BRepBuilderAPI_MakeEdge(aSegment4);
TopoDS_Wire aWire1 = BRepBuilderAPI_MakeWire(aEdge1, aEdge2 , aEdge3, aEdge4);
TopoDS_Shape aRect=aWire1;
Handle(AIS_Shape) AISRect=new AIS_Shape(aRect);
Quantity_Color color(1.0,1.0,0,Quantity_TOC_RGB);
AISRect->SetColor(color);
getContext()->SetDisplayMode(AISRect,1,false);
getContext()->Display(AISRect, false);
}
[/code] |  |
|
|  |
| Venugopal Gudimetla | 2010/03/12 03:22 | jonathan, greatly appreciate it...let me try it out and back and come back to you.
Thanks,
Venugopal |  |
|
|  |
| Venugopal Gudimetla | 2010/03/12 04:03 | Hi Jonathan, it worked perfectly, that's exactly what I wanted..again thank you very much.
Venugopal. |  |
|
| | |