TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started 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.
(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))
-
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.
-
This is the best I can come up with...for AutoCAD 2012
(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))
-
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
-
Thanks Alan
(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))