divendres, 9 de juliol del 2010

Problema per enganxar en coordenades originals entre dibuixos d'AutoCAD


Aquest problema, probablement, és degut a que el dibuix que es vol copiar amb coordenades originals té les unitats diferents al dibuix on s'ha de copiar.

És fàcil que en canviar de versió d'AutoCAD, els paràmetres de configuració no es mantinguin al 100%, i s'acabi tenint arxius fets en diverses versions que tenen característiques diferents. Aquesta situació a vegades pot portar problemes de compatibilitat entre arxius, i el copiar/enganxar en coordenades originals n'és un exemple clar. La solució és posar les mateixes unitats a ambdós dibuixos.


El primer de tot s'hauria de provar de fer un petit truc que, per desgràcia, no sempre funciona. Es tracta de copiar els elements de l'arxiu A amb coordenades originals, anar al dibuix B, seleccionar-hi qualsevol element que hi hagi (polilínia, punt, etc.) i, finalment, enganxar-hi els elements del dibuix A amb coordenades originals. 

Si el truc anterior no funciona es pot utilitzar la comanda 'insunits'. Aquesta serveix per definir les unitats del dibuix. Se li ha de donar un valor segons la taula següent:

0

Sense especificar (sense unitat)

1

Polzades

2

Pies

3

Milles

4

Mil·límetres

5

Centímetres

6

Metres

7

Kilòmetres

8

Micropolzades

9

Mil·lipolzades

10

Yardes

11

Angstrom

12

Nanòmetres

13 

Micròmetres

14

Decímetres

15

Decàmetres

16

Hectòmetres

17

Giròmetres

18

Unitats astronòmiques

19

Anys llum

20

Parsecs

Quan aquest problema ha afectat un nombre indeterminat d'arxius, es pot automatitzar el procés de tornar a posar les unitats de manera correcta. Es tracta de fer que una rutina s'activi quan s'engega l'AutoCAD. Per tenir una rutina que faci aquesta acció, n'hi hauria prou amb posar la comanda següent en un arxiu anomenat 'acad.lsp':

;Executa el 'comando' _insunits "6" que modifica les unitats a metres  
(command "_insunits" "6")

Però també es pot aprofitar per posar-hi algunes altres comandes interessants i alguna rutina completa que ens sigui útil. La rutina podria quedar de la manera següent:


;Aquesta rutina serveix per carregar funcions de manera automàtica a l'AutoCad. ;Carregar les funcions ActiveX (Visual Lisp) (vl-load-com) ;Executa el 'comando' _insunits "6" que modifica les unitats a metres (command "_insunits" "6") ;Executa el 'comando' _psltscale "0" que iguala les propietats de l'espai paper a l'espai model (command "_psltscale" "0") ;Executa el 'comando' _qsave que guarda l'arxiu (command "_qsave") ;Comença la rutina -data- que permet canviar un text a la data actual usant el 'comando' data ;Aquesta rutina ha estat treta del web http://construcgeek.com/ (DEFUN C:data() ;Variable para resumir la ruta de ubicacion en el registro del comando (setq Clave "HKEY_CURRENT_USER\\Software\\Construcgeek.com\\RF.Lsp\\") ;Verificamos el valor por defecto del tipo de formato de fecha (setq FormatoDef (vl-registry-read (strcat Clave "Opciones") "Formato")) ;Si no esta almacenado en el registro: Valor por defecto = 1 (if (null FormatoDef)(setq FormatoDef "1")) ;Se muestran las opciones del comando (Opciones) ;Seleccionamos los textos a reemplazar por la fecha actual (princ "\nSeleccion els textos a canviar per la data actual") (setq conj (ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>")))) (if (not (null conj)) (progn (setq nums (sslength conj)) (setq n 0) (if (> nums 0) (progn (repeat nums (setq nt (ssname conj n)) (setq entvln (vlax-ename->vla-object nt)) (vla-put-TextString entvln FechaActualFormato) (setq n (1+ n)) ) ) (princ "\nNo s'han seleccionat textos a actualitzar.") ) ) ) (princ) ) (defun Opciones() (initget "1 2 3 4 5 6 7 8 ?") (setq Formato(getkword (strcat "\nIndiqui el format de sortida de la data [1/2/3/4/5/6/7/8/?]<" FormatoDef ">: "))) (if (null Formato) (setq Formato FormatoDef)) (cond ((= Formato "1") (ObtenerFecha)(setq FechaActualFormato formato1)) ((= Formato "2") (ObtenerFecha)(setq FechaActualFormato formato2)) ((= Formato "3") (ObtenerFecha)(setq FechaActualFormato formato3)) ((= Formato "4") (ObtenerFecha)(setq FechaActualFormato formato4)) ((= Formato "5") (ObtenerFecha)(setq FechaActualFormato formato5)) ((= Formato "6") (ObtenerFecha)(setq FechaActualFormato formato6)) ((= Formato "7") (ObtenerFecha)(setq FechaActualFormato formato7)) ((= Formato "8") (ObtenerFecha)(setq FechaActualFormato formato8)) ((= Formato "?") (ObtenerFecha)(MostrarAyuda)(Opciones)) ) (setq FormatoDef Formato) (VL-REGISTRY-WRITE (strcat Clave "Opcions") "Format" Formato) ) (defun ObtenerFecha() (setq FechaSinFormato (rtos (getvar "cdate")2 6)) (setq FDia (substr FechaSinFormato 7 2)) (setq FMes (substr FechaSinFormato 5 2)) (setq FAño (substr FechaSinFormato 1 4)) (setq FHora (substr FechaSinFormato 10 2)) (setq Fminuto (substr FechaSinFormato 12 2)) (setq ListaDiasSemana (list '(1 . "Dilluns") '(2 . "Dimarts") '(3 . "Dimecres") '(4 . "Dijous") '(5 . "Divendres") '(6 . "Dissabte") '(0 . "Diumenge"))) (setq ListaMesesAño (list '(1 . "Gener") '(2 . "Febrer") '(3 . "Març") '(4 . "Abril") '(5 . "Maig") '(6 . "Juny") '(7 . "Juliol") '(8 . "Agost") '(9 . "Setembre") '(10 . "Octubre") '(11 . "Novembre") '(12 . "Desembre"))) (ObtenerNombredelDia) (setq formato1 (strcat FDia " / " FMes " / " FAño)) (setq formato2 (strcat FDia " - " FMes " - " FAño)) (setq formato3 (strcat FDia " - " (cdr (assoc (atoi FMes) ListaMesesAño)) " - " FAño)) (setq formato4 (strcat FDia " / " (cdr (assoc ( atoi FMes) ListaMesesAño)) " / " FAño)) (setq formato5 (strcat FDia " de " (cdr (assoc (atoi FMes) ListaMesesAño)) " de " FAño)) (setq formato6 (strcat (cdr (assoc ValorDia ListaDiasSemana)) ", " FDia " de " (cdr (assoc (atoi FMes) ListaMesesAño)) " de " FAño)) (setq formato7 (strcat FDia " de " (cdr (assoc (atoi FMes) ListaMesesAño)) " de " FAño " " FHora ":" Fminuto)) (setq formato8 (strcat (cdr (assoc ValorDia ListaDiasSemana)) ", " FDia " de " (cdr (assoc (atoi FMes) ListaMesesAño)) " de " FAño " " FHora ":" Fminuto)) ) (defun ObtenerNombredelDia() ;A (if (and (>= (atoi FAño) 1700) (<= (atoi FAño) 1799))(setq ND-A 5) ) (if (and (>= (atoi FAño) 1800) (<= (atoi FAño) 1899))(setq ND-A 3)) (if (and (>= (atoi FAño) 1900) (<= (atoi FAño) 1999))(setq ND-A 1)) (if (and (>= (atoi FAño) 2000) (<= (atoi FAño) 2099))(setq ND-A 0)) (if (and (>= (atoi FAño) 2100) (<= (atoi FAño) 2199))(setq ND-A -2)) (if (and (>= (atoi FAño) 2200) (<= (atoi FAño) 2299))(setq ND-A -4)) ;B (setq DosUltimosAno (atoi (substr FAño 3 2))) (setq DosUltimosAnoE4 (/ DosUltimosAno 4)) (setq DosUltimosAnoE4 (rtos DosUltimosAnoE4 2 3)) (setq DosUltimosAnoE4 (atoi DosUltimosAnoE4)) (setq ND-B (+ DosUltimosAno DosUltimosAnoE4)) ;C (if (and (= INT (type (/ DosUltimosAno 4))) ( or (= (cdr (assoc ( atoi FMes) ListaMesesAño)) "Gener") (= (cdr (assoc ( atoi FMes) ListaMesesAño)) "Febrer")) ) (setq ND-C -1) (setq ND-C 0) ) ;D (if (= FMes "01")(setq ND-D 6)) (if (= FMes "02")(setq ND-D 2)) (if (= FMes "03")(setq ND-D 2)) (if (= FMes "04")(setq ND-D 5)) (if (= FMes "05")(setq ND-D 0)) (if (= FMes "06")(setq ND-D 3)) (if (= FMes "07")(setq ND-D 5)) (if (= FMes "08")(setq ND-D 1)) (if (= FMes "09")(setq ND-D 4)) (if (= FMes "10")(setq ND-D 6)) (if (= FMes "11")(setq ND-D 2)) (if (= FMes "12")(setq ND-D 4)) ;E (setq ND-E (atoi FDia)) ;Valor del dia (setq ValorDia (+ ND-A ND-B ND-C ND-D ND-E)) (if (> ValorDia 6) (progn (while (> ValorDia 6) (setq ValorDia (- ValorDia 7)) ) ) ) ;Fin de los calculos del valor del día ) (defun MostrarAyuda() (setq Msg (strcat "Formatos de fecha disponibles: \n\n" " 1: " formato1 "\n" " 2: " formato2 "\n" " 3: " formato3 "\n" " 4: " formato4 "\n" " 5: " formato5 "\n" " 6: " formato6 "\n" " 7: " formato7 "\n" " 8: " formato8 "\n\n" " http://www.construcgeek.com/" )) (Alert msg) ) (setvar "modemacro" "Rutines carregades correctament") ;Aquí es podria insertar una altra rutina per AutoCAD 

Descarrega't la rutina acad.lsp

Un cop es té la rutina 'acad.lsp' s'ha de fer el següent:

1- Anar al menú 'Herramientas' de l'AutoCAD, i baixar fins a 'Opciones'.
2- Anar a la llengüeta 'Sistema' i seleccionar l'opció que es mostra en la imatge següent:


3- Anar a la llengüeta 'Archivos' i crear una entrada amb la ruta on l'AutoCAD podrà trobar sempre la rutina 'acad.lsp', tal i com es mostra en la imatge següent:


Fent això, cada vegada que iniciem l'AutoCAD, es faran aquestes accions. A mesura que anem entrant als arxius, els anirem convertint a les característiques que nosaltres volem.

2 comentaris: