home *** CD-ROM | disk | FTP | other *** search
- //**********************************************************************
- // DIVE Laboratories, Inc.
- // Copyright(c) 1995
- // All rights reserved.
- // FILE: GEOMETRY.HPP
- //
- // DESCRIPTION
- // This file provides the function prototypes for the geometryClass
- //
- // Author: M. Doucet
- //
- // Modification History:
- // 6/13/95 Created
- //
- //**********************************************************************
- #ifndef _GEOMETRY_HPP
- #define _GEOMETRY_HPP
-
- #include "quat.hpp"
- #include "vector.hpp"
- #include "matrix.hpp"
- #include "scc_ray.hpp"
- #include "primset.hpp"
-
- #ifndef AMBERRT
- #include "material.hpp"
- #endif
-
- class staticCollisionClass;
- class intxMsgClass;
- class geoStateClass;
- class universeClass;
- class geometryPrivateClass;
- class indexedSetClass;
- class coneNodeClass;
- class cubeNodeClass;
- class sphereNodeClass;
- class cylinderNodeClass;
- class WWWInlineClass;
- class pointClass;
- class lineClass;
- class polygonClass;
-
- class geometryClass {
-
- friend class staticCollisionClass;
- friend class collisionServerClass;
- friend class universeClass;
- friend class lightPrivateClass;
- friend class universePrivateClass;
- friend class geometryPrivateClass;
- friend class indexedSetClass;
- friend class coneNodeClass;
- friend class cubeNodeClass;
- friend class sphereNodeClass;
- friend class cylinderNodeClass;
- friend class WWWInlineClass;
- friend class lineClass;
- friend class pointClass;
- friend class polygonClass;
-
- private:
-
- geometryPrivateClass *data;
-
- void outputAsVRML(FILE *fp, int tabStops, flagType isChild=FALSE);
- void outputAsWTK(FILE *fp, flagType isChild=FALSE);
- void computeHierarchyBounds();
-
- public:
-
- // Kinematic data
- kinematicClass *kine;
-
- // Collision detection utilities:
- int intxCheckRadius( rayClass *ray, float& iDistance );
- int intxCheckBBox( V3 fromPos, V3 toPos, float& iDistance );
- intxMsgClass* intxCheckPoly( V3 fromPos, V3 toPos, long qID );
- intxMsgClass* intxCheck2(V3 fPos,V3 tPos,int polyFlag,Vres& minRange );
-
- //BDG 03/08/96
- void setCollisionStatus( int status, int propagate=TRUE );
-
- // Geometry Sets
- geoPrimSetClass lineSet;
- geoPrimSetClass polySet;
- geoPrimSetClass pointSet;
-
- // Level Of Detail Functions
- //
- void addLOD(geometryClass *g, Vres range);
-
- // Hierarchy functions
- //
- void addChild(geometryClass *child, flagType relativePQ=TRUE);
- void removeChild(geometryClass *child, flagType relativePQ=TRUE);
- int getNumChildren();
- void removeFromParent();
- void removeAllChildren();
- geometryClass *getParent();
- geometryClass *getTopParent();
- geometryClass *getChild(char *name);
-
- // Geometry construction
- //
- int addVertex(vertexClass *v);
- vertexClass *getVertex(int index);
- void getVertexPos(int index, V3 pos);
- sLinkClass *getVertexList();
-
-
- // Add new primitives whose vertices ARE currently
- // part of the geometry. If you want the vertices
- // added, set "hasNewVertices" to TRUE.
- void addPoint(pointClass *p, int hasNewVertex=FALSE);
- void addLine(lineClass *l, int hasNewVertices=FALSE);
- void addPolygon(polygonClass *p, int hasNewVertices=FALSE);
-
- // Simple primitive retrieval
- //
- pointClass *getPoint(int index);
- lineClass *getLine(int index);
- polygonClass *getPolygon(int index);
-
- // Primitive editing
- void removePoint(pointClass *p);
- void removeLine(lineClass *l);
- void removePolygon(polygonClass *p);
-
- // Visibility
- void setVisibility(int flag, flagType propagate=FALSE);
- int getVisibility();
-
- // Extents (local and hierarchy)
- void getExtents(V3 ext);
- void getHierarchyExtents(V3 ext);
- void getHierarchyBounds(V3 pos, V3 ext);
-
- // Scaling
- void stretch(V3 vals);
- void scale(Vres s);
- void getScaling(V3 vals);
-
- // Position Functions
- //
- void getPosition(V3 pos);
- void setPosition(V3 pos);
- void setPosition(Vres Xpos, Vres Ypos, Vres Zpos );
- void setPosition(positionClass p);
- void getPosition(positionClass &p);
- void translate(vectorClass delta, frameEnum frame=_LOCAL);
- void translate(vectorClass *delta, frameEnum frame=_LOCAL);
-
- // Rotation pivot points in world coordinates
- //
- void getPivot(V3 pos);
- void setPivot(V3 pos);
- void setPivot(pivotXenum Xpivot = _XCENTER,
- pivotYenum Ypivot = _YCENTER,
- pivotZenum Zpivot = _ZCENTER);
-
- // Rotations
- //
- void rotate(int axis, Vres rads);
- void rotate(vectorClass *axis, Vres rads);
-
- // Orientation Functions
- //
- void initOrientation();
- void setOrientation(quatClass q);
- void getOrientation(quatClass &q);
- void setEulerOrientation(V3 angle);
- void getEulerOrientation(V3 angle);
-
- // Alignment
- //
- void alignAxis(int axis, vectorClass *v);
- void getAxis(int axis, V3 vals);
- void getAxis(int axis, vectorClass &vec);
-
- // Creating a bounding box
- //
- void createBoundingBox(flagType propagate=FALSE);
- void setBoundingBoxVisibility(int flag);
- geometryClass *getBoundingBox();
-
- // Miscellaneous functions
- //
- int getNumPolygonsInHierarchy();
- int getNumPolygons();
- int getNumLines();
- int getNumPoints();
- int getNumVertices();
- Vres getRadius();
- void setNormalOverride(int flag);
- void updateNormals();
- int getId();
- void setData(void *pt);
- void *getData();
- void localToWorldPos(V3 in, V3 out);
- void worldToLocalPos(V3 in, V3 out);
- void complete();
- int isComplete();
-
- // Picking Functions
- int rayPickPoly(V3 from, V3 to);
-
- // Picking Functions
- flagType rayPickGeo(V3 from, V3 to);
-
- // Local action functions
- //
- void addAction (ACTIONFUNCPTR func, int rate=1, int phase=1);
- void removeAction(ACTIONFUNCPTR func);
-
- void setName(char *nm);
- char *getName();
- char *getFilename();
-
- void setAllColor(F4 col);
- void getAllColor(F4 col);
-
- #ifndef AMBERRT
- void setTexture(textureClass *t, int mode);
- void setMaterial(materialClass *m);
- void setMaterial(char *name);
- materialClass *getMaterial();
- #endif
-
- // Adding geometry to universe
- //
- void addTo(universeClass *univ);
-
- // File Saving
- //
- void save(char *filename, fileEnumType fileType=_NFF_FILE);
-
- // Collistion Detection
- //
- void setCollisionState(int flag, int dynamic=TRUE, flagType propagate=FALSE);
- int getCollisionState();
- void setCollisionMode( int type, flagType propagate=FALSE );
- int getCollisionMode( void );
- flagType isDynamic( void );
-
- void setKinematic(flagType isKinematic=TRUE);
-
- // Geometry Combining
- void operator+=(geometryClass *g);
- void add(geometryClass *g);
- void flattenHierarchy();
-
- // Render functions
- void enableState(int state);
- void disableState(int state);
- int getState();
-
- void setPolyRenderAs(polyAsEnum as);
- polyAsEnum getPolyRenderAs();
-
- void setPolyFill(polyFillEnum fill);
- polyFillEnum getPolyFill();
-
- void setPolyShading(polyShadingEnum shading);
- polyShadingEnum getPolyShading();
-
- // Constructors & Destructors
- //
- geometryClass(char *filename,
- int createBBox=TRUE, int collisionOn=FALSE);
- geometryClass();
- ~geometryClass();
-
- };
-
- #endif
-