Object Hierarchy | Related C++ Class: SubComponent
SubComponent
v2.0
Provides access to sub-elements of an X3DObject's Geometry.
The most common uses for the SubComponent object include:
- Accessing the components that are selected (see CollectionItem.SubComponent and
Selection.Item)
- Accessing a geometry-specific collection of components on an object (see SubComponent.ComponentCollection)
- Dynamically working with a subset of components (see SubComponent.AddElement and
SubComponent.RemoveElement)
Application | Categories | ClusterType | ComponentCollection |
ElementArray | FullName | Help | Name |
NestedObjects | Origin | OriginPath | Parent |
Parent3DObject | Type | Type | |
/* This example demonstrates how to determine which edges are selected in the UI by using the SubComponent object via the Selection */ NewScene( null, false ); // Setup: create a polygon mesh and select some edges on it var disc = Application.ActiveSceneRoot.AddGeometry( "Disc", "MeshSurface" ); Selection.Clear(); Selection.SetAsText( disc.Name + ".edge[113,115,117,119,121]" ); // When components are selected, the first member of the Selection // is returned as a CollectionItem which can then be converted to a // SubComponent object. From there, the ComponentCollection property // converts it to the proper collection type (in this case an EdgeCollection) var selected = Selection(0).SubComponent.ComponentCollection; for (var i=0; i<selected.Count; i++) { var sel = selected(i); Application.LogMessage( "edge[" + sel.Index + "] is selected." ); } // Expected results: //INFO : edge[113] is selected. //INFO : edge[115] is selected. //INFO : edge[117] is selected. //INFO : edge[119] is selected. //INFO : edge[121] is selected. |
# # This example demonstrates how to access a NURBS-specific property # on a NurbsSurfaceMesh. First it starts out getting the generic # Points collection. From the PointCollection it creates a SubComponent. # From the SubComponent, it gets the NURBS-specific ControlPointCollection # app = Application app.NewScene( "", 0 ) # Setup: create a NURBS mesh and get its point collection grid = app.ActiveSceneRoot.AddGeometry( "Grid", "NurbsSurface" ) pnts = grid.ActivePrimitive.Geometry.Points # Convert it to SubComponent and just for fun, consider only ten points # chosen at random subcmp = pnts.SubComponent subset = [13, 92, 24, 65, 11, 2, 4, 64, 100, 111] subcmp.ElementArray = subset # Now convert the SubComponent to a ControlPointCollection using the # SubComponent.ComponentCollection property and then loop through the # array, checking to see if we have any boundaries for ctrlpnt in subcmp.ComponentCollection : msg = "CtrlPnt[" + str(ctrlpnt.Index) + "]" if ctrlpnt.IsBoundary : msg += " on the NurbsSurface and is a boundary." else : msg += " on the NurbsSurface and is NOT a boundary." app.LogMessage( msg ) # Expected results: #INFO : CtrlPnt[13] on the NurbsSurface and is NOT a boundary. #INFO : CtrlPnt[92] on the NurbsSurface and is NOT a boundary. #INFO : CtrlPnt[24] on the NurbsSurface and is NOT a boundary. #INFO : CtrlPnt[65] on the NurbsSurface and is a boundary. #INFO : CtrlPnt[11] on the NurbsSurface and is a boundary. #INFO : CtrlPnt[2] on the NurbsSurface and is a boundary. #INFO : CtrlPnt[4] on the NurbsSurface and is a boundary. #INFO : CtrlPnt[64] on the NurbsSurface and is NOT a boundary. #INFO : CtrlPnt[100] on the NurbsSurface and is NOT a boundary. #INFO : CtrlPnt[111] on the NurbsSurface and is a boundary. |
// Create a sample scene and select four points on a grid var oGrid = ActiveSceneRoot.AddGeometry( "Grid", "NurbsSurface" ) ; SelectObj( oGrid ) ; ActivateVertexSelTool(); AddToSelection(oGrid.Name+".pnt[(0,0),(1,0),(2,0),(3,0)]", null, true); // Print out information that is available from the OM Application.LogMessage( ClassName( Selection(0) ) ) ; var oSubComponent = Selection(0).SubComponent ; Application.LogMessage( oSubComponent.Parent3DObject ) ; Application.LogMessage( oSubComponent.Type ) ; Application.LogMessage( ClassName( oSubComponent.ComponentCollection ) ) ; Application.LogMessage( oSubComponent.ComponentCollection.Count ) ; // Result of running this script: //INFO : "CollectionItem" //INFO : "grid" //INFO : "pntSubComponent" //INFO : "PointCollection" //INFO : "4" |