I have this code, hope it help.
It try to get automatically the with for the objects, but only works in WCS, in other case you have to enter it manually.
Hope it helps.
(defun c:docyl (/ p1 p2 obj ll ur ltp sc ent an OldOsmode DIR FILE VARLST VARLT X)
(vl-arx-import 'BPOLY)
(or (findfile "cyl1.pat")
(progn
(setq dir (vl-filename-directory (findfile "acad.exe"))
file (open (strcat dir "\\cyl1.pat")
"w"
)
)
(mapcar (function(lambda (x)
(princ x file)
(princ "\n" file)
))
(list
"*cyl1,Cylinder effect" "0, 0,0.01, 0,1"
"0, 0,0.02, 0,1" "0, 0,0.04, 0,1"
"0, 0,0.08, 0,1" "0, 0,0.16, 0,1"
"0, 0,0.30, 0,1" "0, 0,0.50, 0,1"
"0, 0,0.70, 0,1" "0, 0,0.84, 0,1"
"0, 0,0.92, 0,1" "0, 0,0.96, 0,1"
"0, 0,0.98, 0,1" "0, 0,0.99, 0,1"
)
)
(close file)
)
)
(foreach var
'(("cmdecho" . 0)
("osmode" . nil)
("cecolor" . "8")
("snapbase" . nil)
("hporiginmode" . nil)
("hporigin" . nil)
)
(setq varlst (cons (cons (car var) (getvar (car var)))
Varlst
)
)
(if (cdr var)
(setvar (car var) (cdr var))
)
)
(or sc (setq sc 1.00))
(or an (setq an (/ pi 2)))
(setq OldOsmode (getvar "osmode"))
(if (/= (logand oldosmode 16384) 16384)
(setvar "osmode" (+ oldosmode 16384))
)
(setq ent (bpoly (getpoint "\n Specify internal point:"))
)
(if ent
(progn
(setvar "osmode" oldosmode)
(setq
p1 (getpoint (strcat "\n Specify first point for distance: <"
(rtos sc 2 2)
">"
)
)
)
(if p1
(setq p2 (getpoint p1 "\n Specify second point: ")
)
(progn
(vla-getboundingbox
(vlax-ename->vla-object ent)
'll
'ur
)
(setq
ltp (mapcar 'vlax-safearray->list (list ll ur))
p1 (car ltp)
p2 (list (car (cadr ltp)) (cadr (car ltp)))
)
)
)
; (command "line" (trans p1 0 1) (trans
; p2 0
; 1))
(setq sc (distance (trans p1 0 1) (trans p2 0 1))
an (+ (angle p1 p2) (/ pi 2))
)
(if (>= (atof (substr (getvar "acadver") 1 4)) 16.2)
(progn
(setvar "hporiginmode" 0)
(setvar "hporigin" (reverse (cdr (reverse p1))))
)
(setvar "snapbase" (reverse (cdr (reverse p1))))
)
(command "-bhatch"
"p"
"CYL1"
sc
(radian->degrees an)
"s"
ent
""
""
)
(entdel ent)
)
)
(if varlst
(mapcar '(lambda (x)
(setvar (car x) (cdr x))
)
varlt
)
)
(princ)
)
(DEFUN Radian->Degrees (nbrOfRadians /)
(* 180.0 (/ nbrOfRadians PI))
) ;_ end of defun