Object Hierarchy | Related C++ Class: Geometry





The Geometry object provides access to the X3DObject's Geometry. The geometry is exposed via the Primitive object. There are 3 different types of geometry supported: PolygonMesh, NurbsSurfaceMesh and NurbsCurveList.

Geometry is made up of the following components:

- Facet: Maps to a PolygonFace on a polygon mesh and a NurbsSurface. On a NURBS surface mesh, there is no direct mapping to NURBS curve list.

- Segment: Maps to a Edge on a polygon mesh. There is no direct mapping for NURBS surface mesh and NURBS curve list.

- Point: Maps to a Vertex on a polygon mesh and a ControlPoint on a NURBS surface mesh and NURBS curve list.

- Sample: Maps to a PolygonNode on a polygon mesh and a NurbsSample on a NURBS surface mesh and NURBS curve list.

An object may have multiple Operator objects in its ConstructionHistory that change the original geometry. For example, an Envelope or Shape Combiner operator will deform the the geometry. In order to access the geometry without the influence of the operators, use the DeactivateAbove command to temporarily disable parts of the operator stack.

Similarily, a geometry may change over time, for example because of an animated deformation. The time argument to Primitive.Geometry is useful for working with such animated shapes.

For setting points within the context of a scripted operator, use the PointCollection.PositionArray property. If not used in a scripted operator, you must either call FreezeObj to remove all operators or use the Translate command.

Geometry has several methods related to PointLocatorData. A point locator is a geometric surface coordinate, and represents a precise location on a geometry. For more information about point locators and Geometry's related methods, see PointLocatorData.


AddCluster AddEmptyCluster AddICEAttribute CreateSubComponent
EvaluateClusterProperty operator EvaluateNormals operator EvaluatePositions operator GetBoundingBox
GetBoundingCapsule GetBoundingSphere GetClosestLocations operator GetClosestLocationsWithinRadius operator
GetICEAttributeFromName GetRaycastIntersections operator GetSurfacePointLocatorsFromPoints operator IsClassOf operator
IsEqualTo operator RemoveICEAttribute SaveShapeKey SetupPointLocatorQueries operator


Application Cache operator Categories Clusters
Facets operator FullName operator Help ICEAttributes
Name operator NestedObjects Origin OriginPath
Parent Points operator Samples Segments operator
Triangles Type operator    


VBScript Example

'VBScript example demonstrating how to access the base geometry of a grid
'that is being deformed by an envelope.  To do this we temporarily
'disable the envelope using the DeactivateAbove command
newscene ,false
' Create the Skeleton
Dim oRoot, aRootPos, aEffPos1, aEffPos2, oChain1, oChain2
Set oRoot = Application.ActiveProject.ActiveScene.Root
aRootPos = Array(-4, 0, 4)
aEffPos1 = Array(0,0,0)
aEffPos2 = Array(2,0,-2)
aEffPos3 = Array(4,0,-4)
Set oChainRoot = oRoot.Add2DChain( aRootPos, aEffPos1, , siViewTop )
oChainRoot.AddBone( aEffPos2 )
oChainRoot.AddBone( aEffPos3 )
set oEff = oChainRoot.Children("eff")
' Create the Envelope
Dim oGrid, oGeometry
Set oGrid = oRoot.AddGeometry( "grid", "MeshSurface")
oGrid.Parameters("subdivu").Value = 3
oGrid.Parameters("subdivv").Value = 3
' Apply the Envelope to the Skeleton
Dim oEnvelope
Set oEnvelope = oGrid.ApplyEnvelope( oChainRoot, siBranch, siBranch )
' Move the Effector to crumple up the grid
Translate oEff, -8,0,0,siRelative, siLocal, siObj, siXYZ
' If we access the points now via the object model we get the position with the
' deformation taken into account
set oPoints = oGrid.ActivePrimitive.Geometry.Points
set oPos = oPoints.Item(12).Position
Application.LogMessage "Point 12 is at " & Round( oPos.X, 1 ) & "," & _
        Round( oPos.Y, 1 ) & "," & Round( oPos.Z, 1 )
' Disable the operator which connects the skeleton and grid
DeactivateAbove oGrid.ActivePrimitive & ".envelopop", true
' Now when we retrieve the points we get the original geometry
set oPoints = oGrid.ActivePrimitive.Geometry.Points
set oPos = oPoints.Item(12).Position
Application.LogMessage "Point 12 is at " & Round( oPos.X, 1 ) & "," & _
        Round( oPos.Y, 1 ) & "," & Round( oPos.Z, 1 )
' Restore the affect of the envelope on the grid
DeactivateAbove oGrid.ActivePrimitive & ".envelopop", false

See Also

Primitive.Geometry Cluster ClusterProperty Facet Segment Point NurbsSurfaceMesh NurbsSurface PolygonMesh PolygonFace Edge Vertex