AutoCad - cono hacer array en autolisp

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado 1 puesto en AutoCad (en relación al último mes)
Gráfica de AutoCad

cono hacer array en autolisp

Publicado por carlos edu (1 intervención) el 03/05/2020 00:19:34
alguien sabe como se hacen arrays en autolisp, podrian hacer un ejemplo en un codigo pequeño
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

cono hacer array en autolisp

Publicado por Gerardo (987 intervenciones) el 07/05/2020 14:44:49
Hola
Si trabajas con comandos te recomiendo no usar el comando "Array", ya que este difiere mucho en opciones si se invoca desde rutina que si se hace desde linea de comandos como usuario.
En este caso mejor elije un comando entre "ARRAYRECT" "ARRAYPOLAR" y "ARRAYPATH" y simplemente sigue el comando para darle los valores. Este sería un pequeño ejemplo

1
2
3
4
5
6
7
(defun c:6x4 ()
	(setq objetos (ssget)
			pt1	(getpoint "\nBase")
			dist	(mapcar '- (getcorner pt1) pt1)
	)
	(command "ARRAYRECT" objetos "" "B" pt1 "C" 4 6 "S" (cadr dist) (car dist) "X")
)


Si, como yo, le huyes a las llamadas de "command", hay un método de ActiveX, (invocable con visual lisp) llamado "ArrayRectangular"
Este es el ejemplo que viene en la propia ayuda del AutoCad (al buscar ese método):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(defun c:Example_ArrayRectangular()
    ;; This example creates a circle and then performs
    ;; a rectangular array on that circle.
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
 
    ;; Create the circle
    (setq center (vlax-3d-point 2 2 0)
          radius 0.5)
 
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq circleObj (vla-AddCircle modelSpace center radius))
    (vla-ZoomAll acadObj)
 
    (alert "Perform the rectangular array on the circle.")
 
    ;; Define the rectangular array
    (setq numberOfRows 5
          numberOfColumns 5
          numberOfLevels 2
          distanceBwtnRows 1.0
          distanceBwtnColumns 1.0
          distanceBwtnLevels 1.0)
 
    ;; Create the array of objects
    (setq retObj (vla-ArrayRectangular circleObj numberOfRows numberOfColumns numberOfLevels
		                                 distanceBwtnRows distanceBwtnColumns distanceBwtnLevels))
 
    (vla-ZoomAll acadObj)
    (alert "Rectangular array completed.")
)

Y si se quisiera hacer con autolisp puro escribiendo en la base de datos, pues no existe eso de un "ejemplo pequeño" ya que debe crearse un bloque anidado, un xrecord en diccionario y me parece que un reactor para los pinzamientos. Eso te tocaría estudiarlo con ingeniería inversa desde un array existente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar