You are currently reviewing an older revision of this page.
We will now look at general complex structures and evaluate when these examples will initially serve cells. Cells are type 2 elements and normally have a name that can be identified similar to how it was with node numbers and text nodes.
There are, however, cells with no name that can be elements grouped in with the "Create Group" command.A first example of this should be a listing of all cells with the nubmer of sub-elements contained in them. For this, I will use the .GetSubElements instruction by converting this selection into an array to directly read out the number of elements inside.
I will be evaluating these two visually identical cells. The left cell, however, has been created as a group of individual elements, while the right cell has been placed as a cell from the cell library.
Here is a possible approach, saving the output to a file:
Sub elementinfo() Dim ele As Element Dim ee As ElementEnumerator Dim startpoint, endpoint As Point3d Dim header, Line As String Dim oL() As Element Dim Cellname As String Dim file As String If ActiveWorkspace.IsConfigurationVariableDefined("MyOutputFile") Then file = ActiveWorkspace.ConfigurationVariableValue("MyOutputFile") Else MsgBox "The variable MyOutputFile is not defined. Stopped Processing", vbCritical Exit Sub End If Open file For Append As #1 Set ee = ActiveModelReference.GraphicalElementCache.Scan() Do While ee.MoveNext Set ele = ee.Current If ele.IsCellElement Then oL = ele.AsCellElement.GetSubElements.BuildArrayFromContents Cellname = ele.AsCellElement.Name If Len(Zellname) = 0 Then Zellname = "Ohne Namen" line = "Cell < " & Cellname & "> mit " & UBound(oL) - LBound(oL) + 1 & " Element" Print #1, line End If Loop Close #1 End Sub
With the two elements from the previous screenshot, I got this as the output:
The result so far shows that in addition to the 3 text elements, there is a circle and a rectangle. Note that here the number of nested elements would be 3 because the 3 texts were summarized into 1 text node. Visually, this is indistinguishable except when using the "Analayze Element" Keyin.
The Keying "Analyze Element" shows many details that will help us to use the correct procedure for an evaluation in the current context. In the above routine, I used this command to read for the first time:
oL = ele.AsCellElement.GetSubElements.BuildArrayFromContents
After applying the .GetSubElements even a transformation of the selection is set in an array. This will allow me to immediately get the number of items read by the term "ubound (OL) - lbound (OL) + 1".
Ubound represents upper boundary and Lbound represents lower boundary for the filled array elements.
As a next step, we will list the individual elements of each cell in the output, which can be extended as shown below:
Sub elementinfo() Dim ele As Element Dim ee As ElementEnumerator Dim startpoint, endpoint As Point3d Dim header, line As String Dim oL() As Element Dim Cellname As String Dim file As String If ActiveWorkspace.IsConfigurationVariableDefined("MyOutputFile") Then file = ActiveWorkspace.ConfigurationVariableValue("MyOutputFile") Else MsgBox "The variable MyOutputFile is not defined. Stopped Processing", vbCritical Exit Sub End If Open file For Append As #1 Set ee = ActiveModelReference.GraphicalElementCache.Scan() Do While ee.MoveNext Set ele = ee.Current If ele.IsCellElement Then oL = ele.AsCellElement.GetSubElements.BuildArrayFromContents Cellname = ele.AsCellElement.Name If Len(Cellname) = 0 Then Cellname = "Nameless" line = "Cell < " & Cellname & "> with " & UBound(oL) - LBound(oL) + 1 & " Element" Print #1, line For i = LBound(oL) To UBound(oL) line = TypeName(oL(i)) Print #1, line Next End If Loop Close #1 End Sub
This example outputs the following into the .csv file:
In this example, I have now have the name of the type instead of the type number by using the TypeName function.As already previously mentioned, the circle is just a special example of an ellipse, which explains the indication of the EllipseElement.If you want to distinguish here specifically, you can use the .PrimaryRadius and Secondary radius to read and compare the data, which should be identical in both circles.
Many data points of this type is sufficient, but we cannot be sure whether the examined cells are nested or not. Basically, there are no restrictions in nesting, so we have to use a new way of detecting nested cells that contain nested cells. To do this, we will be using recursion for reading data, but we will wait until the next section to do this.
<< RETURN TO PART 6 << >> CONTINUE ON TO PART 8 >>