Public Member Functions | Static Public Member Functions | Public Attributes | List of all members

A DgnBoxDetail represents a boxlike surface with two paralell rectangular faces (bottom and top) and ruled side surfaces. More...

#include <SolidPrimitive.h>

Public Member Functions

 DgnBoxDetail (DPoint3dCR baseOrigin, DPoint3dCR topOrigin, DVec3dCR vectorX, DVec3dCR vectorY, double baseX, double baseY, double topX, double topY, bool capped)
 Detail constructor with complete field list as parameters ... More...
 
 DgnBoxDetail ()
 Default value constructor. More...
 
void GetNonUniformTransform (TransformR localToWorld, double &ax, double &ay, double &bx, double &by) const
 Return (nonuniform) placement and rectangle sizes. (ax,ay) rectangle is on z=0. (bx,by) is on z=1;. More...
 
bool GetRange (DRange3dR range) const
 Return range. More...
 
bool GetRange (DRange3dR range, TransformCR transform) const
 Return range when transformed. More...
 
bool TryGetConstructiveFrame (TransformR localToWorld, TransformR worldToLocal) const
 Return coordinate system with 1) XY in box base plane, origin at nominal lower left. More...
 
bool IsSameStructure (ISolidPrimitiveCR other) const
 Test for same type and structure (but no coordinate comparison) More...
 
bool IsSameStructureAndGeometry (ISolidPrimitiveCR other, double tolerance) const
 Test for same type, structure and coordinates. More...
 
bool IsClosedVolume () const
 Test if this is a closed volume. More...
 
double ParameterizationSign () const
 Return +1 or -1 that matches the volume sign after integration over the parameter space. More...
 
void GetCorners (bvector< DPoint3d > &corners) const
 Return 8 corners of the box. More...
 
void GetCorners (DPoint3dP corners) const
 Return 8 corners of the box. More...
 
void IsCenteredBox (Transform centeredFrame, DVec3dR diagonal) const
 Test if the box is an orthogonal box. More...
 
void AddRayIntersections (bvector< SolidLocationDetail > &pickData, DRay3dCR ray, int parentId, double minParameter) const
 Compute intersections with a ray and add to the pickData. More...
 
void AddCurveIntersections (CurveVectorCR curves, bvector< CurveLocationDetail > &curvePoints, bvector< SolidLocationDetail > &solidPoints, MeshAnnotationVector &messages) const
 Compute intersections with curves and add to the data array. More...
 
void AddCurveIntersections (ICurvePrimitiveCR curves, bvector< CurveLocationDetail > &curvePoints, bvector< SolidLocationDetail > &solidPoints, MeshAnnotationVector &messages) const
 Compute intersections with a single curve and add to the data array. More...
 
bool ClosestPoint (DPoint3dCR spacePoint, SolidLocationDetail &pickDetail) const
 
bool TryUVFractionToXYZ (SolidLocationDetail::FaceIndices const &faceIndices, double uFraction, double vFraction, DPoint3dR xyz, DVec3dR dXdu, DVec3dR dXdv) const
 convert u,v fraction on specified face to xyz and derivatives. More...
 
IGeometryPtr GetFace (SolidLocationDetail::FaceIndices const &indices) const
 Return a single face of the solid primitive. More...
 
void GetFaceIndices (bvector< SolidLocationDetail::FaceIndices > &indices) const
 Fill a list of all possible face indices. More...
 
ICurvePrimitivePtr GetConstantVSection (SolidLocationDetail::FaceIndices const &indices, double fraction) const
 Copy a section curve at constant v of a single face to a single ICurvePrimitive. More...
 
ICurvePrimitivePtr GetConstantUSection (SolidLocationDetail::FaceIndices const &indices, double fraction) const
 Copy a section at constant u of a single face to a single ICurvePrimitive. More...
 
bool TryGetMaxUVLength (SolidLocationDetail::FaceIndices const &indices, DVec2dR uvLength) const
 Compute the lengths of the longest u and v direction sections of a single face of a solid primitive. More...
 
ISolidPrimitivePtr Clone () const
 Copy to a new (allocated) solid primitive. More...
 
bool TransformInPlace (TransformCR transform)
 Transform in place. More...
 
bool ComputeSecondMomentAreaProducts (TransformR localToWorld, DMatrix4dR localProducts) const
 Return the various integrated products for area moment calculations. More...
 
bool ComputeSecondMomentVolumeProducts (TransformR localToWorld, DMatrix4dR localProducts) const
 Return the various integrated products for moment calculations. More...
 
bool IsBlock (DPoint3dR origin, RotMatrixR unitAxes, DVec3dR localDiagonal, double originXFraction, double originYFraction, double originZFraction) const
 Test if the DgnBox is really a box (aka slab). More...
 

Static Public Member Functions

static DgnBoxDetail InitFromCenters (DPoint3dCR baseCenter, DPoint3dCR topCenter, DVec3dCR vectorX, DVec3dCR vectorY, double baseX, double baseY, double topX, double topY, bool capped)
 Initialize box detail fields specifying top/base centers instead of origins... More...
 
static DgnBoxDetail InitFromCenterAndSize (DPoint3dCR center, DPoint3dCR size, bool capped)
 Initialize box detail fields from center and size. More...
 

Public Attributes

DPoint3d m_baseOrigin
 
DPoint3d m_topOrigin
 
DVec3d m_vectorX
 
DVec3d m_vectorY
 
double m_baseX
 
double m_baseY
 
double m_topX
 
double m_topY
 
bool m_capped
 

Detailed Description

A DgnBoxDetail represents a boxlike surface with two paralell rectangular faces (bottom and top) and ruled side surfaces.

Constructor & Destructor Documentation

DgnBoxDetail ( DPoint3dCR  baseOrigin,
DPoint3dCR  topOrigin,
DVec3dCR  vectorX,
DVec3dCR  vectorY,
double  baseX,
double  baseY,
double  topX,
double  topY,
bool  capped 
)

Detail constructor with complete field list as parameters ...

Parameters
[in]baseOriginorigin of base rectangle
[in]topOriginorigin of Top rectangle
[in]vectorXX vector of base plane
[in]vectorYY vector of base plane
[in]baseXx size at base
[in]baseYy size at base
[in]topXX size at top
[in]topYy size at top
[in]cappedtrue if closed top and bottom.

Default value constructor.

Member Function Documentation

void AddCurveIntersections ( CurveVectorCR  curves,
bvector< CurveLocationDetail > &  curvePoints,
bvector< SolidLocationDetail > &  solidPoints,
MeshAnnotationVector &  messages 
) const

Compute intersections with curves and add to the data array.

Parameters
[in]curves
[in,out]curvePointsgrowing array of curve points.
[in,out]solidPointsgrowing array of solid points.
[in,out]messagesarray of error messages
void AddCurveIntersections ( ICurvePrimitiveCR  curves,
bvector< CurveLocationDetail > &  curvePoints,
bvector< SolidLocationDetail > &  solidPoints,
MeshAnnotationVector &  messages 
) const

Compute intersections with a single curve and add to the data array.

Parameters
[in]curves
[in,out]curvePointsgrowing array of curve points.
[in,out]solidPointsgrowing array of solid points.
[in,out]messagesarray of error messages
void AddRayIntersections ( bvector< SolidLocationDetail > &  pickData,
DRay3dCR  ray,
int  parentId,
double  minParameter 
) const

Compute intersections with a ray and add to the pickData.

Parameters
[in]rayorigin and direction
[in]minParametersmallest parameter of pick. (e.g. 0 for picking along a positive ray from an eyepoint)
[in,out]pickDatagrowing array of picks.
[in]parentIdcaller's id for this solid. Will be placed in each pickData entry has parentId.
ISolidPrimitivePtr Clone ( ) const

Copy to a new (allocated) solid primitive.

bool ClosestPoint ( DPoint3dCR  spacePoint,
SolidLocationDetail pickDetail 
) const
Parameters
[in]spacePointsearch for point close to here and on the solid surface
[out]pickDetailclosest point data.
Returns
false if not supported.
bool ComputeSecondMomentAreaProducts ( TransformR  localToWorld,
DMatrix4dR  localProducts 
) const

Return the various integrated products for area moment calculations.

The primitive is treated as a thin shell.

Parameters
[out]localToWorldtransform from preferred system where the products are most easily computed to world.
[out]localProductsintegrated [xx xy xz x; xy yy yz y; xz yz zz z; x y z 1] dA
Returns
false if unable to compute.
bool ComputeSecondMomentVolumeProducts ( TransformR  localToWorld,
DMatrix4dR  localProducts 
) const

Return the various integrated products for moment calculations.

The primitive is treated as a volume

Parameters
[out]localToWorldtransform from preferred system where the products are most easily computed to world.
[out]localProductsintegrated [xx xy xz x; xy yy yz y; xz yz zz z; x y z 1] dA
Returns
false if unable to compute.
ICurvePrimitivePtr GetConstantUSection ( SolidLocationDetail::FaceIndices const &  indices,
double  fraction 
) const

Copy a section at constant u of a single face to a single ICurvePrimitive.

Parameters
[in]indicesselects face
[in]fractionu fraction for section curve
ICurvePrimitivePtr GetConstantVSection ( SolidLocationDetail::FaceIndices const &  indices,
double  fraction 
) const

Copy a section curve at constant v of a single face to a single ICurvePrimitive.

Parameters
[in]indicesselects face
[in]fractionv fraction for section curve
void GetCorners ( bvector< DPoint3d > &  corners) const

Return 8 corners of the box.

x varies fastest, then y then z.

Parameters
[out]corners8 corner coordinates.
void GetCorners ( DPoint3dP  corners) const

Return 8 corners of the box.

x varies fastest, then y then z.

Parameters
[out]corners8 corner coordinates. Caller must allocate to size 8 or mre.
IGeometryPtr GetFace ( SolidLocationDetail::FaceIndices const &  indices) const

Return a single face of the solid primitive.

Parameters
indicesinteger selectors for the face.
void GetFaceIndices ( bvector< SolidLocationDetail::FaceIndices > &  indices) const

Fill a list of all possible face indices.

Parameters
[out]indicesarray of selectors for the faces.
void GetNonUniformTransform ( TransformR  localToWorld,
double &  ax,
double &  ay,
double &  bx,
double &  by 
) const

Return (nonuniform) placement and rectangle sizes. (ax,ay) rectangle is on z=0. (bx,by) is on z=1;.

bool GetRange ( DRange3dR  range) const

Return range.

bool GetRange ( DRange3dR  range,
TransformCR  transform 
) const

Return range when transformed.

static DgnBoxDetail InitFromCenterAndSize ( DPoint3dCR  center,
DPoint3dCR  size,
bool  capped 
)
static

Initialize box detail fields from center and size.

Parameters
[in]centercenter of box in XYZ
[in]sizetotal range in XYZ
[in]cappedtrue if closed top and bottom.
static DgnBoxDetail InitFromCenters ( DPoint3dCR  baseCenter,
DPoint3dCR  topCenter,
DVec3dCR  vectorX,
DVec3dCR  vectorY,
double  baseX,
double  baseY,
double  topX,
double  topY,
bool  capped 
)
static

Initialize box detail fields specifying top/base centers instead of origins...

Parameters
[in]baseCentercenter of base rectangle
[in]topCentercenter of Top rectangle
[in]vectorXX vector of base plane
[in]vectorYY vector of base plane
[in]baseXx size at base
[in]baseYy size at base
[in]topXX size at top
[in]topYy size at top
[in]cappedtrue if closed top and bottom.
bool IsBlock ( DPoint3dR  origin,
RotMatrixR  unitAxes,
DVec3dR  localDiagonal,
double  originXFraction,
double  originYFraction,
double  originZFraction 
) const

Test if the DgnBox is really a box (aka slab).

Return orientation and size data, using caller-specifed fractional coordinates to indicate position of origin in reference system.

Parameters
[out]originlocal coordinates origin
[out]unitAxestransform (with orthogonal axes)
[out]localDiagonalthe box edge lengths.
[in]originXFractionfractional position of the unitAxes origin along the x edge.
[in]originYFractionfractional position of the unitAxes origin along the y edge.
[in]originZFractionfractional position of the unitAxes origin along the z edge.
void IsCenteredBox ( Transform  centeredFrame,
DVec3dR  diagonal 
) const

Test if the box is an orthogonal box.

Parameters
[out]centeredFramecoordinate axes (normalized) at the center of the box.
[out]diagonaldiagonal vector.
bool IsClosedVolume ( ) const

Test if this is a closed volume.

bool IsSameStructure ( ISolidPrimitiveCR  other) const

Test for same type and structure (but no coordinate comparison)

bool IsSameStructureAndGeometry ( ISolidPrimitiveCR  other,
double  tolerance 
) const

Test for same type, structure and coordinates.

double ParameterizationSign ( ) const

Return +1 or -1 that matches the volume sign after integration over the parameter space.

bool TransformInPlace ( TransformCR  transform)

Transform in place.

bool TryGetConstructiveFrame ( TransformR  localToWorld,
TransformR  worldToLocal 
) const

Return coordinate system with 1) XY in box base plane, origin at nominal lower left.

2) Z perpendicular

bool TryGetMaxUVLength ( SolidLocationDetail::FaceIndices const &  indices,
DVec2dR  uvLength 
) const

Compute the lengths of the longest u and v direction sections of a single face of a solid primitive.

Parameters
[in]indicesselects face.
[in]uvLengthsizes in u, v directions.
bool TryUVFractionToXYZ ( SolidLocationDetail::FaceIndices const &  faceIndices,
double  uFraction,
double  vFraction,
DPoint3dR  xyz,
DVec3dR  dXdu,
DVec3dR  dXdv 
) const

convert u,v fraction on specified face to xyz and derivatives.

Parameters
[in]faceIndicesface selection indices
[in]uFractionfractional coordinate in u direction.
[in]vFractionfractional coordinate in v direction.
[out]xyzpoint on face.
[out]dXduderivative of face point wrt uFraction.
[out]dXdvderivative of face point wrt vFraction.

Member Data Documentation

DPoint3d m_baseOrigin
double m_baseX
double m_baseY
bool m_capped
DPoint3d m_topOrigin
double m_topX
double m_topY
DVec3d m_vectorX
DVec3d m_vectorY

The documentation for this struct was generated from the following file:

Copyright © 2017 Bentley Systems, Incorporated. All rights reserved.