• Este fórum é a tradução automática de www.cad3d.it/forum1 - a comunidade italiana de design. Vários termos não foram traduzidos corretamente.

Blocos de rotação da transcrição do problema com extração da informação

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.

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)
)
 
chamar de volta a função passando a entidade nome <n> e o <tipo> resultado você quer que eu volte.
então para obter os três eixos de rotação, lembra a função 3 vezes:
(setq rotxy (fnbloccorot n "xy")
(setq rotxz)
(setq rotyz)

saudações

esta é a função:
; blocos construídos com entidades extrusadas de acordo com o eixo z do mundo de ucs
; n: nome da entidade; tipo: "xy" (rotation piano xy), "xz" (rotation piano xz), "yz" (rotation piano yz)
(defun fnbloccorot(n type / rot ent x y z pt)
(setq ent)
(setq pt (cdr)
(setq x (carro pt)
(setq y) (cadr pt)
(Sectq z)
(cond)
(= tipo "xy") (setq rot (cdr))))
((= tipo "xz") (setq rot (angle (list 0 0 0) (list x z 0.0)))))))
((= tipo "yz") (setq rot (angle (list 0 0 0) (list y z 0.0)))))))
)
; de radiantes a sessadecimali
(setq rot (*(/ 180.0 pi) rot))
; função retorna a conversão em número real da cadeia angular com precisão para 6 decimais
; usado para arredondar a medida para 6 decimais
(atof (rtos rot 2 6)
)</tipo></n>
 

Estatísticas do fórum

Tópicos
58,521
Mensagens
499,056
Membros
104,110
Último membro
ChristianR

Membros online

Nenhum membro online agora.
Voltar
Topo