-
Notifications
You must be signed in to change notification settings - Fork 1
/
ATK_CompareRTD_3Scrapers.bas
1011 lines (767 loc) · 37.8 KB
/
ATK_CompareRTD_3Scrapers.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Attribute VB_Name = "ATK_CompareRTD_3Scrapers"
Option Explicit
Function get_Project_information(proj As RobotProject) As Dictionary
Dim objNodeServer As RobotNodeServer
Dim objBarServer As RobotBarServer
Dim objPanelServer As RobotObjObjectServer
Dim objLabelServer As RobotLabelServer
Dim objCaseServer As RobotCaseServer
Dim nodeData As Dictionary
Dim barData As Dictionary
Dim panelData As Dictionary
Dim supportData As Dictionary
Dim materialData As Dictionary
Dim thicknessData As Dictionary
Dim barReleaseData As Dictionary
Dim loadsAndCasesData() As Variant
Dim Selection As RobotSelection
Dim panel_col As RobotObjObjectCollection
Set objNodeServer = proj.Structure.Nodes
Set objBarServer = proj.Structure.Bars
Set objPanelServer = proj.Structure.Objects
Set objLabelServer = proj.Structure.labels
Set objCaseServer = proj.Structure.cases
Set get_Project_information = New Dictionary
'delete meshes
update_progress_loop "Deleting meshes", 0, 1
proj.Structure.Objects.Mesh.Remove
update_progress_loop "Deleting meshes", 1, 1
'get node information on all objects in server
Set nodeData = get_node_information(objNodeServer.GetAll())
'get bar information on all objects in server
Set barData = get_bar_information(objBarServer.GetAll())
'get panel information on all objects in server
'panels are grouped with other objects in panelServer so panels first must be selected using the selection server.
Set Selection = proj.Structure.Selections.Create(I_OT_PANEL)
Selection.FromText "all"
Set panelData = get_panel_information(objPanelServer.GetMany(Selection))
'get suport information
Set supportData = get_support_information(objLabelServer.GetMany(I_LT_SUPPORT))
'get material data
Set materialData = get_material_information(objLabelServer.GetMany(I_LT_MATERIAL))
'get thickness data
'labelserver.getmany(tincknesses) returns 0 so _
'use labelServer.getavailablenames first and create a collection manually.
'use getLabelColl function in this module to create a collection and pass to the thickness info scraper
Set thicknessData = get_thickness_information(getLabelColl(I_LT_PANEL_THICKNESS, objLabelServer))
'get release data
Set barReleaseData = get_barRelease_information(objLabelServer.GetMany(I_LT_BAR_RELEASE))
'get cases and load data
Set Selection = proj.Structure.Selections.CreatePredefined(I_PS_CASE_SIMPLE_CASES)
loadsAndCasesData = get_loadsAndCases_information(objCaseServer.GetMany(Selection))
'construct the project data dictionary
get_Project_information.Add "NODES", nodeData
get_Project_information.Add "BARS", barData
get_Project_information.Add "PANELS", panelData
get_Project_information.Add "SUPPORTS", supportData
get_Project_information.Add "MATERIALS", materialData
get_Project_information.Add "THICKNESSES", thicknessData
get_Project_information.Add "BAR_RELEASES", barReleaseData
get_Project_information.Add "S_CASES", loadsAndCasesData(0)
get_Project_information.Add "LOADS", loadsAndCasesData(1)
End Function
Function getLabelColl(labelType As IRobotLabelType, labelServer As RobotLabelServer) As Collection
'creates collection of labels based on available labels
'used when labelserver.getmany(labeltype) returns 0
'for some reason, this happens for thicknesses so fist one must loop through available thickness labels _
'and request them individually??!!
'I swear im loosing patience with ROBOT....
Set getLabelColl = New Collection
Dim availThicknesses As RobotNamesArray
Dim thickness As Object
Dim i As Integer
Set availThicknesses = labelServer.GetAvailableNames(labelType)
For i = 1 To availThicknesses.Count
Set thickness = labelServer.Get(labelType, availThicknesses.Get(i))
If Not thickness Is Nothing Then
getLabelColl.Add thickness
End If
Next i
End Function
Function get_node_information(node_objects As IRobotCollection) As Dictionary
'dAllNodeLabelProperties were removed - _
'Node DOF are restrained by applying labels; _
'It is therefore the support label not in the node object which has the restraint info. _
'There is no point for checking restraints for each node, _
'and its more robust to loop throgh the support server to check the label definition _
'Original script used On error resume next to filter if a support has been already mapped _
'Again, this is not robust code and would fail in exceptions. This step is unneccesary if label definition_
'is checked for differences instead of each node.
Set get_node_information = New Dictionary
Dim vNode_properties(4) As Variant
Dim node As RobotNode
Dim i As Long
Dim StartTime2 As Double
StartTime2 = Timer
Debug.Print "node iteration starts at" & Str(StartTime2)
'loop over all nodes in the collection
For i = 1 To node_objects.Count
update_progress_loop "Scraping node", i, node_objects.Count
'get the node object
Set node = node_objects.Get(i)
'get properties node number
vNode_properties(0) = node.Number
'get coordinates (x, y, z)
vNode_properties(1) = Round(node.x, 3)
vNode_properties(2) = Round(node.Y, 3)
vNode_properties(3) = Round(node.Z, 3)
'If node has a label corresponding to a support then:
'get the label object to get the support data object and save the name
If node.HasLabel(I_LT_SUPPORT) Then
vNode_properties(4) = node.GetLabel(I_LT_SUPPORT).name
Else
'is node is not supported collect empty string
vNode_properties(4) = ""
End If
'now that node information is collected, _
'add node information to respective dictionaries
get_node_information.Add vNode_properties(0), vNode_properties
'and move onto the next node
Next i
'return colected information back to sender
Debug.Print "all nodes completed in" & Str(Round(Timer - StartTime2, 2))
update_progress_loop " ", 1, 1, True
End Function
Function get_bar_information(bar_objects As IRobotCollection) As Dictionary
'tested using WITH statements to substitute bar.property or StartNode.property but showed LOWERED performance
Set get_bar_information = New Dictionary
Dim vbar_properties(7) As Variant
Dim bar As RobotBar
Dim startTime As Double
Dim StartTime1 As Double
Dim StartTime2 As Double
Dim SecondsElapsed As Double
Dim i As Long
StartTime2 = Timer
Debug.Print "bar iteration starts at" & Str(StartTime2)
'loop over all nodes in the collection
For i = 1 To bar_objects.Count
update_progress_loop "Scraping bar", i, bar_objects.Count
'get the bar object
Set bar = bar_objects.Get(i)
'get bar number
vbar_properties(0) = bar.Number
'get section
'no real performance improvement with removing haslabel method
'seems majority of itme is spent on the getlabel data line
' On Error Resume Next
' vbar_properties(1) = bar.GetLabel(I_LT_BAR_SECTION).Data.name
' On Error GoTo 0
If bar.HasLabel(I_LT_BAR_SECTION) = True Then
vbar_properties(1) = bar.GetLabel(I_LT_BAR_SECTION).Data.name
Else
vbar_properties(1) = ""
End If
'get release label name
If bar.HasLabel(I_LT_BAR_RELEASE) = True Then
Else
vbar_properties(2) = "N/A (Default fixed-fixed)"
End If
'get start nodes
vbar_properties(3) = bar.StartNode
'get end node
vbar_properties(4) = bar.EndNode
'get Length
vbar_properties(5) = Round(bar.Length, 3)
'get Material
If bar.HasLabel(I_LT_MATERIAL) = True Then
vbar_properties(6) = bar.GetLabel(I_LT_MATERIAL).Data.name
Else
vbar_properties(6) = ""
End If
'get Gamma angle
vbar_properties(7) = bar.Gamma
'add array to dictionary
get_bar_information.Add vbar_properties(0), vbar_properties
'and move onto the next bar
Next i
Debug.Print "all bars completed in" & Str(Round(Timer - StartTime2, 2))
'reset progress bar
update_progress_loop " ", 1, 1, True
End Function
Function get_panel_information(panel_objects As RobotObjObjectCollection) As Dictionary
Set get_panel_information = New Dictionary
Dim vPanel_properties(6) As Variant
Dim panel As RobotObjObject
Dim panelPart As IRobotObjPart
Dim panelNodes() As Variant
Dim panelNode As Object
Dim i As Long
Dim j As Long
'loop over all nodes in the collection
For i = 1 To panel_objects.Count
update_progress_loop "Scraping panel", i, panel_objects.Count
'get the panel object
Set panel = panel_objects.Get(i)
'get panel number
vPanel_properties(0) = panel.Number
'get panel thickness
If panel.HasLabel(I_LT_PANEL_THICKNESS) = True Then
vPanel_properties(1) = panel.GetLabel(I_LT_PANEL_THICKNESS).name
Else
vPanel_properties(1) = ""
End If
'get panel point count
Set panelPart = panel.GetPart(1)
vPanel_properties(2) = panelPart.ModelPoints.Count
'create array of point coordinates
ReDim panelNodes(vPanel_properties(2))
For j = 1 To UBound(panelNodes)
Set panelNode = panel.Main.DefPoints.Get(j)
panelNodes(j) = Array(panelNode.x, panelNode.Y, panelNode.Z)
Next j
'add points to array
vPanel_properties(3) = getPanelPerimeter(panelNodes)
'get support label name
If panel.HasLabel(I_LT_EDGE_SUPPORT) = True Then
vPanel_properties(4) = panel.GetLabel(I_LT_EDGE_SUPPORT).name
Else
vPanel_properties(4) = ""
End If
'add array to dictionary
get_panel_information.Add vPanel_properties(0), vPanel_properties
'and move onto the next panel
Next i
'reset progress bar
update_progress_loop " ", 1, 1, True
End Function
Function get_support_information(supports As IRobotCollection) As Dictionary
Set get_support_information = New Dictionary
Dim vSupport_properties(21) As Variant
Dim support As Object
Dim supportData As Object
Dim i As Long
For i = 1 To supports.Count
update_progress_loop "Scraping support", i, supports.Count
Set support = supports.Get(i)
Set supportData = support.Data
'name
vSupport_properties(0) = support.name
'angles
vSupport_properties(1) = supportData.Alpha
vSupport_properties(2) = supportData.Beta
vSupport_properties(3) = supportData.Gamma
'releases
vSupport_properties(4) = supportData.RX
vSupport_properties(5) = supportData.RY
vSupport_properties(6) = supportData.RZ
vSupport_properties(7) = supportData.UX
vSupport_properties(8) = supportData.UY
vSupport_properties(9) = supportData.UZ
'spring stiffnesses
vSupport_properties(10) = supportData.AX
vSupport_properties(11) = supportData.AY
vSupport_properties(12) = supportData.AZ
vSupport_properties(13) = supportData.BX
vSupport_properties(14) = supportData.BY
vSupport_properties(15) = supportData.BZ
vSupport_properties(16) = supportData.HX
vSupport_properties(17) = supportData.HY
vSupport_properties(18) = supportData.HZ
vSupport_properties(19) = supportData.KX
vSupport_properties(20) = supportData.KY
vSupport_properties(21) = supportData.KZ
'add to return dictionary
get_support_information.Add Replace(vSupport_properties(0), " ", "_"), vSupport_properties
Next i
'reset progress bar
update_progress_loop " ", 1, 1, True
End Function
Function get_material_information(materials As IRobotCollection) As Dictionary
Set get_material_information = New Dictionary
Dim vMaterial_properties(20) As Variant
Dim material As Object
Dim materialData As Object
Dim i As Long
For i = 1 To materials.Count
update_progress_loop "Scraping material", i, materials.Count
Set material = materials.Get(i)
Set materialData = material.Data
vMaterial_properties(0) = material.name
vMaterial_properties(1) = materialData.E
vMaterial_properties(2) = materialData.E_5
vMaterial_properties(3) = materialData.E_Trans
vMaterial_properties(4) = materialData.EC_Deformation
vMaterial_properties(5) = materialData.GMean
vMaterial_properties(6) = materialData.Kirchoff
vMaterial_properties(7) = materialData.LX
vMaterial_properties(8) = materialData.NU
vMaterial_properties(9) = materialData.RE
vMaterial_properties(10) = materialData.RE_AxCompr
vMaterial_properties(11) = materialData.RE_AxTens
vMaterial_properties(12) = materialData.RE_Bending
vMaterial_properties(13) = materialData.RE_Shear
vMaterial_properties(14) = materialData.RE_TrCompr
vMaterial_properties(15) = materialData.RE_TrTens
vMaterial_properties(16) = materialData.RO
vMaterial_properties(17) = materialData.RT
vMaterial_properties(18) = materialData.Steel_Thermal
vMaterial_properties(19) = materialData.Timber_Type
vMaterial_properties(20) = materialData.Type
'add to material dictionary; remove any spaces from name and replace them with underscore
get_material_information.Add Replace(vMaterial_properties(0), " ", "_"), vMaterial_properties
Next i
update_progress_loop " ", 1, 1, True
End Function
Function get_thickness_information(thicknesses As Collection) As Dictionary
Set get_thickness_information = New Dictionary
Dim vThickness_properties(9) As Variant
Dim thickness As Object
Dim thicknessData As RobotThicknessData
Dim thicknessDataData As RobotThicknessHomoData
Dim i As Long
For i = 1 To thicknesses.Count
update_progress_loop "Scraping thickness", i, thicknesses.Count
Set thickness = thicknesses(i)
Set thicknessData = thickness.Data
vThickness_properties(0) = thickness.name
vThickness_properties(1) = thicknessData.MaterialName
vThickness_properties(2) = thicknessData.ThicknessType
vThickness_properties(3) = thicknessData.Uplift
If thicknessData.ThicknessType = I_TT_HOMOGENEOUS Then
Set thicknessDataData = thicknessData.Data
vThickness_properties(4) = thicknessDataData.Thick1
vThickness_properties(5) = thicknessDataData.Thick2
vThickness_properties(6) = thicknessDataData.Thick3
vThickness_properties(7) = thicknessDataData.ThickConst
vThickness_properties(8) = thicknessDataData.GetReduction(1#)
vThickness_properties(9) = thicknessDataData.Type
' Might not need it as 0 is default?
' Else
' vThickness_properties(4) = 0
' vThickness_properties(5) = 0
' vThickness_properties(6) = 0
' vThickness_properties(7) = 0
' vThickness_properties(8) = 0
' vThickness_properties(9) = 0
End If
'add to thickness dictionary; remove any spaces from name and replace them with underscore
get_thickness_information.Add Replace(vThickness_properties(0), " ", "_"), vThickness_properties
Next i
update_progress_loop " ", 1, 1, True
End Function
Function get_barRelease_information(barReleases As IRobotCollection) As Dictionary
'tested using WITH statements to substitute bar.property or StartNode.property but showed LOWERED performance
Set get_barRelease_information = New Dictionary
Dim vbarRelease_properties(2) As Variant
Dim barRelease As RobotBarRelease
Dim barReleaseData As RobotBarReleaseData
Dim endRelease As RobotBarEndReleaseData
Dim i As Long
'loop over all nodes in the collection
For i = 1 To barReleases.Count
update_progress_loop "Scraping bar release", i, barReleases.Count
'get the bar object
Set barRelease = barReleases.Get(i)
'get bar number
vbarRelease_properties(0) = barRelease.name
Set barReleaseData = barRelease.Data
Set endRelease = barReleaseData.StartNode
vbarRelease_properties(1) = Array(endRelease.AX, _
endRelease.AY, _
endRelease.AZ, _
endRelease.BX, _
endRelease.BY, _
endRelease.BZ, _
endRelease.HX, _
endRelease.HY, _
endRelease.HZ, _
endRelease.KX, _
endRelease.KY, _
endRelease.KZ, _
endRelease.RX, _
endRelease.RY, _
endRelease.RZ, _
endRelease.UX, _
endRelease.UY, _
endRelease.UZ _
)
Set endRelease = barReleaseData.EndNode
vbarRelease_properties(2) = Array(endRelease.AX, _
endRelease.AY, _
endRelease.AZ, _
endRelease.BX, _
endRelease.BY, _
endRelease.BZ, _
endRelease.HX, _
endRelease.HY, _
endRelease.HZ, _
endRelease.KX, _
endRelease.KY, _
endRelease.KZ, _
endRelease.RX, _
endRelease.RY, _
endRelease.RZ, _
endRelease.UX, _
endRelease.UY, _
endRelease.UZ _
)
'add array to dictionary
get_barRelease_information.Add Replace(vbarRelease_properties(0), " ", "_"), vbarRelease_properties
'and move onto the next bar
Next i
update_progress_loop " ", 1, 1, True
End Function
Function get_loadsAndCases_information(cases As IRobotCaseCollection) As Variant()
'This retursn an Array(simpleCases, loads)(of Dictionary)
'Loads on objects are defined inside each loadcase, so Its quicker to create the loads and loadcase _
'dictionaries at the same time.
Dim simpleCases As Dictionary
Dim simpleCase As RobotSimpleCase
Dim listOfRecords As String ' used to combine load info to save in loadcase data
Dim vCase_properties(6) As Variant
Dim loads As Dictionary
Dim records As RobotLoadRecordMngr
Dim commonRecord As IRobotLoadRecordCommon
Dim record As Object
Dim vRecord_properties(7) As Variant
Dim recordObjects As Object
Dim objList As String
Dim valueList As String
Dim pointCount As Integer
Set simpleCases = New Dictionary
Set loads = New Dictionary
Dim i As Long
Dim j As Long
Dim k As Long
Dim m As Long
Dim n As Long
Dim x As Double
Dim px As Double
Dim py As Double
Dim pz As Double
For i = 1 To cases.Count
update_progress_loop "Scraping Simple Cases", i, cases.Count
Set simpleCase = cases.Get(i)
'case number
vCase_properties(0) = simpleCase.Number
'case label
vCase_properties(1) = simpleCase.label
'case nature
vCase_properties(2) = simpleCase.Nature
'name
vCase_properties(3) = simpleCase.name
'case type
vCase_properties(4) = simpleCase.NatureName
'case analysis type
vCase_properties(5) = simpleCase.AnalizeType
'look at loads which are attached to this loadcase
Set records = simpleCase.records
'get amount of loads in loadcase
vCase_properties(6) = records.Count
'loop through each load in simple case
For j = 1 To records.Count
'get common interface of RobotLoadRecord to access isautogenerated property
Set commonRecord = records.Get(j)
'If autogenerated then skip
If commonRecord.IsAutoGenerated = False Then
'get load record
Set record = records.Get(j)
'unique load number (not visible to user in robot)
vRecord_properties(0) = record.UniqueId
'loadcase no
vRecord_properties(1) = simpleCase.Number
'load index in case
vRecord_properties(2) = j
'type of load like BAR_UNIFORM
vRecord_properties(3) = record.Type
'what type of object this load can be applies like NODE
vRecord_properties(4) = record.ObjectType
'loop through object collection and combine in string (sperated by space)
Set recordObjects = record.Objects
For k = 1 To recordObjects.Count
objList = objList & " " & recordObjects.Get(k)
Next k
'store the string of objects this load is applied to
vRecord_properties(5) = objList
'check if load is empty (not applied to anything)
If objList = "" Then
vRecord_properties(6) = True
Else
vRecord_properties(6) = False
End If
'get load values
'k represents a load value identifier. See p.38 II.1.1.1 of robot API docu
'load value identifiers are ENUM values which correspond to _
'specific load parameters. e.g a bar uniform load record (typical bar udl) _
'can be defined by an enum corresponding to a linear pressure in x, y or z dir. _
'these enums are 0,1,2 respectively. So using getValue(0 or 1 or 2) _
'would return the UDL load value. Its not practical to write code _
'for each type of load (there are 23 loads types) so all ENUMs are checked
If record.Type <> I_LRT_BAR_TRAPEZOIDALE Then
For k = 0 To 15
valueList = valueList & record.GetValue(k) & " "
Next k
'store the vlaues in array
vRecord_properties(7) = Split(valueList, " ")
'if load is trapezoidal, need to check load values at each point created during definition
Else
'count how many points were defined
pointCount = record.pointCount
'add 2p/3p/4p to name
vRecord_properties(4) = vRecord_properties(4) & " (" & pointCount & "p)"
'loop through maximum no of points
For k = 1 To 4
'if iteration is within boudary of the getpoint method then get information
If k <= pointCount Then
record.GetPoint k, px, py, pz, x
'if out of bounds then populate with 0 to keep a uniform format
Else
px = 0
py = 0
pz = 0
x = 0
End If
'combine into a string
valueList = valueList & px & " " & py & " " & pz & " " & x & " "
Next k
'add remaining information to string
For k = 8 To 13
valueList = valueList & record.GetValue(k) & " "
Next k
'store the values in array
vRecord_properties(7) = Split(valueList, " ")
End If
'reset strings
valueList = ""
objList = ""
End If
'add loadRecord to LOADS
loads.Add vRecord_properties(0) & " (" & vRecord_properties(3) & " Load in loadcase " & vRecord_properties(1) & ")", vRecord_properties
Next j
'add simpleCase to S_CASES
simpleCases.Add vCase_properties(0), vCase_properties
Next i
get_loadsAndCases_information = Array(simpleCases, loads)
update_progress_loop " ", 1, 1, True
End Function
Function getPanelPerimeter(points() As Variant) As Double
'calculates perimeter based on point coordinates
Dim Point1 As Variant
Dim Point2 As Variant
Dim Length As Double
Dim i As Integer
For i = 1 To UBound(points) - 1
Point1 = points(i)
Point2 = points(i + 1)
Length = Length + ((Point1(0) - Point2(0)) ^ 2 + (Point1(1) - Point2(1)) ^ 2 + (Point1(2) - Point2(2)) ^ 2) ^ (1 / 2)
Next i
getPanelPerimeter = Length
End Function
Function getReleaseName(index As Integer) As String
Dim labels() As String
labels = Array(AX, AY, AZ, BX, BY, BZ, HX, HY, HZ, KX, KY, KZ, RX, RY, RZ, UX, UY, UZ)
getReleaseName = labels(i)
'Select CAse
'Case 1
' getReleaseName = "AX"
'Case 2
' getReleaseName = "AY"
'Case 3
' getReleaseName = "AZ"
'Case 4
' getReleaseName = "BX"
'Case 5
' getReleaseName = "BY"
'Case 6
' getReleaseName = "BZ"
'Case 7
' getReleaseName = "HX"
'Case 8
' getReleaseName = "HY"
'Case 9
' getReleaseName = "HZ"
'Case 10
' getReleaseName = "KX"
'Case 11
' getReleaseName = "KY"
'Case 12
' getReleaseName = "KZ"
'Case 13
' getReleaseName = "RX"
'Case 14
' getReleaseName = "RY"
'Case 15
' getReleaseName = "RZ"
'Case 16
' getReleaseName = "UX"
'Case 17
' getReleaseName = "UY"
'Case 18
' getReleaseName = "UZ"
End Function
Function getLoadTypeName(ByVal Rtype As Integer) As String
Dim LType As String
Select Case Rtype
Case I_LRT_BAR_UNIFORM
LType = "Uniform Load"
Case I_LRT_NODE_FORCE
LType = "Nodal Force"
Case I_LRT_BAR_TRAPEZOIDALE
LType = "Trapezoidal load"
Case I_LRT_BAR_THERMAL
LType = "Thermal load"
Case I_LRT_BAR_FORCE_CONCENTRATED
LType = "Bar force"
Case I_LRT_NODE_DISPLACEMENT
LType = "Imp displacement"
Case I_LRT_NODE_VELOCITY
LType = "Imp velocity"
Case I_LRT_NODE_ACCELERATION
LType = "Imp acceleration"
Case I_LRT_NODE_FORCE_IN_POINT
LType = "(FE) Force at a point"
Case I_LRT_BAR_DILATATION
LType = "Dilatation"
Case I_LRT_PRESSURE
LType = "(FE) Hydrostatic pressure"
Case I_LRT_UNIFORM
LType = "(FE) Uniform"
Case I_LRT_LINEAR_ON_EDGES
LType = "(FE) Linear on edges"
Case I_LRT_DEAD
LType = "Self-weight"
Case I_LRT_BAR_MOMENT_DISTRIBUTED
LType = "Uniform moment"
Case I_LRT_IN_CONTOUR
LType = "(FE) Planar on contour"
Case I_LRT_THERMAL_IN_3_POINTS
LType = "(FE) Thermal load 3p"
Case I_LRT_LINEAR_3D
LType = "(FE) Linear 2p (3D)"
Case Is = I_LRT_IN_3_POINTS
LType = "(FE) Planar"
End Select
getLoadTypeName = LType
End Function
Function getLoadValueInfo(ByVal loadType As Long, ByVal index As Integer) As Variant
Dim valueNames() As Variant
Dim valueBools() As Variant
Select Case loadType
Case I_LRT_BAR_UNIFORM
valueNames = Array("PX", "PY", "PZ", "", "", _
"", "", "", "Alpha", "Beta", _
"Gamma", "Load coordinate system", "Projection option", "Load position")
ReDim valueBools(UBound(valueNames))
valueBools(11) = Array("Global", "Local")
valueBools(12) = Array("Disabled", "Enabled")
valueBools(13) = Array("Absolute", "Relative")
Case I_LRT_NODE_FORCE
valueNames = Array("FX", "FY", "FZ", "MX", "MY", _
"MZ", "", "", "Alpha", "Beta", _
"Gamma")
ReDim valueBools(UBound(valueNames))
Case I_LRT_BAR_TRAPEZOIDALE Or I_LRT_BAR_TRAPEZOIDALE_MASS
valueNames = Array("PX1", "PY1", "PZ1", "X1", "PX2", "PY2", "PZ2", "X2", _
"PX3", "PY3", "PZ3", "X3", "PX4", "PY4", "PZ4", "X4", _
"Alpha", "Beta", "Gamma", _
"Load coordinate system", "Projection option", "Load position")
ReDim valueBools(UBound(valueNames))
valueBools(20) = Array("Global", "Local")
valueBools(21) = Array("Disabled", "Enabled")
valueBools(22) = Array("Absolute", "Relative")
Case I_LRT_BAR_THERMAL
valueNames = Array("TX", "TY", "TZ", "", "", _
"", "", "", "", "", _
"", "", "", "", "", _
"")
ReDim valueBools(UBound(valueNames))
Case I_LRT_BAR_FORCE_CONCENTRATED Or I_LRT_BAR_FORCE_CONCENTRATED_MASS
valueNames = Array("FX", "FY", "FZ", "CX", "CY", _
"CZ", "X", "", "Alpha", "Beta", _
"Gamma", "Load Coordinate system", "Applied to Node", "Load Position", "", _
"")
ReDim valueBools(UBound(valueNames))
valueBools(11) = Array("Global", "Local")
valueBools(13) = Array("Not on node", "On a Node")
valueBools(13) = Array("Absolute", "Relative")
Case I_LRT_NODE_DISPLACEMENT
valueNames = Array("FX", "FY", "FZ", "MX", "MY", _
"MZ")
ReDim valueBools(UBound(valueNames))
Case I_LRT_NODE_VELOCITY
valueNames = Array("UX", "UY", "UZ", "", "", _
"", "", "", "Alpha", "Beta", _
"Gamma", "", "", "", "", _
"")
ReDim valueBools(UBound(valueNames))
Case I_LRT_NODE_ACCELERATION
valueNames = Array("UX", "UY", "UZ", "", "", _
"", "", "", "Alpha", "Beta", _
"Gamma", "", "", "", "", _
"")
ReDim valueBools(UBound(valueNames))
Case I_LRT_NODE_FORCE_IN_POINT
valueNames = Array("FX", "FY", "FZ", "MX", "MY", _
"MZ", "", "", "Alpha", "Beta", _
"Gamma", "X", "Y", "Z", "", _
"")
ReDim valueBools(UBound(valueNames))
Case I_LRT_BAR_DILATATION
valueNames = Array("UL", "", "", "", "", _
"", "", "", "", "", _
"", "", "", "Load Position", "", _
"")
ReDim valueBools(UBound(valueNames))
valueBools(13) = Array("Absolute", "Relative")
Case I_LRT_PRESSURE
valueNames = Array("P", "RO", "H", "", "", _
"", "Direction")
ReDim valueBools(UBound(valueNames))
valueBools(6) = Array("-X", "-Y", "-Z", "X", "Y", "Z")
Case I_LRT_UNIFORM
valueNames = Array("PX", "PY", "PZ", "", "", _
"", "", "", "", "", _
"", "Load Coordinate system", "Projection option")
ReDim valueBools(UBound(valueNames))
valueBools(11) = Array("Global", "Local")
valueBools(12) = Array("Disabled", "Enabled")
Case I_LRT_LINEAR_ON_EDGES
valueNames = Array("(FE) Linear on edges", "")
Case I_LRT_DEAD
valueNames = Array("X Direction", "Y Direction", "Z Direction", "Factor", "", _
"", "", "", "", "", _
"", "", "", "", "", "Extent")
ReDim valueBools(UBound(valueNames))
valueBools(11) = Array("Global", "Local")
valueBools(12) = Array("Disabled", "Enabled")
valueBools(13) = Array("Absolute", "Relative")
valueBools(15) = Array("Part of Structure", "Whole Structure")
Case I_LRT_BAR_MOMENT_DISTRIBUTED
valueNames = Array("MX", "MY", "MZ", "", "", _
"", "", "", "", "", _
"", "Load Coordinate System", "", "", "", _
"")
ReDim valueBools(UBound(valueNames))
valueBools(11) = Array("Global", "Local")
Case I_LRT_IN_CONTOUR
valueNames = Array("PX1", "PY1", "PZ1", "PX2", "PY2", _
"PZ2", "PX3", "PY3", "PZ3", "", _
"", "", "Projection option", "NPoints", "", _
"Load Coordinate system")
ReDim valueBools(UBound(valueNames))
valueBools(12) = Array("Disabled", "Enabled")
valueBools(15) = Array("Global", "Local")
Case I_LRT_THERMAL_IN_3_POINTS
valueNames = Array("TX1", "", "TZ1", "TX2", "", "TZ2", "TX3", _
"", "TZ3", "", "", "", "", _
"", "NPoints")
ReDim valueBools(UBound(valueNames))
Case I_LRT_LINEAR_3D
valueNames = Array("PX1", "PY1", "PZ1", "MX1", "MY1", _
"MZ1", "PX2", "PY2", "PZ2", "MX2", _
"MY2", "MZ2", "", "Load Coordinate system", "", _
"Gamma")
ReDim valueBools(UBound(valueNames))
valueBools(13) = Array("Global", "Local")
Case Is = I_LRT_IN_3_POINTS
valueNames = Array("PX1", "PY1", "PZ1", "PX2", "PY2", _
"PZ2", "PX3", "PY3", "PZ3", "N1", _
"N2", "N3", "Projection option", "Load Coordinate system", "", _