incluir un bloque en un archivo VLX
5 participantes
Página 1 de 1.
incluir un bloque en un archivo VLX
Hola amigos. Quería saber si se puede incluir un bloque en un archivo compilado VLX, para poder insertarlo desde la propia rutina, sin necesidad de crearlo cada vez que se ejecuta la rutina en un dibujo nuevo.
Saludos.
Saludos.
Re: incluir un bloque en un archivo VLX
Hola robierzo
Haber...vamos a clarificar un poco tu pregunta.....
Un Bloque no se puede meter en un LISP, porque son objetos que tendrias que traerte desde una carpeta fisicamente, entonces lo que puedes hacer es lo siguiente......
Programar un LISP para que éste te dibuje el bloque que tu necesitas, otra es conseguir un Administrador de BLOQUES como el BlockManager CADLIBDU, que es un administrador de bloques para insertar en cualquer dibujo de AutoCAD....
Entonces lo que necesitamos para poder ayudarte es que tu pregunta se un poco mas clara.
Saludos Amigo.
Haber...vamos a clarificar un poco tu pregunta.....
Un Bloque no se puede meter en un LISP, porque son objetos que tendrias que traerte desde una carpeta fisicamente, entonces lo que puedes hacer es lo siguiente......
Programar un LISP para que éste te dibuje el bloque que tu necesitas, otra es conseguir un Administrador de BLOQUES como el BlockManager CADLIBDU, que es un administrador de bloques para insertar en cualquer dibujo de AutoCAD....
Entonces lo que necesitamos para poder ayudarte es que tu pregunta se un poco mas clara.
Saludos Amigo.
saulo2016- Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: incluir un bloque en un archivo VLX
Hola saulo. OK. Creo que me queda claro. Ya imaginaba que no se podía, pero por si acaso..... Yo lo que pretendo es crear un archivo compilado (***.vlx) que tenga, entre otras cosas, la opción de insertar uno o varios bloques. Si se pudieran incluir en el *.VLX no haría falta programar para dibujar el propio bloque. Sólo es eso. Hay que tener en cuenta que este archivo *.VLX se va a utilizar en varios ordenadores, cada uno de su madre. Con lo cual, lo ideal es que no depender de ninguna otra aplicación. Bueno, pues nada. Me pondré a definir los bloques mediante lisp. Muchas gracias en todo caso. Un saludo.
Re: incluir un bloque en un archivo VLX
Igual funciona adjuntando el bloque como texto como proponía mi Maestro Yarik en Hispacad para los sld de los dcl.
Osea, pasar los archivos de los bloques que son binario a texto (rutina ReadSLD) y compilarlos con el vlx.
Luego que el vlx los extraiga y con otra rutina suya (rutina writeSLD) volver a ponerlos en binario y renombrarlos como dwg.
Yo llegué a probarlo hace mucho tiempo y cuando me pasaron el Autocad 64 bits dejó de funcionar la llamada al ScriptControl por lo que lo he encontrado de milagro.
Si son muchos bloques igual te merece la pena investigar sobre esto. A mi me supera ......
Si no son bloques dinámicos, yo tenía un lisp para extraer todos los de un dibujo en un .lsp pero fallaba en alguna ocasión aunque igual te simplifica el trabajo.
Si te interesa te lo busco pero debo mandártelo a un correo privado.
Un saludo
Osea, pasar los archivos de los bloques que son binario a texto (rutina ReadSLD) y compilarlos con el vlx.
Luego que el vlx los extraiga y con otra rutina suya (rutina writeSLD) volver a ponerlos en binario y renombrarlos como dwg.
- Código:
;;; para pasar a texto
(defun ReadSLD (filename output)
(if (setq wsObj (vlax-create-object "ScriptControl"))
(progn
(vlax-put wsObj "language" "VBS")
(setq str
"Function ReadBinary(FileName)
Const adTypeBinary = 1
Dim stream, xmldom, node
Set xmldom = CreateObject(\"Microsoft.XMLDOM\")
Set node = xmldom.CreateElement(\"binary\")
node.DataType = \"bin.hex\"
Set stream = CreateObject(\"ADODB.Stream\")
stream.Type = adTypeBinary
stream.Open
stream.LoadFromFile FileName
node.NodeTypedValue = stream.Read
stream.Close
Set stream = Nothing
ReadBinary = node.Text
Set node = Nothing
Set xmldom = Nothing
End Function"
)
(vlax-invoke wsObj 'ExecuteStatement str)
(setq str (vlax-invoke wsObj 'run "ReadBinary" filename))
(vlax-release-object wsObj)
)
)
(setq file(open output "w"))
(princ str file)
(close file)
)
;;; utilizar como ejemplo
;;; (readsld "c:/Acad/ejemplo.sld" "c:/Acad/ejemplo.txt")
- Código:
(defun writeSLD (FileName textfile / wsObj str)
(if (setq wsObj (vlax-create-object "ScriptControl"))
(progn
(vlax-put wsObj "language" "VBS")
(setq str
"Sub WriteBinary(FileName, Buf)
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim stream, xmldom, node
Set xmldom = CreateObject(\"Microsoft.XMLDOM\")
Set node = xmldom.CreateElement(\"binary\")
node.DataType = \"bin.hex\"
node.Text = Buf
Set stream = CreateObject(\"ADODB.Stream\")
stream.Type = adTypeBinary
stream.Open
stream.write node.NodeTypedValue
stream.saveToFile FileName, adSaveCreateOverWrite
stream.Close
Set stream = Nothing
Set node = Nothing
Set xmldom = Nothing
End Sub"
)
(vlax-invoke wsObj 'ExecuteStatement str)
(vlax-invoke wsObj 'run "WriteBinary" Filename (vl-get-resource textfile))
(vlax-release-object wsObj)
(princ)
)
)
)
;;; uitilizar así
;;; (writesld "c:/Acad/ejemplo.sld" "ejemplo")
Yo llegué a probarlo hace mucho tiempo y cuando me pasaron el Autocad 64 bits dejó de funcionar la llamada al ScriptControl por lo que lo he encontrado de milagro.
Si son muchos bloques igual te merece la pena investigar sobre esto. A mi me supera ......
Si no son bloques dinámicos, yo tenía un lisp para extraer todos los de un dibujo en un .lsp pero fallaba en alguna ocasión aunque igual te simplifica el trabajo.
Si te interesa te lo busco pero debo mandártelo a un correo privado.
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: incluir un bloque en un archivo VLX
Uffff, eso suena un poco a chino mandarín.jajaja. Lo guardaré, pero no sé si tendré tiempo y paciencia para ojearlo. Gracias Nolo.
La verdad es que no son muchos bloques. Pero el saber no ocupa lugar. Así que, si tengo tiempo miraré estas dos rutinas.
Saludos.
La verdad es que no son muchos bloques. Pero el saber no ocupa lugar. Así que, si tengo tiempo miraré estas dos rutinas.
Saludos.
Re: incluir un bloque en un archivo VLX
Robierzo buenos dias desde Monterrey, N.L. Mexico
Oye..........pregunta.........¿¿¿¿que AutoCAD tienes????..........¿¿¿porque no utilizas el CADLIBDU MANAGER????....es muy sencillo y practico, puedes organizar tooooooodos tus bloques....
este es el que yo utilizo....
Si te interesa enviame tu correo personal e intento compartirtelo.....
Saludos
Oye..........pregunta.........¿¿¿¿que AutoCAD tienes????..........¿¿¿porque no utilizas el CADLIBDU MANAGER????....es muy sencillo y practico, puedes organizar tooooooodos tus bloques....
este es el que yo utilizo....
Si te interesa enviame tu correo personal e intento compartirtelo.....
Saludos
saulo2016- Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: incluir un bloque en un archivo VLX
Dependiendo de la complejidad de tus bloques, podrias crearlos mediante codigo, por ejemplo el codigo que anexo crea un circulo, dos lineas y un atributo, esto para usarse dentro de una rutina que numera los vertices de una polilinea. Podrias usar el mismo esquema para crear los bloques que necesites.
Solo considera que si tienes bloques dinámicos, estos no se pueden crear con programación.
Saludos
- Código:
(or mu:thisdrawing
(setq mu:thisdrawing (vla-get-activedocument (vlax-get-acad-object)))
)
(defun CT:CreaBloque (/ block att)
(if (vl-catch-all-error-p
(vl-catch-all-apply
'vla-item
(list (setq *Blocks* (vla-get-Blocks mu:ThisDrawing))
"Simb_Plat_Coord_Mco"
)
)
)
(progn
(setq
block
(vla-add *blocks*
(vlax-make-safearray vlax-vbDouble '(0 . 2))
"Simb_Plat_Coord_Mco"
)
)
(vla-addline
block
(vlax-3d-point '(0 -1.00 0))
(vlax-3d-point '(0 1.00 0))
)
(vla-addline
block
(vlax-3d-point '(-1.00 0 0))
(vlax-3d-point '(1.00 0 0))
)
(vla-addcircle
block
(vlax-3d-point '(0 0 0))
(vlax-make-variant 0.50 vlax-vbDouble)
)
(setq att (vla-addattribute
block
(vlax-make-variant 1.25 vlax-vbDouble)
acAttributeModeNormal
"Numero de punto:"
(vlax-3d-point '(0.25 0.25 0))
"Simb_Plat_Coord_Mco"
"1"
)
)
)
)
)
(defun c:Prueba ()
(CT:CreaBloque)
(vla-InsertBlock
(vla-get-ModelSpace MU:THISDRAWING)
(vlax-3d-point
(GETPOINT
"\n Selecciona punto para la insercion del bloque: "
)
)
"Simb_Plat_Coord_Mco"
1
1
1
0
)
(princ)
)
Solo considera que si tienes bloques dinámicos, estos no se pueden crear con programación.
Saludos
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
Re: incluir un bloque en un archivo VLX
Hola Saulo. Yo tengo Autocad 2012. Pero ya no es por el tema de versión. Es por el tema de facilitar la rutina a terceros, que pueden tener o no el MANAGER. Yo la verdad es que desconocía que existiera tal cosa. Estoy muy verde.!!!!! jejejeje. Gracias en todo caso.
Marco, muchas gracias por el ejemplo. También me lo copio en mi librería de funciones. Sin duda lo utilizaré en breve.
Saludos y gracias a los dos!!!!
Marco, muchas gracias por el ejemplo. También me lo copio en mi librería de funciones. Sin duda lo utilizaré en breve.
Saludos y gracias a los dos!!!!
Re: incluir un bloque en un archivo VLX
Hola robierzo , una solucion podria ser que crearas un instalador con el inosetup en el cual le das la ruta de ubicacion de una carpeta donde podrias tener todos tus bloques y otra donde se instale tu *.vlx
Este es un lisp que inserta bloques de una carpeta determinada http://axprogramlisp.blogspot.pe/2016/04/biblockvlx.html
Este es un lisp que inserta bloques de una carpeta determinada http://axprogramlisp.blogspot.pe/2016/04/biblockvlx.html
Re: incluir un bloque en un archivo VLX
Gracias amc.dicsac. Al final he optado por crear el bloque mediante código. Una vez que le coges el tranquillo no es tan complicado.
Gracias en todo caso. Le echo un ojo al enlace que me has dejado.
Saludos.
Gracias en todo caso. Le echo un ojo al enlace que me has dejado.
Saludos.
Temas similares
» Insertar Bloque desde un archivo DWG
» Crear un archivo VLX
» Editar archivo .dwg sin abrirlo
» Bloque Numerado
» Seleccion Bloques Intersectados
» Crear un archivo VLX
» Editar archivo .dwg sin abrirlo
» Bloque Numerado
» Seleccion Bloques Intersectados
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|