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 |