00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __GU_EdgeUtils_h__
00020 #define __GU_EdgeUtils_h__
00021
00022 #include "GU_API.h"
00023 #include <UT/UT_Vector4.h>
00024 #include <GB/GB_Edge.h>
00025
00026 class GEO_Face;
00027 class GEO_Point;
00028 class GEO_Primitive;
00029
00030
00031
00032
00033 class GU_API GU_EdgeCaster
00034 {
00035 public:
00036 const GEO_Point *p0(const GB_Edge *e) const
00037 { return (GEO_Point *)e->p0(); }
00038 const GEO_Point *p1(const GB_Edge *e) const
00039 { return (GEO_Point *)e->p1(); }
00040 const GEO_Point *p0(const GB_Edge &e) const
00041 { return (GEO_Point *)e.p0(); }
00042 const GEO_Point *p1(const GB_Edge &e) const
00043 { return (GEO_Point *)e.p1(); }
00044
00045 const GEO_Primitive *prim(const GB_Edge *e) const
00046 { return (GEO_Primitive *)e->prim(); }
00047 const GEO_Primitive *prim(const GB_Edge &e) const
00048 { return (GEO_Primitive *)e.prim(); }
00049
00050 GEO_Point *&p0(GB_Edge *e) { return (GEO_Point *&)e->p0(); }
00051 GEO_Point *&p1(GB_Edge *e) { return (GEO_Point *&)e->p1(); }
00052 GEO_Point *&p0(GB_Edge &e) { return (GEO_Point *&)e.p0(); }
00053 GEO_Point *&p1(GB_Edge &e) { return (GEO_Point *&)e.p1(); }
00054
00055 GEO_Primitive *&prim(GB_Edge *e) { return (GEO_Primitive *&)e->prim(); }
00056 GEO_Primitive *&prim(GB_Edge &e) { return (GEO_Primitive *&)e.prim(); }
00057
00058 };
00059
00060
00061
00062
00063
00064
00065
00066
00067 GU_API extern UT_Vector4 GUcomputeInsetPos(const GEO_Face &face, int vtx,
00068 float inset);
00069
00070
00071 GU_API extern bool GUisPointInline(const UT_Vector3 &start,
00072 const UT_Vector3 &mid,
00073 const UT_Vector3 &end, float tol);
00074
00075
00076
00077
00078 GU_API extern bool GUgetEdgePoints(const GEO_Face &face, int edgenum,
00079 GEO_Point *&p0, GEO_Point *&p1);
00080
00081 GU_API inline void
00082 GUinterpolateLine(const UT_Vector4 &v0, const UT_Vector4 &v1,
00083 fpreal t, UT_Vector4 &d)
00084 {
00085 d.assign(SYSlerp(v0.x(), v1.x(), t),
00086 SYSlerp(v0.y(), v1.y(), t),
00087 SYSlerp(v0.z(), v1.z(), t),
00088 SYSlerp(v0.w(), v1.w(), t));
00089 }
00090
00091 #endif