ingoenius
Guest
Olá a todos. Eu tenho um lisp de arquivo que eu preciso extrair em arquivo de texto a localização coordenadas e o nome do bloco de escala
em geral funciona, mas eu tenho o problema de transcrever corretamente as rotações dos blocos quando o bloco e girado em vários eixos em 3d
Eu colocá-lo aqui sob o meu lisp se alguém mais experiente upo (para dar uma olhada seria perfeito
Obrigado.
em geral funciona, mas eu tenho o problema de transcrever corretamente as rotações dos blocos quando o bloco e girado em vários eixos em 3d
Eu colocá-lo aqui sob o meu lisp se alguém mais experiente upo (para dar uma olhada seria perfeito
Obrigado.
Código:
;;; asin retorna o arco sinusal do número, em radianos
(vl-load-com)
(defun asin (num)
(se)
(número de atan (sqrt) (- 1 (número de exposição 2)))
)
)
;;; aplicar uma matriz de transformação a um vetor de vladimir anrovsky
(defun mxv (m v)
(mapcar '(lambda (r) (aply '+ (mapcar '* r v)))) m)
)
(diversão c:blend)
(defun c:blender (/ ss n index str obj nome ins rot norm rotvec rotx roty rotz rotvec file)
(setq ss (ssget (list (cons 0 "insert"))) ;zero é il codice del nome
(setq n (ssslength ss)
(índice 0)
(setq old-arcunits (getvar "aunits"))
(setq old-arcprec (getvar "auprec"))
(setvar "aunits" 0)
(setvar "auprec" 6); conjunto de precisão para o grau
(setq str "); string vazia
;inizio del repeti -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(repetir n ; repetir para cada bloco
(setq obj (vlax-name->vla-object (ssname ss index)))
(setq name (if) (vlax-property-disponível-p obj "nome eficaz")
(nome setq (vla-get-eficientename obj)
(nome setq (vla-get-name obj)
)
)
(setq ins (vlax-get obj 'inclusão ponto))
(setq rot (vla-get-rotation obj)
(setq norm (vlax-get obj 'normal))
;; cálculo da rotação do vetor x no bloco sco
(setq rotvec (trans (polar 0 0 0) rot 1.0) norm 0)
;; cálculo das rotações do bloco em y e então em z
(setq roty (- (asin (caddr rotvec)); rotação em y
(setq rotz (atan (cadr rotvec) (car rotvec)); rotação em z
;; cálculo da rotação reversa do vetor normal em z
(setq zvec (mxv)
(list (- rotz)) 0)
(list (sin (- rotz)) 0)
(0 0)
)
Padrão
)
)
;; cálculo da rotação reversa do vetor normal em y
(setq zvec (mxv)
(list (- roty) 0 (sin (- roty))
(0 1 0)
(list (- (sin (- roty))) 0 (cos (- roty))
)
Zvec
)
)
;; cálculo da rotação do bloco em x
(setq rotx (- (atan (cadr zvec))
(setq str (strcat str; adição a string anterior)
Nome
"
(rtos (carros internos)2 6);6
"
(rtos (ins) 2 6)
"
(rtos (caddrins)2 6)
"
(angtos rotx 0 8); 8
"
(angtos roty 0 8)
"
(angtos rot 0 8)
"
(rtos (vla-get-xscalefactor obj)
"
(rtos (vla-get-yscalefactor obj)
"
(rtos (vla-get-zscalefactor obj)
"\n" ; salto de linha
)
)
(índice setq (1+ índice)); para mover para o próximo bloco
) ; fim de repetição
(setvar "aunits" old-arcunits)
; (setvar "auprec" old-arcprec)
(se)
(setq file (getfiled "select a file" "" "txt" 1))
escolher ou criar um arquivo
(progn
(setq file (open file "a") ; open lr file
(princ str file); escrever para arquivo
(close file) close file
)
)
(principal)
)