Author Topic: Array Help  (Read 1391 times)

0 Members and 1 Guest are viewing this topic.

GDF

  • Water Moccasin
  • Posts: 2081
Array Help
« on: April 03, 2017, 09:47:43 AM »
The routine works below...just wondering if their is a better way to achieve the same results...but ending up with an array object.


Code: [Select]
(defun ARCH:MIDPOINT  (w z)
  (list (/ (+ (car w) (car z)) 2) (/ (+ (cadr w) (cadr z)) 2)))

(defun C:HOOK  (/ sset pt1 pt2 mid obj leng scf last)
  ;;(ARCH:F_S-VAR)
  ;;(setvar "arraytype" 0) 
  (setvar "cmdecho" 0)
  (setvar "osmode" 111)
  (setq obj (car (entsel"\* Select Line for Hook...")))
  (setq pt1 (cdr (assoc 10 (cdr (entget obj)))) pt2 (cdr (assoc 11 (cdr (entget obj)))))
  (setq mid (ARCH:MIDPOINT pt1 pt2))
  (setvar "osmode" 0) 
  (setq leng (vla-get-length (vlax-ename->vla-object obj)))
  (setq course (atoi (rtos (/ leng 24) 2 0)))
  (setvar "snapmode" 0)
  (setvar "orthomode" 1)
  (setvar "cmdecho" 1)
  (setq scf (getvar "dimscale"))
  (command "insert" (strcat ARCH#CUSF "Builders Plan Service/Syms/Arch_blks/" "PN-HOOK") "ps" scf mid scf "" pause)
  (setq last (entlast))
  ;;(command ".copy" (entlast) "" "m" pt1 "array" course "12")
  (cond
    ((>= (angle pt1 pt2) 1.5708)
      (command ".array" last "" "r" "" course "12")
      (command ".array" last "" "r" "" course "-12")
    )
    ((<= (angle pt1 pt2) 3.14159)
      (command ".array" last "" "r" course "" "12")
      (command ".array" last "" "r" course "" "-12")
    )
  )
  ;;(command "mirror" (ssget) "" mid (polar mid (arch:dtr 90) 12) "")
  (setvar "cmdecho" 1)
  ;;(ARCH:F_R-VAR)
  (princ))
Why is there never enough time to do it right, but always enough time to do it over?
BricsCAD 2020x64 Windows 10x64

Grrr1337

  • Swamp Rat
  • Posts: 812
Re: Array Help
« Reply #1 on: April 04, 2017, 06:05:16 AM »
Perhaps look into ArrayRectangular and ArrayPolar methods.
(apply ''((a b c)(a b c))
  '(
    (( f L ) (apply 'strcat (f L)))
    (( L ) (if L (cons (chr (car L)) (f (cdr L)))))
    (72 101 108 108 111 32 87 111 114 108 100)
  )
)
vevo.bg

GDF

  • Water Moccasin
  • Posts: 2081
Re: Array Help
« Reply #2 on: April 08, 2017, 01:58:19 PM »
This is the best I can come up with...for AutoCAD 2012

Code: [Select]
(defun C:HOOK  (/ sset pt1 pt2 mid obj leng scf last)
 ;; (ARCH:F_S-VAR) 
  (setvar "ARRAYTYPE" 0) ;;rectangular
  (setvar "cmdecho" 1)
  (setvar "osmode" 111) 
  (setq obj (car (entsel"\* Select Line for Hook...")))
  (setq pt1 (cdr (assoc 10 (cdr (entget obj)))) pt2 (cdr (assoc 11 (cdr (entget obj)))))
  (setq mid (ARCH:MIDPOINT pt1 pt2))
  (setvar "osmode" 0) 
  (setq leng (vla-get-length (vlax-ename->vla-object obj)))
  (setq course (atoi (rtos (/ leng 24) 2 0)))
  (command ".snap" "r" pt1 pt2)
  (setvar "snapmode" 0)
  (setvar "orthomode" 1)
  (setq scf (getvar "dimscale"))
  (command "insert" (strcat ARCH#CUSF "Builders Plan Service/Syms/Arch_blks/" "PN-HOOK") "ps" scf mid scf "" pause)
  (setq last (entlast)) 
  (cond
    ((and (>= (angle pt1 pt2) 1.5708)(<= (angle pt1 pt2) 3.14159))
      (command ".array" last "" "r" course "" "-12")
      (command ".array" last "" "r" course "" "12")
    )
    ((or (<= (angle pt1 pt2) 1.5708)(>= (angle pt1 pt2) 3.14159))
      (command ".array" last "" "r" "" course "-12")
      (command ".array" last "" "r" "" course "12")
    )   
  ) 
  (command ".group" "" "n" "HOOK" (ssget "X" (list (cons 2 "PN-HOOK"))) "")
   (prompt (strcat "\n* Angle = " (rtos (angle pt1 pt2) 2 5)))
   ;; (ARCH:F_R-VAR)
  (princ))

Why is there never enough time to do it right, but always enough time to do it over?
BricsCAD 2020x64 Windows 10x64

CAB

  • Global Moderator
  • Seagull
  • Posts: 10401
Re: Array Help
« Reply #3 on: April 08, 2017, 05:45:27 PM »
Gary,
Post a DWG of the line after the hook is applied do I can test it.
Note that LAST is a function so you can not use it as a variable name.
Thanks
I've reached the age where the happy hour is a nap. (°¿°)
Windows 10 core i7 4790k 4Ghz 32GB GTX 970
Please support this web site.

GDF

  • Water Moccasin
  • Posts: 2081
Re: Array Help
« Reply #4 on: April 08, 2017, 07:32:42 PM »
Thanks Alan

Code: [Select]
(defun C:HOOK  (/ sset pt1 pt2 mid obj leng scf las)
 ;; (ARCH:F_S-VAR) 
  (setvar "ARRAYTYPE" 0) ;;rectangular
  (setvar "cmdecho" 1)
  (setvar "osmode" 111) 
  (setq obj (car (entsel"\* Select Line for Hook...")))
  (setq pt1 (cdr (assoc 10 (cdr (entget obj)))) pt2 (cdr (assoc 11 (cdr (entget obj)))))
  (setq mid (ARCH:MIDPOINT pt1 pt2))
  (setvar "osmode" 0) 
  (setq leng (vla-get-length (vlax-ename->vla-object obj)))
  (setq course (atoi (rtos (/ leng 24) 2 0)))
  (command ".snap" "r" pt1 pt2)
  (setvar "snapmode" 0)
  (setvar "orthomode" 1)
  (setq scf (getvar "dimscale"))
  (command "insert" (strcat ARCH#CUSF "Builders Plan Service/Syms/Arch_blks/" "PN-HOOK") "ps" scf mid scf "" pause) 
  (setq las (entlast))
    (cond
    ((and (>= (angle pt1 pt2) 1.5708)(<= (angle pt1 pt2) 3.14159))
      (command ".array" las "" "r" course "" "-12")
      (command ".array" las "" "r" course "" "12")
    )
    ((or (<= (angle pt1 pt2) 1.5708)(>= (angle pt1 pt2) 3.14159))
      (command ".array" las "" "r" "" course "-12")
      (command ".array" las "" "r" "" course "12")
    )   
  ) 
  (command ".ungroup" "n" "HOOK" "")
  (command ".group" "c" "HOOK" "" (ssget "X" (list (cons 2 "PN-HOOK"))) "")   (prompt (strcat "\n* Angle = " (rtos (angle pt1 pt2) 2 5))) 
  ;;(ARCH:F_R-VAR)
  (princ))
Why is there never enough time to do it right, but always enough time to do it over?
BricsCAD 2020x64 Windows 10x64