Problem transkripsiyon rotasyon blokları info Ekstraksiyon ile

ingoenius

Guest
Herkese merhaba Adım dosyasında almam gereken bir dosyaya ihtiyacım var koordinatlar konum ve ölçek blok adı
Genel olarak çalışır, ancak bloktaki blokların rotasyonlarını doğru bir şekilde yazıp 3d'te birden fazla eksende dönen ve 3d'te dönen blokların rotasyonlarını doğru bir şekilde yazma sorunum var.

Seni buraya, daha deneyimli biri varsa lisp’in altına koydum (bir göz atmak mükemmel olurdu

Teşekkür ederim.

Kod:
;; sayının sinus yayını döndürürken, radians
(vl-load-com)
(defun asin (num)
(=1 nm 1)
(Atan numarası (sqrt (- 1 (expt number 2))))
)
)
; vladimir nesterovsky tarafından bir vektöre bir dönüşüm matrisi uygulayın
(defun mxv (m v)
(mapcar '(lambda (r) (muhtemelen '+ (mapcar '* r v)) m)
)

(fun c:blend ()

(defun c:blender ( / s n index str obj nome ins çürük çürük çürük çürük çürütme dosyası)

(setq sss (listeler 0 "insert"))) ;zero é il codice del nome
(setq n (uzun uzun boylu ss))
(setq index 0)


(setq old-arcunits (getvar "aunits"))
(setq old-arcprec (getvar "auprec")

(setvar "aunits" 0)
(setvar "auprec" 6); derece için hassaslığın başlangıcı

(setq str "); boş dize


; youo del tekrar - !!!

(repeat n; Her blok için tekrar

(setq obj (vlax-name->vla-object (sisim ss index)))
(setq adı (if) (vlax-property- available-p obj " effectivename")
(setq adı (vla-get- effectivename obj)
(setq adı (vla-get-name obj)
)
)
(vlax-get obj 'inclusionpoint)
(setq çürümesi (vla-get-rotation obj)
(setq normu (vlax-get obj 'normal)

; Blok sco'daki vektör x'in rotasyonunu hesaplamak

(setq çürük (trans (polar '(0 0 0) çürük 1.0) norm 0))

; blok rotasyonlarını y ve sonra zinde hesaplama

(setq çürük (- (asin (caddr çürük)); y
(setq rotz (atan (cadr çürük) (kar çürük)); zıpkıt üzerinde rotasyon



; normal vektörün geri dönüş rotasyonunu zinde hesaplama

(setq zvec (mxv)
(Liste (kozmanlar) (-)) 0)
(Liste (sin (- çürük)) (kozmanlar) 0)
(0 0 1)
)
Standart Standart Standart Standart
)
)

; normal vektörün geri dönüş rotasyonunu yÃ1⁄4zerinde hesaplama

(setq zvec (mxv)
(Liste (kozmanlar) 0 (sin (sihirli))
"(0 1 0)
(Liste (- (sin) 0 (kozman)
)
Zvec
)
)

; x x x üzerindeki bloğun rotasyonunu hesaplamak

(atan (cadr zvec) (kaddr zvec)))

(setq str (strcat str; önceki dizeye ek)
isim adı
" " " " ""
(rtos (kar ins)2 6);6
" " " " ""
(rtos (kadr ins)2 6)
" " " " ""
(rtos (caddrins)2 6)
" " " " ""
(angtos rotx 0 8);8
" " " " ""
(angtos çürük 0 )
" " " " ""
(angtos çürüme 0 )
" " " " ""
(rtos (vla-get-xscaletors obj)
" " " " ""
(rtos (vla-get-yscaletors obj)
" " " " ""
(rtos (vla-get-zscaletors obj)
"\n"; Line at
)
)
(setq indeksi (1+ index)); bir sonraki bloka hareket etmek
)



(setvar "aunits" old-arcunits)
(setvar "auprec" old-arcprec)





(Eğer
(setq dosyası (resmi bir dosyayı "" "txt" 1)

Bir dosyayı seçin veya oluşturun
(progn
(setq dosyası (open file "a"); open lr file
(princ str dosyası); dosya yazmak
(close file) yakın dosya
)
)

(principal)
)
 
İsim varlıkını geçerek işlevi geri çağırın <n> ve <tipo> Sonuç olarak geri gelmek istiyorum.
Ardından rotasyonun üç eksenlerini almak için, işlevi 3 kez hatırlayın:
(setq rotxy (fnblocco n "xy")
(setq rotxz)
(setq rotyz)

Selamlar

Bu işlevdir:
ucs dünyasının z eksenine göre eklenmiş varlıklarla inşa edilen bloklar
s: varlık adı; tip: "xy" (rotation Piano xy), "xz" (rotation Piano xz), "yz" (rotation Piano yz)
(defun fnbloccorot (n tipi / çürük x y z pt)
(setq ent)
(setq pt (cdr (assoc 210 ent)))
(setq x (car pt)
(setq y) (cadr pt)
(Sectq z)
(cond)
((= tip "xy") (setq çürü (cdr))))
((= tip "xz") (setq çürük (kesin 0 0 0 0) (ist x z 0.0))))))
((= tip "yz") (setq çürük (kesin 0 0 0 0) (list y z 0.0))))))
)
; radiants to soundsadecimali
(setq çürümesi (*(/ 180.0 pi) çürük)
; fonksiyon, 6 decimals için hassas olan açı dizesinin gerçek sayısında dönüşüm döndürür.
; 6 decimal için ölçüyü yuvarlak için kullanılır
(O halde 2 )
)</tipo></n>
 

Forum İstatistikleri

Konular
58,521
Mesajlar
499,056
Kullanıcılar
104,110
Son Üye
ChristianR

Çevrimiçi Üyeler

Şu anda çevrimiçi üye yok.
Geri
Üst