TheSwamp

Code Red => AutoLISP (Vanilla / Visual) => Topic started by: GDF on April 03, 2017, 09:47:43 AM

Title: Array Help
Post by: GDF 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))
Title: Re: Array Help
Post by: Grrr1337 on April 04, 2017, 06:05:16 AM
Perhaps look into ArrayRectangular (https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-D8F15232-7297-4C90-86A4-0A0887D4938B-htm.html) and ArrayPolar (https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-34726D12-C973-47E4-86A1-DBD410FE1477-htm.html) methods.
Title: Re: Array Help
Post by: GDF 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))

Title: Re: Array Help
Post by: CAB 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
Title: Re: Array Help
Post by: GDF 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))