Object Hierarchy | Related C++ Class: Geometry
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.
Application | Cache | Categories | Clusters |
Facets | FullName | Help | ICEAttributes |
Name | NestedObjects | Origin | OriginPath |
Parent | Points | Samples | Segments |
Triangles | Type | ||
'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 |
Primitive.Geometry Cluster ClusterProperty Facet Segment Point NurbsSurfaceMesh NurbsSurface PolygonMesh PolygonFace Edge Vertex