|
cgma
|
Public Member Functions | |
| ConeSurface (axis_t axis_p, double tsquared_p, double point_p, double nappe_p) | |
| ConeSurface (axis_t axis_p, double tsquared_p, Vector3d center_p, double nappe_p) | |
| virtual double | getFarthestExtentFromOrigin () const |
Protected Types | |
| enum | nappe { LEFT = -1, BOTH = 0, RIGHT = 1 } |
Protected Member Functions | |
| virtual iBase_EntityHandle | getHandle (bool positive, iGeom_Instance &igm, double world_size) |
Static Protected Member Functions | |
| static enum nappe | make_nappe (double param) |
Protected Attributes | |
| axis_t | axis |
| double | theta |
| Vector3d | center |
| the cone's opening angle | |
| bool | onaxis |
| the cone's apex | |
| enum nappe | nappe |
Definition at line 226 of file volumes.cpp.
enum ConeSurface::nappe [protected] |
| ConeSurface::ConeSurface | ( | axis_t | axis_p, |
| double | tsquared_p, | ||
| double | point_p, | ||
| double | nappe_p | ||
| ) | [inline] |
Definition at line 252 of file volumes.cpp.
| ConeSurface::ConeSurface | ( | axis_t | axis_p, |
| double | tsquared_p, | ||
| Vector3d | center_p, | ||
| double | nappe_p | ||
| ) | [inline] |
Definition at line 258 of file volumes.cpp.
:
SurfaceVolume(), axis(axis_p), theta( atan(sqrt(tsquared_p)) ), center(center_p), onaxis(false), nappe(make_nappe(nappe_p))
{}
| virtual double ConeSurface::getFarthestExtentFromOrigin | ( | ) | const [inline, virtual] |
Implements SurfaceVolume.
Definition at line 262 of file volumes.cpp.
| virtual iBase_EntityHandle ConeSurface::getHandle | ( | bool | positive, |
| iGeom_Instance & | igm, | ||
| double | world_size | ||
| ) | [inline, protected, virtual] |
Implements SurfaceVolume.
Definition at line 267 of file volumes.cpp.
{
double height = (center.length() + world_size);
// based on the textual descriptions in the manual, I think the following expression should be
// height * tan ( theta / 2 ) -- unless "opening angle" refers to only half the apex angle
// of the cylinder. But this implementation seems to be more correct in examples I can check against.
double base_radius = height * tan( theta );
int igm_result;
iBase_EntityHandle right_nappe = 0;
iBase_EntityHandle left_nappe = 0;
iBase_EntityHandle cone;
if( nappe != LEFT){
iGeom_createCone( igm, height, base_radius, 0, 0, &right_nappe, &igm_result);
CHECK_IGEOM( igm_result, "making cone (right nappe)" );
iGeom_rotateEnt( igm, right_nappe, 180, 1, 0, 0, &igm_result);
CHECK_IGEOM( igm_result, "Rotating cone (right nappe)");
iGeom_moveEnt( igm, right_nappe, 0, 0, height/2.0, &igm_result );
CHECK_IGEOM( igm_result, "Moving cone (right nappe)");
cone = right_nappe;
}
if( nappe != RIGHT ){
iGeom_createCone( igm, height, base_radius, 0, 0, &left_nappe, &igm_result );
CHECK_IGEOM( igm_result, "making cone (left nappe)" );
iGeom_moveEnt( igm, left_nappe, 0, 0, -height/2.0, &igm_result );
CHECK_IGEOM( igm_result, "Moving cone (left nappe)" );
cone = left_nappe;
}
if( right_nappe && left_nappe ){
iBase_EntityHandle nappes[2] = {right_nappe, left_nappe};
iGeom_uniteEnts( igm, nappes, 2, &cone, &igm_result );
CHECK_IGEOM( igm_result, "Unioning cone nappes" );
}
if( axis == X ){
iGeom_rotateEnt( igm, cone, 90, 0, 1, 0, &igm_result );
CHECK_IGEOM( igm_result, "rotating cone (X)" );
}
else if( axis == Y ){
iGeom_rotateEnt( igm, cone, -90, 1, 0, 0, &igm_result );
CHECK_IGEOM( igm_result, "rotating cone (Y)" );
}
iGeom_moveEnt( igm, cone, center.v[0], center.v[1], center.v[2], &igm_result);
CHECK_IGEOM( igm_result, "moving cone to its apex" );
iBase_EntityHandle final_cone = embedWithinWorld( positive, igm, world_size, cone, true );
return final_cone;
}
| static enum nappe ConeSurface::make_nappe | ( | double | param | ) | [inline, static, protected] |
Definition at line 232 of file volumes.cpp.
axis_t ConeSurface::axis [protected] |
Definition at line 245 of file volumes.cpp.
Vector3d ConeSurface::center [protected] |
the cone's opening angle
Definition at line 247 of file volumes.cpp.
enum nappe ConeSurface::nappe [protected] |
Definition at line 249 of file volumes.cpp.
bool ConeSurface::onaxis [protected] |
the cone's apex
Definition at line 248 of file volumes.cpp.
double ConeSurface::theta [protected] |
Definition at line 246 of file volumes.cpp.