initial version of the cad coordinates extraction and scene generation in OIP

This commit is contained in:
guga kakhadze 2025-12-29 14:51:31 +04:00
commit f5fae7102a
5 changed files with 1223 additions and 0 deletions

59
conveyors.csv Normal file
View File

@ -0,0 +1,59 @@
conveyor_key,tpe_count,vfd_count,start_x,start_y,end_x,end_y
PS1_2,2,1,3182.112871,1751.627960,3307.631353,1679.668896
PS1_4,2,1,3377.926229,1655.901734,3931.089961,1657.733689
PS1_5,1,1,3931.089961,1657.733689,4262.417377,1656.646266
PS2_2,2,1,3099.843745,2245.419901,3140.391285,2223.245100
PS2_3,1,1,3140.391285,2223.245100,3588.721702,1959.931507
PS2_5,2,1,3660.544200,1941.885284,4197.937505,1938.160461
PS2_6,1,1,4197.937505,1938.160461,4259.627698,1938.547503
UL1_3,2,1,547.290786,1846.090315,902.762889,1810.459399
UL1_4,1,1,902.762889,1810.459399,1731.526555,1810.217430
UL1_5,1,1,1731.526555,1810.217430,1839.227859,1809.167581
UL1_6,1,1,1839.227859,1809.167581,1876.642886,1807.970923
UL1_7,1,1,1876.642886,1807.970923,1912.482307,1808.027116
UL1_8,1,1,1912.482307,1808.027116,1948.547333,1806.790209
UL1_9,1,1,1948.547333,1806.790209,1985.172076,1809.772901
UL1_10,5,1,2020.869443,1811.538199,2641.029923,1810.100198
UL1_11,1,2,2641.029923,1810.100198,2893.829959,1825.589512
UL1_12,1,1,2893.829959,1825.589512,2785.705008,1813.203468
UL1_13,1,1,2785.705008,1813.203468,3018.129340,1821.502800
UL2_3,2,1,553.975614,2012.630135,903.404869,1978.577931
UL2_4,1,1,903.404869,1978.577931,1719.423553,1977.802191
UL2_5,1,1,1719.423553,1977.802191,1822.643168,1978.445929
UL2_7,2,1,1899.557661,1958.742816,1944.517637,1930.951081
UL2_8,1,1,1944.517637,1930.951081,1976.150833,1915.448512
UL2_9,1,1,1976.150833,1915.448512,2008.246923,1897.796075
UL2_10,1,1,2008.246923,1897.796075,2037.918359,1881.625600
UL3_1,1,1,633.140086,2120.663545,831.814701,2091.737797
UL3_2,2,1,878.893221,2098.646563,1861.404040,2089.400325
UL3_3,1,1,1861.404040,2089.400325,2017.419596,2090.046509
UL3_5,2,1,2082.236933,2070.328821,2282.772670,1950.214639
UL3_6,1,1,2282.772670,1950.214639,2315.361086,1932.846138
UL3_7,1,1,2315.361086,1932.846138,2348.664717,1919.645834
UL3_8,1,1,2348.664717,1919.645834,2378.129323,1897.913034
UL3_9,1,1,2378.129323,1897.913034,2408.907201,1881.035163
UL4_3,2,1,552.788849,2350.626783,905.700382,2315.449436
UL4_4,1,1,905.700382,2315.449436,1712.101194,2313.812375
UL4_5,1,1,1712.101194,2313.812375,1819.964891,2317.864418
UL4_6,1,1,1819.964891,2317.864418,1856.812083,2304.600063
UL4_7,1,1,1856.812083,2304.600063,1892.551907,2306.435269
UL4_8,1,1,1892.551907,2306.435269,1928.981908,2306.047462
UL4_9,1,1,1928.981908,2306.047462,1965.024016,2306.234051
UL4_10,5,1,2001.418905,2307.809246,2557.362372,2308.264495
UL4_12,2,1,2718.741165,2320.506810,2815.749256,2323.832156
UL4_13,1,1,2815.749256,2323.832156,2914.786899,2322.882657
UL5_3,2,1,546.894209,2453.798891,903.442508,2479.527764
UL5_4,1,1,903.442508,2479.527764,1691.840905,2484.924653
UL5_5,1,1,1691.840905,2484.924653,1789.119716,2480.254441
UL5_7,2,1,1854.915951,2464.288039,1913.811244,2428.171974
UL5_8,1,1,1913.811244,2428.171974,1946.027358,2411.078652
UL5_9,1,1,1946.027358,2411.078652,1976.288196,2392.094872
UL5_10,1,1,1976.288196,2392.094872,2008.055527,2375.211118
UL6_1,1,1,633.808413,2684.658977,830.713568,2651.384227
UL6_2,2,1,889.155446,2663.081118,1706.522553,2653.949825
UL6_3,1,1,1706.522553,2653.949825,1811.247017,2651.041122
UL6_5,2,1,1876.189950,2633.114258,2190.222142,2447.433453
UL6_6,1,1,2190.222142,2447.433453,2221.929865,2428.342256
UL6_7,1,1,2221.929865,2428.342256,2254.419133,2412.811656
UL6_8,1,1,2254.419133,2412.811656,2285.596047,2394.811656
UL6_9,1,1,2285.596047,2394.811656,2315.906936,2377.311656
1 conveyor_key tpe_count vfd_count start_x start_y end_x end_y
2 PS1_2 2 1 3182.112871 1751.627960 3307.631353 1679.668896
3 PS1_4 2 1 3377.926229 1655.901734 3931.089961 1657.733689
4 PS1_5 1 1 3931.089961 1657.733689 4262.417377 1656.646266
5 PS2_2 2 1 3099.843745 2245.419901 3140.391285 2223.245100
6 PS2_3 1 1 3140.391285 2223.245100 3588.721702 1959.931507
7 PS2_5 2 1 3660.544200 1941.885284 4197.937505 1938.160461
8 PS2_6 1 1 4197.937505 1938.160461 4259.627698 1938.547503
9 UL1_3 2 1 547.290786 1846.090315 902.762889 1810.459399
10 UL1_4 1 1 902.762889 1810.459399 1731.526555 1810.217430
11 UL1_5 1 1 1731.526555 1810.217430 1839.227859 1809.167581
12 UL1_6 1 1 1839.227859 1809.167581 1876.642886 1807.970923
13 UL1_7 1 1 1876.642886 1807.970923 1912.482307 1808.027116
14 UL1_8 1 1 1912.482307 1808.027116 1948.547333 1806.790209
15 UL1_9 1 1 1948.547333 1806.790209 1985.172076 1809.772901
16 UL1_10 5 1 2020.869443 1811.538199 2641.029923 1810.100198
17 UL1_11 1 2 2641.029923 1810.100198 2893.829959 1825.589512
18 UL1_12 1 1 2893.829959 1825.589512 2785.705008 1813.203468
19 UL1_13 1 1 2785.705008 1813.203468 3018.129340 1821.502800
20 UL2_3 2 1 553.975614 2012.630135 903.404869 1978.577931
21 UL2_4 1 1 903.404869 1978.577931 1719.423553 1977.802191
22 UL2_5 1 1 1719.423553 1977.802191 1822.643168 1978.445929
23 UL2_7 2 1 1899.557661 1958.742816 1944.517637 1930.951081
24 UL2_8 1 1 1944.517637 1930.951081 1976.150833 1915.448512
25 UL2_9 1 1 1976.150833 1915.448512 2008.246923 1897.796075
26 UL2_10 1 1 2008.246923 1897.796075 2037.918359 1881.625600
27 UL3_1 1 1 633.140086 2120.663545 831.814701 2091.737797
28 UL3_2 2 1 878.893221 2098.646563 1861.404040 2089.400325
29 UL3_3 1 1 1861.404040 2089.400325 2017.419596 2090.046509
30 UL3_5 2 1 2082.236933 2070.328821 2282.772670 1950.214639
31 UL3_6 1 1 2282.772670 1950.214639 2315.361086 1932.846138
32 UL3_7 1 1 2315.361086 1932.846138 2348.664717 1919.645834
33 UL3_8 1 1 2348.664717 1919.645834 2378.129323 1897.913034
34 UL3_9 1 1 2378.129323 1897.913034 2408.907201 1881.035163
35 UL4_3 2 1 552.788849 2350.626783 905.700382 2315.449436
36 UL4_4 1 1 905.700382 2315.449436 1712.101194 2313.812375
37 UL4_5 1 1 1712.101194 2313.812375 1819.964891 2317.864418
38 UL4_6 1 1 1819.964891 2317.864418 1856.812083 2304.600063
39 UL4_7 1 1 1856.812083 2304.600063 1892.551907 2306.435269
40 UL4_8 1 1 1892.551907 2306.435269 1928.981908 2306.047462
41 UL4_9 1 1 1928.981908 2306.047462 1965.024016 2306.234051
42 UL4_10 5 1 2001.418905 2307.809246 2557.362372 2308.264495
43 UL4_12 2 1 2718.741165 2320.506810 2815.749256 2323.832156
44 UL4_13 1 1 2815.749256 2323.832156 2914.786899 2322.882657
45 UL5_3 2 1 546.894209 2453.798891 903.442508 2479.527764
46 UL5_4 1 1 903.442508 2479.527764 1691.840905 2484.924653
47 UL5_5 1 1 1691.840905 2484.924653 1789.119716 2480.254441
48 UL5_7 2 1 1854.915951 2464.288039 1913.811244 2428.171974
49 UL5_8 1 1 1913.811244 2428.171974 1946.027358 2411.078652
50 UL5_9 1 1 1946.027358 2411.078652 1976.288196 2392.094872
51 UL5_10 1 1 1976.288196 2392.094872 2008.055527 2375.211118
52 UL6_1 1 1 633.808413 2684.658977 830.713568 2651.384227
53 UL6_2 2 1 889.155446 2663.081118 1706.522553 2653.949825
54 UL6_3 1 1 1706.522553 2653.949825 1811.247017 2651.041122
55 UL6_5 2 1 1876.189950 2633.114258 2190.222142 2447.433453
56 UL6_6 1 1 2190.222142 2447.433453 2221.929865 2428.342256
57 UL6_7 1 1 2221.929865 2428.342256 2254.419133 2412.811656
58 UL6_8 1 1 2254.419133 2412.811656 2285.596047 2394.811656
59 UL6_9 1 1 2285.596047 2394.811656 2315.906936 2377.311656

484
generate_csv.lsp Normal file
View File

@ -0,0 +1,484 @@
; ============================================================
; EXPORT_CONVEYORS (v5 - TPE-first geometry + EPC bootstrap only at chain start + VFD count)
;
; Conveyor definition:
; - Source blocks:
; CLX_TPE (photoeye anchors)
; CLX_EPC (EPC blocks - may be chained across multiple conveyors)
; VFD_v2 (drive blocks)
; - Logical name from attribute: P_TAG1
; e.g. UL5_4_TPE1, UL6_2_EPC2, UL6_3_VFD1
; - Conveyor key = <Prefix>_<Section>
; - Section change ALWAYS = new conveyor
;
; GEOMETRY (IMPORTANT):
; - TPEs define conveyor boundaries. EPCs DO NOT split conveyors.
; - For each conveyor key:
; * If TPE count >= 2:
; end = last TPE (highest index)
; start = first TPE (lowest index)
; BUT if this is the first conveyor in the prefix chain (no previous section exported)
; and EPC exists on this conveyor, EPC may be used as the START ONLY (bootstrap) if it extends the belt.
; * If TPE count == 1:
; end = that single TPE
; start = previous conveyor end (if exists & within MAX_STITCH_DISTANCE)
; else (ONLY if first conveyor in chain) bootstrap start from EPC farthest from the end TPE
; else start = own TPE
; * If TPE count == 0:
; not exported (out of scope / unreliable geometry)
;
; Output: CSV
; conveyor_key,tpe_count,vfd_count,start_x,start_y,end_x,end_y
; ============================================================
(vl-load-com)
;; ------------------------
;; Tuning / safety
;; ------------------------
(setq *MAX_STITCH_DISTANCE* 1000.0) ; inches (normal neighbor stitching)
(setq *MAX_BOOTSTRAP_DISTANCE* 5000.0) ; inches (EPC bootstrap guardrail for FIRST conveyor only)
;; ------------------------
;; Attribute helper
;; ------------------------
(defun getAttVal (attList tag)
(setq tag (strcase tag))
(setq a
(vl-some
(function
(lambda (a)
(if (= (strcase (vla-get-tagstring a)) tag) a)
)
)
attList
)
)
(if a
(strcase (vl-string-trim " " (vla-get-textstring a)))
""
)
)
;; ------------------------
;; Simple underscore splitter
;; ------------------------
(defun splitUnderscore (s / parts cur i ch)
(setq parts '() cur "" i 1)
(while (<= i (strlen s))
(setq ch (substr s i 1))
(if (= ch "_")
(progn
(setq parts (append parts (list cur)))
(setq cur "")
)
(setq cur (strcat cur ch))
)
(setq i (1+ i))
)
(append parts (list cur))
)
;; ------------------------
;; Parse P_TAG1 like: UL6_3_TPE1 / UL6_3_EPC2 / UL6_3_VFD1
;; returns: (prefix section kind index) or nil
;; kind is "TPE" / "EPC" / "VFD"
;; ------------------------
(defun parse-ptag1-anchor (ptag / s parts prefix section third kind idx)
(setq s (strcase (vl-string-trim " " ptag)))
(if (and s (vl-string-search "_" s))
(progn
(setq parts (splitUnderscore s))
(if (= (length parts) 3)
(progn
(setq prefix (nth 0 parts))
(setq section (atoi (nth 1 parts)))
(setq third (nth 2 parts)) ; TPE#, EPC#, VFD#
(cond
((wcmatch third "TPE*")
(setq kind "TPE")
(setq idx (atoi (substr third 4))))
((wcmatch third "EPC*")
(setq kind "EPC")
(setq idx (atoi (substr third 4))))
((wcmatch third "VFD*")
(setq kind "VFD")
(setq idx (atoi (substr third 4))))
(t
(setq kind nil)
(setq idx 0))
)
(if (and kind prefix (> section 0) (> idx 0))
(list prefix section kind idx)
nil
)
)
nil
)
)
nil
)
)
;; ------------------------
;; Helpers: key parsing + distance
;; ------------------------
(defun parse-key (key / parts prefix section)
(setq parts (splitUnderscore (strcase key)))
(if (= (length parts) 2)
(progn
(setq prefix (nth 0 parts))
(setq section (atoi (nth 1 parts)))
(if (and prefix (> section 0))
(list prefix section)
nil
)
)
nil
)
)
(defun dist2d (p q / dx dy)
(setq dx (- (car p) (car q)))
(setq dy (- (cadr p) (cadr q)))
(sqrt (+ (* dx dx) (* dy dy)))
)
(defun within? (p q maxd)
(and p q (<= (dist2d p q) maxd))
)
;; ------------------------
;; Find neighbor record in a chain (by prefix + section)
;; Each chain entry:
;; (section key tpeCount tpeSorted firstTPE lastTPE epcPoints)
;; ------------------------
(defun find-by-section (chain targetSec / r)
(setq r nil)
(foreach e chain
(if (= (car e) targetSec) (setq r e))
)
r
)
;; ------------------------
;; Pick EPC point farthest from a reference point (usually endTPE)
;; Returns EPC xy or nil
;; ------------------------
(defun farthest-from (pts ref / bestD bestP d)
(setq bestD -1.0 bestP nil)
(foreach p pts
(setq d (dist2d p ref))
(if (> d bestD)
(progn
(setq bestD d)
(setq bestP p)
)
)
)
bestP
)
;; ------------------------
;; Main command
;; ------------------------
(defun c:EXPORT_CONVEYORS ( / ss i ent blk effName attList ptag parsed
prefix section kind idx insPt xy key
tpeMap epcMap vfdMap entries
outPath fh
chainMap kv parsedKey chainKey secNum
tpeEntries epcEntries tpeCount epcPoints
tpeSorted firstTPE lastTPE
chains rec
prevRec prevEnd
startXY endXY
vfdEntries vfdCount
allKeys
endRef baseLen epcCandidate epcLen)
;; Maps:
;; tpeMap = ( (key . ( (idx xy) ... )) ... )
;; epcMap = ( (key . ( (idx xy) ... )) ... )
;; vfdMap = ( (key . ( "UL6_3_VFD1" ... )) ... ) ; unique P_TAG1 values
(setq tpeMap '())
(setq epcMap '())
(setq vfdMap '())
(setq ss (ssget "X" '((0 . "INSERT"))))
(if (not ss)
(progn
(princ "\nNo INSERT blocks found.")
(princ)
)
(progn
;; ------------------------
;; 1) Collect TPE + EPC points + VFD unique tags by conveyor key
;; ------------------------
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq blk (vlax-ename->vla-object ent))
(setq effName (strcase (vla-get-EffectiveName blk)))
;; VFD_v2 -> "VFD_V2"
(if (or (= effName "CLX_TPE") (= effName "CLX_EPC") (= effName "VFD_V2"))
(progn
(setq attList (vlax-invoke blk 'GetAttributes))
(setq ptag (getAttVal attList "P_TAG1"))
(setq parsed (parse-ptag1-anchor ptag))
(if parsed
(progn
(setq prefix (nth 0 parsed))
(setq section (nth 1 parsed))
(setq kind (nth 2 parsed))
(setq idx (nth 3 parsed))
(setq key (strcat prefix "_" (itoa section)))
(cond
;; --- TPE ---
((= kind "TPE")
(setq insPt (vlax-get blk 'InsertionPoint))
(setq xy (list (car insPt) (cadr insPt)))
(setq entries (cdr (assoc key tpeMap)))
(if (not entries) (setq entries '()))
(setq entries (cons (list idx xy) entries))
(setq tpeMap
(if (assoc key tpeMap)
(subst (cons key entries) (assoc key tpeMap) tpeMap)
(cons (cons key entries) tpeMap)
)
)
)
;; --- EPC ---
((= kind "EPC")
(setq insPt (vlax-get blk 'InsertionPoint))
(setq xy (list (car insPt) (cadr insPt)))
(setq entries (cdr (assoc key epcMap)))
(if (not entries) (setq entries '()))
(setq entries (cons (list idx xy) entries))
(setq epcMap
(if (assoc key epcMap)
(subst (cons key entries) (assoc key epcMap) epcMap)
(cons (cons key entries) epcMap)
)
)
)
;; --- VFD (unique by P_TAG1 text) ---
((= kind "VFD")
(setq vfdEntries (cdr (assoc key vfdMap)))
(if (not vfdEntries) (setq vfdEntries '()))
(if (and (/= ptag "") (not (member ptag vfdEntries)))
(setq vfdEntries (cons ptag vfdEntries))
)
(setq vfdMap
(if (assoc key vfdMap)
(subst (cons key vfdEntries) (assoc key vfdMap) vfdMap)
(cons (cons key vfdEntries) vfdMap)
)
)
)
)
)
)
)
)
(setq i (1+ i))
)
;; ------------------------
;; 2) Build chainMap by prefix.
;; Only EXPORT if tpeCount > 0 (TPE-first geometry).
;; Each record:
;; (section key tpeCount tpeSorted firstTPE lastTPE epcPoints)
;; ------------------------
(setq chainMap '())
;; keys to consider: union of tpeMap and epcMap (so EPCs are available for bootstrap)
(setq allKeys '())
(foreach kv tpeMap (setq allKeys (cons (car kv) allKeys)))
(foreach kv epcMap
(if (not (assoc (car kv) tpeMap))
(setq allKeys (cons (car kv) allKeys))
)
)
(foreach key allKeys
(setq parsedKey (parse-key key))
(if parsedKey
(progn
(setq chainKey (nth 0 parsedKey))
(setq secNum (nth 1 parsedKey))
(setq tpeEntries (cdr (assoc key tpeMap)))
(setq epcEntries (cdr (assoc key epcMap)))
(setq tpeCount (if tpeEntries (length tpeEntries) 0))
;; EPC points list (xy only)
(setq epcPoints '())
(if epcEntries
(foreach it epcEntries (setq epcPoints (cons (cadr it) epcPoints)))
)
;; TPE-sorted + endpoints
(if (> tpeCount 0)
(progn
(setq tpeSorted (vl-sort tpeEntries '(lambda (a b) (< (car a) (car b)))))
(setq firstTPE (cadr (car tpeSorted)))
(setq lastTPE (cadr (car (reverse tpeSorted))))
(setq rec (list secNum key tpeCount tpeSorted firstTPE lastTPE epcPoints))
(setq chains (cdr (assoc chainKey chainMap)))
(if (not chains) (setq chains '()))
(setq chains (cons rec chains))
(setq chainMap
(if (assoc chainKey chainMap)
(subst (cons chainKey chains) (assoc chainKey chainMap) chainMap)
(cons (cons chainKey chains) chainMap)
)
)
)
)
)
)
)
;; sort each chain by section ascending
(foreach kv chainMap
(setq chainKey (car kv))
(setq chains (cdr kv))
(setq chains (vl-sort chains '(lambda (a b) (< (car a) (car b)))))
(setq chainMap (subst (cons chainKey chains) kv chainMap))
)
;; ------------------------
;; 3) Write CSV with:
;; - TPE-first geometry
;; - Stitch START from previous conveyor end for single-TPE
;; - EPC bootstrap START only if first in chain (no prevRec)
;; - vfd_count
;; ------------------------
(setq outPath
(getfiled
"Save conveyors CSV"
(strcat (getvar "DWGPREFIX") "conveyors.csv")
"csv"
1
)
)
(if outPath
(progn
(setq fh (open outPath "w"))
(write-line "conveyor_key,tpe_count,vfd_count,start_x,start_y,end_x,end_y" fh)
(foreach kv chainMap
(setq chainKey (car kv))
(setq chains (cdr kv)) ; sorted
(foreach rec chains
(setq secNum (nth 0 rec))
(setq key (nth 1 rec))
(setq tpeCount (nth 2 rec))
(setq firstTPE (nth 4 rec))
(setq lastTPE (nth 5 rec))
(setq epcPoints (nth 6 rec))
;; Default: TPE-defined endpoints
(setq startXY firstTPE)
(setq endXY lastTPE)
;; Neighbor (previous section) record in same prefix chain
(setq prevRec (find-by-section chains (1- secNum)))
;; ----- If single-TPE, end is that TPE (already), start may stitch from prev end -----
(if (= tpeCount 1)
(progn
(setq endXY lastTPE) ; the only TPE
(if prevRec
(progn
(setq prevEnd (nth 5 prevRec)) ; prev lastTPE
(if (within? prevEnd endXY *MAX_STITCH_DISTANCE*)
(setq startXY prevEnd)
(setq startXY endXY)
)
)
(setq startXY endXY)
)
;; EPC bootstrap START only if NO prevRec (first conveyor in chain)
(if (and (not prevRec) epcPoints)
(progn
(setq epcCandidate (farthest-from epcPoints endXY))
(if (and epcCandidate (within? epcCandidate endXY *MAX_BOOTSTRAP_DISTANCE*))
(setq startXY epcCandidate)
)
)
)
)
)
;; ----- If multi-TPE, allow EPC bootstrap only for FIRST conveyor in chain -----
(if (and (>= tpeCount 2) (not prevRec) epcPoints)
(progn
;; Only use EPC as START if it meaningfully extends beyond firstTPE->lastTPE
(setq endRef lastTPE)
(setq baseLen (dist2d firstTPE endRef))
(setq epcCandidate (farthest-from epcPoints endRef))
(if epcCandidate
(progn
(setq epcLen (dist2d epcCandidate endRef))
(if (and (> epcLen baseLen)
(within? epcCandidate endRef *MAX_BOOTSTRAP_DISTANCE*))
(setq startXY epcCandidate)
)
)
)
)
)
;; vfd_count (unique VFD_v2 P_TAG1s)
(setq vfdCount 0)
(if (assoc key vfdMap)
(setq vfdCount (length (cdr (assoc key vfdMap))))
)
(write-line
(strcat
key ","
(itoa tpeCount) ","
(itoa vfdCount) ","
(rtos (car startXY) 2 6) "," (rtos (cadr startXY) 2 6) ","
(rtos (car endXY) 2 6) "," (rtos (cadr endXY) 2 6)
)
fh
)
)
)
(close fh)
(princ (strcat "\nExported conveyors to: " outPath))
(princ "\nGeometry: TPE-first. EPC used only as START bootstrap for first conveyor in chain when it extends the belt.")
(princ (strcat "\nStitch: single-TPE start may stitch from previous end (MAX_STITCH_DISTANCE=" (rtos *MAX_STITCH_DISTANCE* 2 2) ")."))
(princ (strcat "\nBootstrap: EPC->endTPE guarded by MAX_BOOTSTRAP_DISTANCE=" (rtos *MAX_BOOTSTRAP_DISTANCE* 2 2) "."))
(princ "\nAdded vfd_count from VFD_v2 (unique P_TAG1 values per conveyor_key).")
)
)
)
)
(princ)
)
(princ "\nLoaded. Run command: EXPORT_CONVEYORS")
(princ)

95
generate_scene.py Normal file
View File

@ -0,0 +1,95 @@
import csv
import math
from pathlib import Path
# -----------------------
# CONFIG
# -----------------------
CSV_PATH = "conveyors.csv"
OUT_TSCN = "generated_conveyors.tscn"
SCALE = 0.0254 # AutoCAD units → Godot units
FIXED_Y = 2.5
BELT_RESOURCE_ID = "3_38ygf" # BeltConveyorAssembly.tscn
# -----------------------
# HELPERS
# -----------------------
def transform_from_points(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
length = math.hypot(dx, dy) * SCALE
angle = math.atan2(dy, dx)
mid_x = (x1 + x2) / 2 * SCALE
mid_z = (y1 + y2) / 2 * SCALE
return {
"length": length,
"pos": (mid_x, FIXED_Y, mid_z),
"rot_y": -angle
}
def transform3d(rot_y, x, y, z):
c = math.cos(rot_y)
s = math.sin(rot_y)
return (
f"Transform3D({c}, 0, {s}, "
f"0, 1, 0, "
f"{-s}, 0, {c}, "
f"{x}, {y}, {z})"
)
# -----------------------
# READ CSV
# -----------------------
conveyors = []
with open(CSV_PATH, newline="") as f:
reader = csv.DictReader(f)
for row in reader:
conv = transform_from_points(
float(row["start_x"]),
float(row["start_y"]),
float(row["end_x"]),
float(row["end_y"]),
)
conv["name"] = row["conveyor_key"]
conveyors.append(conv)
# -----------------------
# WRITE TSCN
# -----------------------
lines = []
lines.append('[gd_scene load_steps=2 format=3]')
lines.append('')
lines.append(
'[ext_resource type="PackedScene" path="res://parts/assemblies/BeltConveyorAssembly.tscn" id="3_38ygf"]'
)
lines.append('')
lines.append('[node name="GeneratedConveyors" type="Node3D"]')
lines.append('')
for i, c in enumerate(conveyors, start=1):
x, y, z = c["pos"]
t = transform3d(c["rot_y"], x, y, z)
lines.append(
f'[node name="{c["name"]}" parent="." instance=ExtResource("{BELT_RESOURCE_ID}")]'
)
lines.append(f"transform = {t}")
lines.append("right_side_guards_enabled = false")
lines.append("left_side_guards_enabled = false")
lines.append("head_end_leg_enabled = false")
lines.append("tail_end_leg_enabled = false")
lines.append("enable_comms = true")
lines.append(f'speed_tag_name = "{c["name"]}_OIP"')
lines.append(
f"size = Vector3({c['length']:.6f}, 0.5, 1.524)"
)
lines.append("")
Path(OUT_TSCN).write_text("\n".join(lines))
print(f"Generated: {OUT_TSCN}")

585
generated_conveyors.tscn Normal file
View File

@ -0,0 +1,585 @@
[gd_scene load_steps=2 format=3]
[ext_resource type="PackedScene" path="res://parts/assemblies/BeltConveyorAssembly.tscn" id="3_38ygf"]
[node name="GeneratedConveyors" type="Node3D"]
[node name="PS1_2" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8675449395504647, 0, 0.49735880193315224, 0, 1, 0, -0.49735880193315224, 0, 0.8675449395504647, 82.4197516448, 2.5, 43.5774700712)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "PS1_2_OIP"
size = Vector3(3.674933, 0.5, 1.524)
[node name="PS1_4" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999945161112113, 0, -0.003311758974397826, 0, 1, 0, 0.003311758974397826, 0, 0.9999945161112113, 92.824505613, 2.5, 42.083169872099994)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "PS1_4_OIP"
size = Vector3(14.050436, 0.5, 1.524)
[node name="PS1_5" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999946142179093, 0, 0.0032820017024387353, 0, 1, 0, -0.0032820017024387353, 0, 0.9999946142179093, 104.0575431926, 2.5, 42.0926254285)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "PS1_5_OIP"
size = Vector3(8.415762, 0.5, 1.524)
[node name="PS2_2" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8773678141674687, 0, 0.479818422596505, 0, 1, 0, -0.479818422596505, 0, 0.8773678141674687, 79.250984881, 2.5, 56.7520455127)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "PS2_2_OIP"
size = Vector3(1.173861, 0.5, 1.524)
[node name="PS2_3" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8622787824202933, 0, 0.5064339062382932, 0, 1, 0, -0.5064339062382932, 0, 0.8622787824202933, 85.4597349349, 2.5, 53.1263429089)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "PS2_3_OIP"
size = Vector3(13.206393, 0.5, 1.524)
[node name="PS2_5" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999759795503059, 0, 0.006931112638399028, 0, 1, 0, -0.006931112638399028, 0, 0.9999759795503059, 99.8027176535, 2.5, 49.276580961499995)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "PS2_5_OIP"
size = Vector3(13.650118, 0.5, 1.524)
[node name="PS2_6" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999803192739637, 0, -0.006273839712780541, 0, 1, 0, 0.006273839712780541, 0, 0.9999803192739637, 107.41107807809999, 2.5, 49.2341911428)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "PS2_6_OIP"
size = Vector3(1.566962, 0.5, 1.524)
[node name="UL1_3" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9950139648061078, 0, 0.0997356999315168, 0, 1, 0, -0.0997356999315168, 0, 0.9950139648061078, 18.4156816725, 2.5, 46.4381813678)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_3_OIP"
size = Vector3(9.074236, 0.5, 1.524)
[node name="UL1_4" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999999573785687, 0, 0.0002919638005547997, 0, 1, 0, -0.0002919638005547997, 0, 0.9999999573785687, 33.4554759388, 2.5, 45.9825957283)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_4_OIP"
size = Vector3(21.050598, 0.5, 1.524)
[node name="UL1_5" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.999952493743362, 0, 0.009747320474448184, 0, 1, 0, -0.009747320474448184, 0, 0.999952493743362, 45.3485810578, 2.5, 45.9661896397)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_5_OIP"
size = Vector3(2.735743, 0.5, 1.524)
[node name="UL1_6" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9994889246433396, 0, 0.03196700666782072, 0, 1, 0, -0.03196700666782072, 0, 0.9994889246433396, 47.1915584615, 2.5, 45.9376590008)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_6_OIP"
size = Vector3(0.950828, 0.5, 1.524)
[node name="UL1_7" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999987708307951, 0, -0.0015679084472148372, 0, 1, 0, 0.0015679084472148372, 0, 0.9999987708307951, 48.121889951099995, 2.5, 45.923175095299996)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_7_OIP"
size = Vector3(0.910322, 0.5, 1.524)
[node name="UL1_8" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9994123906802922, 0, 0.03427642564070694, 0, 1, 0, -0.03427642564070694, 0, 0.9994123906802922, 49.035076427999996, 2.5, 45.908180027499995)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_8_OIP"
size = Vector3(0.916590, 0.5, 1.524)
[node name="UL1_9" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9967002282899721, 0, -0.08117052991521904, 0, 1, 0, 0.08117052991521904, 0, 0.9967002282899721, 49.9582364943, 2.5, 45.930351497)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_9_OIP"
size = Vector3(0.933348, 0.5, 1.524)
[node name="UL1_10" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.999997311695526, 0, 0.0023187500342096348, 0, 1, 0, -0.0023187500342096348, 0, 0.999997311695526, 59.20612194819999, 2.5, 45.9948076419)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_10_OIP"
size = Vector3(15.752119, 0.5, 1.524)
[node name="UL1_11" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9981282001527524, 0, -0.0611563247737067, 0, 1, 0, 0.0611563247737067, 0, 0.9981282001527524, 70.29272050140001, 2.5, 46.173259317)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_11_OIP"
size = Vector3(6.433163, 0.5, 1.524)
[node name="UL1_12" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(-0.9935026741492011, 0, 0.11380877144748693, 0, 1, 0, -0.11380877144748693, 0, -0.9935026741492011, 72.1300940809, 2.5, 46.212670846)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_12_OIP"
size = Vector3(2.764335, 0.5, 1.524)
[node name="UL1_13" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9993630900498375, 0, -0.03568493023729351, 0, 1, 0, 0.03568493023729351, 0, 0.9993630900498375, 73.7086962196, 2.5, 46.160769603599995)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL1_13_OIP"
size = Vector3(5.907340, 0.5, 1.524)
[node name="UL2_3" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9952852133168667, 0, 0.09699146432959523, 0, 1, 0, -0.09699146432959523, 0, 0.9952852133168667, 18.508732134099997, 2.5, 50.6883424382)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL2_3_OIP"
size = Vector3(8.917547, 0.5, 1.524)
[node name="UL2_4" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999995481421035, 0, 0.0009506395682917928, 0, 1, 0, -0.0009506395682917928, 0, 0.9999995481421035, 33.309920959399996, 2.5, 50.2460275494)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL2_4_OIP"
size = Vector3(20.726884, 0.5, 1.524)
[node name="UL2_5" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999805530651744, 0, -0.006236464660995434, 0, 1, 0, 0.006236464660995434, 0, 0.9999805530651744, 44.9842473567, 2.5, 50.244351124)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL2_5_OIP"
size = Vector3(2.621829, 0.5, 1.524)
[node name="UL2_7" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8506089942191302, 0, 0.5257987627919258, 0, 1, 0, -0.5257987627919258, 0, 0.8506089942191302, 48.8197562846, 2.5, 49.3991124919)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL2_7_OIP"
size = Vector3(1.342548, 0.5, 1.524)
[node name="UL2_8" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8979644689927908, 0, 0.4400679634175786, 0, 1, 0, -0.4400679634175786, 0, 0.8979644689927908, 49.79248956899999, 2.5, 48.8492748311)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL2_8_OIP"
size = Vector3(0.894783, 0.5, 1.524)
[node name="UL2_9" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8762206638502454, 0, 0.4819101039009612, 0, 1, 0, -0.4819101039009612, 0, 0.8762206638502454, 50.601851501199995, 2.5, 48.4282062549)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL2_9_OIP"
size = Vector3(0.930406, 0.5, 1.524)
[node name="UL2_10" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8780689921649024, 0, 0.47853405834748336, 0, 1, 0, -0.47853405834748336, 0, 0.8780689921649024, 51.3862990814, 2.5, 47.998655272499995)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL2_10_OIP"
size = Vector3(0.858309, 0.5, 1.524)
[node name="UL3_1" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9895668328462597, 0, 0.14407457558716869, 0, 1, 0, -0.14407457558716869, 0, 0.9895668328462597, 18.6049257949, 2.5, 53.49749704339999)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL3_1_OIP"
size = Vector3(5.099540, 0.5, 1.524)
[node name="UL3_2" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999557211215563, 0, 0.009410408932047861, 0, 1, 0, -0.009410408932047861, 0, 0.9999557211215563, 34.801775214699994, 2.5, 53.1881954776)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL3_2_OIP"
size = Vector3(24.956880, 0.5, 1.524)
[node name="UL3_3" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999914228893805, 0, -0.0041417565925802435, 0, 1, 0, 0.0041417565925802435, 0, 0.9999914228893805, 49.2610601772, 2.5, 53.0789747918)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL3_3_OIP"
size = Vector3(3.962829, 0.5, 1.524)
[node name="UL3_5" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8578838473591786, 0, 0.5138436575848861, 0, 1, 0, -0.5138436575848861, 0, 0.8578838473591786, 55.4356219581, 2.5, 51.060901941999994)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL3_5_OIP"
size = Vector3(5.937410, 0.5, 1.524)
[node name="UL3_6" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8824876952810232, 0, 0.47033548417867427, 0, 1, 0, -0.47033548417867427, 0, 0.8824876952810232, 58.39629870119999, 2.5, 49.3148718679)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL3_6_OIP"
size = Vector3(0.937969, 0.5, 1.524)
[node name="UL3_7" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9296382309209145, 0, 0.36847355347464555, 0, 1, 0, -0.36847355347464555, 0, 0.9296382309209145, 59.233127698100006, 2.5, 48.9266480444)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL3_7_OIP"
size = Vector3(0.909937, 0.5, 1.524)
[node name="UL3_8" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8047682926335156, 0, 0.5935890793905632, 0, 1, 0, -0.5935890793905632, 0, 0.8047682926335156, 60.030284308000006, 2.5, 48.4829976236)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL3_8_OIP"
size = Vector3(0.929958, 0.5, 1.524)
[node name="UL3_9" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8768162540239772, 0, 0.4808255990266744, 0, 1, 0, -0.4808255990266744, 0, 0.8768162540239772, 60.7953638548, 2.5, 47.992642101899996)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL3_9_OIP"
size = Vector3(0.891587, 0.5, 1.524)
[node name="UL4_3" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9950689105870448, 0, 0.09918600295965033, 0, 1, 0, -0.09918600295965033, 0, 0.9950689105870448, 18.5228132337, 2.5, 59.2591679813)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_3_OIP"
size = Vector3(9.008374, 0.5, 1.524)
[node name="UL4_4" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999979393868175, 0, 0.002030079338077881, 0, 1, 0, -0.002030079338077881, 0, 0.9999979393868175, 33.24608001519999, 2.5, 58.7916249997)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_4_OIP"
size = Vector3(20.482623, 0.5, 1.524)
[node name="UL4_5" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9992951314680424, 0, -0.03753984848488273, 0, 1, 0, 0.03753984848488273, 0, 0.9992951314680424, 44.8572392795, 2.5, 58.8222952711)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_5_OIP"
size = Vector3(2.741670, 0.5, 1.524)
[node name="UL4_6" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9408925721778789, 0, 0.33870513373802713, 0, 1, 0, -0.33870513373802713, 0, 0.9408925721778789, 46.6950675698, 2.5, 58.705298908699994)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_6_OIP"
size = Vector3(0.994714, 0.5, 1.524)
[node name="UL4_7" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9986842389497732, 0, -0.051281486652711435, 0, 1, 0, 0.051281486652711435, 0, 0.9986842389497732, 47.616922673, 2.5, 58.56014871639999)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_7_OIP"
size = Vector3(0.908988, 0.5, 1.524)
[node name="UL4_8" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999433439860244, 0, 0.010644661481103306, 0, 1, 0, -0.010644661481103306, 0, 0.9999433439860244, 48.533479450499996, 2.5, 58.578530683699995)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_8_OIP"
size = Vector3(0.925374, 0.5, 1.524)
[node name="UL4_9" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999865997475034, 0, -0.005176903072933443, 0, 1, 0, 0.005176903072933443, 0, 0.9999865997475034, 49.4538752348, 2.5, 58.575975215099994)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_9_OIP"
size = Vector3(0.915482, 0.5, 1.524)
[node name="UL4_10" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999996647208671, 0, -0.0008188761526801148, 0, 1, 0, 0.0008188761526801148, 0, 0.9999996647208671, 57.8965222179, 2.5, 58.6241365107)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_10_OIP"
size = Vector3(14.120969, 0.5, 1.524)
[node name="UL4_12" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9994129903588115, 0, -0.03425893609057608, 0, 1, 0, 0.03425893609057608, 0, 0.9994129903588115, 70.2880283467, 2.5, 58.98310486819999)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_12_OIP"
size = Vector3(2.465453, 0.5, 1.524)
[node name="UL4_13" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999540454520701, 0, 0.009586813028279828, 0, 1, 0, -0.009586813028279828, 0, 0.9999540454520701, 72.7778091685, 2.5, 59.0132781251)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL4_13_OIP"
size = Vector3(2.515672, 0.5, 1.524)
[node name="UL5_3" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9974065210227826, 0, -0.0719738273348684, 0, 1, 0, 0.0719738273348684, 0, 0.9974065210227826, 18.419276305900002, 2.5, 62.65324851849999)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL5_3_OIP"
size = Vector3(9.079875, 0.5, 1.524)
[node name="UL5_4" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999765711890427, 0, -0.006845222641044972, 0, 1, 0, 0.006845222641044972, 0, 0.9999765711890427, 32.9600993451, 2.5, 63.0485456959)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL5_4_OIP"
size = Vector3(20.025788, 0.5, 1.524)
[node name="UL5_5" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9988495791288503, 0, 0.047953292630627475, 0, 1, 0, -0.047953292630627475, 0, 0.9988495791288503, 44.2081998867, 2.5, 63.0577744938)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL5_5_OIP"
size = Vector3(2.473728, 0.5, 1.524)
[node name="UL5_7" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8524790224883632, 0, 0.522761433368305, 0, 1, 0, -0.522761433368305, 0, 0.8524790224883632, 47.862835376499994, 2.5, 62.1342421651)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL5_7_OIP"
size = Vector3(1.754812, 0.5, 1.524)
[node name="UL5_8" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8833597213730209, 0, 0.4686956396807836, 0, 1, 0, -0.4686956396807836, 0, 0.8833597213730209, 49.0199502454, 2.5, 61.4584829502)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL5_8_OIP"
size = Vector3(0.926338, 0.5, 1.524)
[node name="UL5_9" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8471068986537589, 0, 0.5314225270471795, 0, 1, 0, -0.5314225270471795, 0, 0.8471068986537589, 49.813407535799996, 2.5, 61.000303754799994)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL5_9_OIP"
size = Vector3(0.907353, 0.5, 1.524)
[node name="UL5_10" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8830309487153603, 0, 0.4693147596345664, 0, 1, 0, -0.4693147596345664, 0, 0.8830309487153603, 50.6011652821, 2.5, 60.544786073000004)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL5_10_OIP"
size = Vector3(0.913773, 0.5, 1.524)
[node name="UL6_1" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9860201232632386, 0, 0.16662627799944335, 0, 1, 0, -0.16662627799944335, 0, 0.9860201232632386, 18.599429158699998, 2.5, 67.76774869079999)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL6_1_OIP"
size = Vector3(5.072301, 0.5, 1.524)
[node name="UL6_2" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9999376035906048, 0, 0.01117089635967401, 0, 1, 0, -0.01117089635967401, 0, 0.9999376035906048, 32.965110587299996, 2.5, 67.5262929761)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL6_2_OIP"
size = Vector3(20.762420, 0.5, 1.524)
[node name="UL6_3" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9996145027501965, 0, 0.027764111573710868, 0, 1, 0, -0.027764111573710868, 0, 0.9996145027501965, 44.675673538999995, 2.5, 67.3733850269)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL6_3_OIP"
size = Vector3(2.661027, 0.5, 1.524)
[node name="UL6_5" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8607868402171976, 0, 0.508965633131445, 0, 1, 0, -0.508965633131445, 0, 0.8607868402171976, 51.6434335684, 2.5, 64.5229559297)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL6_5_OIP"
size = Vector3(9.266426, 0.5, 1.524)
[node name="UL6_6" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.8566984744886353, 0, 0.5158175295672346, 0, 1, 0, -0.5158175295672346, 0, 0.8566984744886353, 56.034330488900004, 2.5, 61.92235150429999)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL6_6_OIP"
size = Vector3(0.940093, 0.5, 1.524)
[node name="UL6_7" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.9022179251501843, 0, 0.43128043723045956, 0, 1, 0, -0.43128043723045956, 0, 0.9022179251501843, 56.84963227459999, 2.5, 61.482654682399996)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL6_7_OIP"
size = Vector3(0.914665, 0.5, 1.524)
[node name="UL6_8" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.866025400060552, 0, 0.5000000064499608, 0, 1, 0, -0.5000000064499608, 0, 0.866025400060552, 57.658192786, 2.5, 61.056816062399996)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL6_8_OIP"
size = Vector3(0.914400, 0.5, 1.524)
[node name="UL6_9" parent="." instance=ExtResource("3_38ygf")]
transform = Transform3D(0.866025402838328, 0, 0.5000000016387117, 0, 1, 0, -0.5000000016387117, 0, 0.866025402838328, 58.439087884100005, 2.5, 60.60596606239999)
right_side_guards_enabled = false
left_side_guards_enabled = false
head_end_leg_enabled = false
tail_end_leg_enabled = false
enable_comms = true
speed_tag_name = "UL6_9_OIP"
size = Vector3(0.889000, 0.5, 1.524)

BIN
pick coordinate ( CD1).fas Normal file

Binary file not shown.