ingoenius
Guest
Hallo alle Ich habe eine Datei lisp, die ich in Textdatei die Koordinaten Ort und Skalen Block Name extrahieren muss
im Allgemeinen funktioniert es, aber ich habe das Problem, die Rotationen der Blöcke korrekt zu verfolgen, wenn der Block und auf mehreren Achsen in 3d gedreht
Ich setze Sie hier unter meine Lispe, wenn jemand erfahrener Upo(um einen Blick zu nehmen wäre perfekt
Danke.
im Allgemeinen funktioniert es, aber ich habe das Problem, die Rotationen der Blöcke korrekt zu verfolgen, wenn der Block und auf mehreren Achsen in 3d gedreht
Ich setze Sie hier unter meine Lispe, wenn jemand erfahrener Upo(um einen Blick zu nehmen wäre perfekt
Danke.
Code:
;;; asin kehrt den Sinusbogen der Zahl zurück, in Radien
(vl-load-com)
(defun asin (num)
(falls = -1 nm 1)
(Anzahl (Anzahl 2))
)
)
;;; eine Transformationsmatrix auf einen Vektor von vladimir nesterovsky anwenden
(defun mxv)
(mapcar '(lambda (r) (ungefähr '+ (mapcar '* r v))) m)
)
(fünf c:blend)
(defun c:blender (/ ss n index str obj nome ins rot norm rotvec rotx roty rotz rotvec file)
(setq ss (list (cons 0 "insert"))) ;zero é il codice del nome
(Setq n (Länge ss)
(Satzindex 0)
(setq alt-arcunits (getvar "aunits")
(setq alt-arcprec (getvar "auprec"))
(setvar "aunits" 0)
(setvar "auprec" 6); Präzisionssatz für den Grad
(setq str "); leerer String
;inizio del wiederholen ------------
(Repeat n ; Wiederholung für jeden Block
(setq obj (vlax-name->vla-object (ssname ss index)))
(setq name (if) (vlax-property-p obj "effektivername")
(setq name (vla-get-wirksamname obj))
(setq name (vla-get-name obj))
)
)
(setq ins (vlax-get obj 'inclusionpoint))
(setq rot (vla-get-rotation obj))
(setq norm (vlax-get obj 'normal))
;; Berechnung der Rotation des Vektors x im Block sco
(setq rotvec (trans (polar '(0 0 0) rot 1.0) norm 0))
;; Berechnung der Drehungen des Blockes auf y und dann auf z
(setq roty (-) (asin (caddr rotvec)); Rotation auf y
(setq rotz (atan (cadr rotvec) (car rotvec)); Rotation auf z
;; Berechnung der Rückdrehung des Normalvektors auf z
(setq zvec (mxv)
(Liste (cos (- rotz)) (- (- rotz))) 0)
(Liste (- rotz)) (cos (- rotz)) 0)
„(0 0 1)
)
Standard
)
)
;; Berechnung der Rückdrehung des Normalvektors auf y
(setq zvec (mxv)
(Liste (cos (- roty)) 0 (sin (- roty)))
„(0 1 0)
(Liste (- (-)) 0 (cos (- roty)))
)
zvec
)
)
;; Berechnung der Drehung des Blocks auf x
(setq rotx (- (atan (cadr zvec) (cadddr zvec)))
(setq str (strcat str ; Zusatz zu vorheriger Zeichenfolge)
Name
" "
(rtos (car ins)2 6);6
" "
(rtos (cadr ins)2 6)
" "
(Rtos (Caddrins)2 6)
" "
(Gangtos rotx 0 8);8
" "
(angtos roty 0 8)
" "
(Gangtos rot 0 8)
" "
(rtos (vla-get-xscalefactor obj)
" "
(rtos (vla-get-yscalefactor obj)
" "
(rtos (vla-get-zscalefactor obj)
"\n"
)
)
(Setq-Index (1+ Index)); zum nächsten Block wechseln
)
(setvar "aunits" alt-arcunits)
;(setvar "auprec" alt-arcprec)
(falls
(setq Datei (getfiled "select a file" "" "txt" 1))
eine Datei auswählen oder erstellen
(Prog.)
(setq Datei (offen Datei "a") ; geöffnete lr Datei
(princ str-Datei); schreiben Sie in Datei
(close file) Datei schließen
)
)
(principal)
)