2 // Created September 1992
5 //-Copyright MatraDatavision 1991,1992
18 #include <V3d_Plane.ixx>
19 #include <Viewer_BadValue.hxx>
21 #include <Graphic3d_Group.hxx>
22 #include <Graphic3d_Array1OfVertex.hxx>
23 #include <Graphic3d_AspectFillArea3d.hxx>
28 V3d_Plane::V3d_Plane(const Standard_Real A, const Standard_Real B, const Standard_Real C, const Standard_Real D) {
30 Viewer_BadValue_Raise_if( sqrt(A*A + B*B + C*C) <= 0., "V3d_Plane::V3d_Plane, bad plane coefficients");
32 MyPlane = new Visual3d_ClipPlane(A,B,C,D) ;
37 void V3d_Plane::SetPlane( const Standard_Real A, const Standard_Real B, const Standard_Real C, const Standard_Real D) {
39 Viewer_BadValue_Raise_if( sqrt(A*A + B*B + C*C) <= 0., "V3d_Plane::SetPlane, bad plane coefficients");
41 MyPlane->SetPlane(A,B,C,D) ;
48 void V3d_Plane::Display(const Handle(V3d_View)& aView,
49 const Quantity_Color& aColor) {
50 Handle(V3d_Viewer) theViewer = aView->Viewer();
51 if (!MyGraphicStructure.IsNull()) {
52 MyGraphicStructure->Clear();
54 Standard_Real size = theViewer->DefaultViewSize();
55 Standard_Real offset = size/10000.;
56 MyGraphicStructure = new Graphic3d_Structure(theViewer->Viewer());
57 Handle(Graphic3d_Group) group = new Graphic3d_Group(MyGraphicStructure);
58 Handle(Graphic3d_AspectFillArea3d) aspect =
59 new Graphic3d_AspectFillArea3d();
60 Graphic3d_MaterialAspect plastic(Graphic3d_NOM_PLASTIC);
61 plastic.SetColor(aColor);
62 plastic.SetTransparency(0.5);
63 aView->SetTransparency(Standard_True);
64 aspect->SetFrontMaterial(plastic);
65 // aspect->SetInteriorStyle (Aspect_IS_SOLID);
66 aspect->SetInteriorStyle (Aspect_IS_HATCH);
67 aspect->SetHatchStyle (Aspect_HS_GRID_DIAGONAL_WIDE);
68 MyGraphicStructure->SetPrimitivesAspect(aspect);
69 Graphic3d_Array1OfVertex p(1,4);
70 p(1).SetCoord(-size/2.,-size/2.,offset);
71 p(2).SetCoord(-size/2., size/2.,offset);
72 p(3).SetCoord( size/2., size/2.,offset);
73 p(4).SetCoord( size/2.,-size/2.,offset);
75 MyGraphicStructure->Display(0);
79 void V3d_Plane::Erase() {
80 if (!MyGraphicStructure.IsNull()) MyGraphicStructure->Erase();
83 void V3d_Plane::Plane(Standard_Real& A, Standard_Real& B, Standard_Real& C, Standard_Real& D)const {
85 MyPlane->Plane(A,B,C,D) ;
88 Handle(Visual3d_ClipPlane) V3d_Plane::Plane()const {
93 Standard_Boolean V3d_Plane::IsDisplayed() const {
95 if( MyGraphicStructure.IsNull() ) return Standard_False;
96 return MyGraphicStructure->IsDisplayed();
99 void V3d_Plane::Update() {
101 if( !MyGraphicStructure.IsNull() ) {
102 TColStd_Array2OfReal matrix(1,4,1,4);
103 Standard_Real A,B,C,D;
104 MyPlane->Plane(A,B,C,D) ;
105 gp_Pln plan(A,B,C,D);
107 trsf.SetTransformation(plan.Position());
109 for (Standard_Integer i=1; i<=3; i++){
110 for (Standard_Integer j=1; j<=4; j++){
111 matrix.SetValue(i,j,trsf.Value(i,j));
114 matrix.SetValue(4,1,0.);
115 matrix.SetValue(4,2,0.);
116 matrix.SetValue(4,3,0.);
117 matrix.SetValue(4,4,1.);
118 MyGraphicStructure->SetTransform(matrix,Graphic3d_TOC_REPLACE);