// File OpenGl_GraphicDriver_709.cxx // Created Mardi 28 janvier 1997 // Author CAL // Modified // 27/08/97 ; PCT : ajout coordonnee texture //-Copyright MatraDatavision 1997 //-Version //-Design Declaration des variables specifiques aux Drivers //-Warning Un driver encapsule les Pex et OpenGl drivers //-References //-Language C++ 2.0 //-Declarations // for the class #include #include #include //-Aliases //-Global data definitions //-Methods, in order void OpenGl_GraphicDriver::QuadrangleMesh (const Graphic3d_CGroup& ACGroup, const Graphic3d_Array2OfVertex& ListVertex, const Standard_Boolean ) { Graphic3d_CGroup MyCGroup = ACGroup; Standard_Real X, Y, Z; Standard_Integer i, j, k; Standard_Integer LowerRow = ListVertex.LowerRow (); Standard_Integer UpperRow = ListVertex.UpperRow (); Standard_Integer LowerCol = ListVertex.LowerCol (); Standard_Integer UpperCol = ListVertex.UpperCol (); CALL_DEF_QUAD aquad; CALL_DEF_POINT *points; i = ListVertex.RowLength (); j = ListVertex.ColLength (); // Allocation dynamique points = new CALL_DEF_POINT [i*j]; aquad.NbPoints = int (i*j); aquad.TypePoints = 1; aquad.SizeRow = int (i); aquad.SizeCol = int (j); aquad.UPoints.Points = points; // Parcours des sommets k = 0; for (i=LowerRow; i<=UpperRow; i++) for (j=LowerCol; j<=UpperCol; j++) { ListVertex (i, j).Coord (X, Y, Z); points[k].x = float (X); points[k].y = float (Y); points[k].z = float (Z); k++; } if (MyTraceLevel) { PrintFunction ("call_togl_quadrangle"); PrintCGroup (MyCGroup, 1); } call_togl_quadrangle (&MyCGroup, &aquad); // Desallocation dynamique delete [] points; } void OpenGl_GraphicDriver::QuadrangleMesh (const Graphic3d_CGroup& ACGroup, const Graphic3d_Array2OfVertexN& ListVertex, const Standard_Boolean ) { Graphic3d_CGroup MyCGroup = ACGroup; Standard_Real X, Y, Z; Standard_Real DX, DY, DZ; Standard_Integer i, j, k; Standard_Integer LowerRow = ListVertex.LowerRow (); Standard_Integer UpperRow = ListVertex.UpperRow (); Standard_Integer LowerCol = ListVertex.LowerCol (); Standard_Integer UpperCol = ListVertex.UpperCol (); CALL_DEF_QUAD aquad; CALL_DEF_POINTN *points; i = ListVertex.RowLength (); j = ListVertex.ColLength (); // Allocation dynamique points = new CALL_DEF_POINTN [i*j]; aquad.NbPoints = int (i*j); aquad.TypePoints = 2; aquad.SizeRow = int (i); aquad.SizeCol = int (j); aquad.UPoints.PointsN = points; // Parcours des sommets k = 0; for (i=LowerRow; i<=UpperRow; i++) for (j=LowerCol; j<=UpperCol; j++) { ListVertex (i, j).Coord (X, Y, Z); points[k].Point.x = float (X); points[k].Point.y = float (Y); points[k].Point.z = float (Z); ListVertex (i, j).Normal (DX, DY, DZ); points[k].Normal.dx = float (DX); points[k].Normal.dy = float (DY); points[k].Normal.dz = float (DZ); k++; } if (MyTraceLevel) { PrintFunction ("call_togl_quadrangle"); PrintCGroup (MyCGroup, 1); } call_togl_quadrangle (&MyCGroup, &aquad); // Desallocation dynamique delete [] points; } void OpenGl_GraphicDriver::QuadrangleMesh(const Graphic3d_CGroup& ACGroup, const Graphic3d_Array2OfVertexNT& ListVertex, const Standard_Boolean ) { Graphic3d_CGroup MyCGroup = ACGroup; Standard_Real X, Y, Z; Standard_Real DX, DY, DZ; Standard_Integer i, j, k; Standard_Integer LowerRow = ListVertex.LowerRow (); Standard_Integer UpperRow = ListVertex.UpperRow (); Standard_Integer LowerCol = ListVertex.LowerCol (); Standard_Integer UpperCol = ListVertex.UpperCol (); CALL_DEF_QUAD aquad; CALL_DEF_POINTNT *points; i = ListVertex.RowLength (); j = ListVertex.ColLength (); // Allocation dynamique points = new CALL_DEF_POINTNT [i*j]; aquad.NbPoints = int (i*j); aquad.TypePoints = 5; aquad.SizeRow = int (i); aquad.SizeCol = int (j); aquad.UPoints.PointsNT = points; // Parcours des sommets k = 0; for (i=LowerRow; i<=UpperRow; i++) for (j=LowerCol; j<=UpperCol; j++) { ListVertex (i, j).Coord (X, Y, Z); points[k].Point.x = float (X); points[k].Point.y = float (Y); points[k].Point.z = float (Z); ListVertex (i, j).Normal (DX, DY, DZ); points[k].Normal.dx = float (DX); points[k].Normal.dy = float (DY); points[k].Normal.dz = float (DZ); ListVertex (i, j).TextureCoordinate(DX,DY); points[k].TextureCoord.tx = float(DX); points[k].TextureCoord.ty = float(DY); k++; } if (MyTraceLevel) { PrintFunction ("call_togl_quadrangle"); PrintCGroup (MyCGroup, 1); } call_togl_quadrangle (&MyCGroup, &aquad); // Desallocation dynamique delete [] points; } void OpenGl_GraphicDriver::QuadrangleSet (const Graphic3d_CGroup& ACGroup, const Graphic3d_Array1OfVertex& ListVertex, const Aspect_Array1OfEdge& ListEdge, const Standard_Boolean ) { Graphic3d_CGroup MyCGroup = ACGroup; Standard_Integer i, j, k; Standard_Integer Lower, Upper; Standard_Integer OffSet; CALL_DEF_LISTPOINTS alpoints; CALL_DEF_LISTEDGES aledges; CALL_DEF_EDGE *edges; // Permettra une generalisation plus facile a une methode du style // PolygonSet (ListVertex, ListEdge, Bounds). int *integers; CALL_DEF_LISTINTEGERS albounds; i = ListVertex.Length (); j = ListEdge.Length (); k = int (j/4); Lower = ListVertex.Lower (); Upper = ListVertex.Upper (); OffSet = Lower; // Allocation dynamique edges = new CALL_DEF_EDGE [j]; integers= new int [k]; alpoints.NbPoints = int (i); alpoints.TypePoints = 1; alpoints.UPoints.Points = (CALL_DEF_POINT *) &ListVertex (Lower); aledges.NbEdges = int (j); aledges.Edges = edges; albounds.NbIntegers = int (k); albounds.Integers = integers; Lower = ListEdge.Lower (); Upper = ListEdge.Upper (); // Parcours des aretes for (j=0, i=Lower; i<=Upper; i++, j++) { edges[j].Index1 = int (ListEdge (i).FirstIndex ()-OffSet); edges[j].Index2 = int (ListEdge (i).LastIndex ()-OffSet); edges[j].Type = int (ListEdge (i).Type ()); } // Parcours des limites (ici toutes les limites sont egales a 4. for (j=0; j