Lisp
Request
ผมต้องการเลือกจุดสองจุดที่วงกลมเล็ก
รูปซ้ายมือ
แล้วให้มันสร้างเส้นเซ็นเตอร์ให้เป็นเส้นสีแดงฝั่งขวามือ
รบกวนพี่ๆช่วยเขียนให้หน่อยครับ
(defun
c:RECL ()
(setq
old_cmdecho (getvar
"cmdecho"))
(setq
old_osnap (getvar "osmode"))
(setvar
"cmdecho" 0)
(setvar
"osmode" 37);; 1+4+32 1=endpoint 4=center 32= intersection
(setq p1 (getpoint "\nPick Start
Point : "))
(setq p2 (getcorner p1 "\nPick Corner
Point : "))
(setvar "osmode" 0)
(setq leng (distance p1 p2))
(setq pc (polar p1 (angle p1 p2) (/ leng
2.0))
pl (list (-(car pc)(/ leng 2.0))(cadr pc))
pr (list (+(car pc)(/ leng 2.0))(cadr pc))
pt (list (car pc)(+(cadr pc)(/ leng 2.0)))
pb (list (car pc)(-(cadr pc)(/ leng 2.0)))
)
(if (null (tblsearch "LType"
"center"));if null center line
(command "_linetype"
"load" "center" "acad.lin" "")
)
(command "_line" pl pr
"")
(setq ss0 (ssget "L"))
(command "_line" pt pb
"")
(setq ss1 (ssget "L"))
(command "_chprop" ss0 ss1
"" "_ltype" "center" "")
(setvar
"cmdecho" old_cmdecho)
(setvar
"osmode" old_osnap)
(princ)
)
;;---------------------------------------------------------------------
;;
แบบที่ 2 จะเป็นแบบเลือกครอบหัวเสาทีละหลายๆ เสาพร้อมกันทีเดียวเลย
;;---------------------------------------------------------------------
(defun
c:SREC ()
(setq
old_cmdecho (getvar
"cmdecho"))
(setq
old_osnap (getvar "osmode"))
(setvar
"cmdecho" 0)
(setvar
"osmode" 0)
(if
(null (tblsearch "LType" "center"));if null center line
(command "_linetype"
"load" "center" "acad.lin" "")
)
(setq
ss (ssget (list '(0 . "*POLYLINE"))))
(setq
i -1)
(repeat
(sslength ss)
(setq en (ssname ss (setq i (1+ i))))
(vla-getboundingbox
(vlax-ename->vla-object en) 'll 'ur)
(setq ll (vlax-safearray->list ll);;low
left
ur (vlax-safearray->list ur);;up
right
pc (polar ll (angle ll ur) (/
(distance ll ur) 2.0))
pl (list (-(car pc)(/ (distance ll ur) 2.0))(cadr pc))
pr (list (+(car pc)(/ (distance ll ur)
2.0))(cadr pc))
pt (list (car pc)(+(cadr pc)(/ (distance ll ur) 2.0)))
pb (list (car pc)(-(cadr pc)(/ (distance ll ur) 2.0)))
)
(command "_line" pl pr
"")
(setq ss0 (ssget "L"))
(command "_line" pt pb "")
(setq ss1 (ssget "L"))
(command "_chprop" ss0 ss1
"" "_ltype" "center" "")
(princ)
)
(setvar
"cmdecho" old_cmdecho)
(setvar
"osmode" old_osnap)
(princ)
)
;;----------------------------------------------------------------
;;----------------------------------------------------------------
รบกวนพี่ๆอีกครั้งครับ
ผมต้องการ
Lisp ให้คลิ๊กที่ จุดที่1 และจุดที่2 แล้วก็ให้โปรแกรมสร้างเส้น line ให้โดยเว้น Gap
ให้อัตโนมัติ
ตัวอย่างรูปด้านซ้าย
เมื่อเสร็จแล้วจะเป็นรูปแบบด้านขวา
ขั้นตอนการใช้งาน
1.คือใส่ค่า Gap เช่น 15
ก็จะเว้นจากชิ้นงาน 15 ทั้งสองฝั่ง
2.เลือกที่ขอบชิ้นงานทั้ง 2 ฝั่งแล้วสร้างเส้น Line
ที่มี Gap 15 ทั้งสองฝั่งให้
(defun
c:Lgap ()
(setq
old_cmdecho (getvar "cmdecho"))
(setq
old_osnap (getvar "osmode"))
(setvar
"cmdecho" 0)
(setvar
"osmode" 33)
(setq
p1 (getpoint "\nPick Start Point : "))
(setq
p2 (getpoint p1 "\nPick End Point : "))
(setvar
"osmode" 0)
(setq
gab 15.0);;Gab Distance
(setq
p1a (polar p1 (angle p1 p2) gab)
p2a
(polar p2 (angle p2 p1) gab)
)
(command
"_line" p1a p2a "")
(setvar
"cmdecho" old_cmdecho)
(setvar
"osmode" old_osnap)
(princ)
)
;;----------------------------------------------------------------
ตรงค่าที่เว้นอ่าครับผมอยากให้สามารถ
ป้อนค่าเข้าไปได้นะครับตรงนี้มันจะเว้นเท่าขนาด สเกลที่ใช้งาน ไม่ได้เว้น 15 ทุกครั้งนะครับ
(defun
c:Lgap ()
(setq
old_cmdecho (getvar "cmdecho"))
(setq
old_osnap (getvar "osmode"))
(setvar
"cmdecho" 0)
(setvar
"osmode" 33)
(or
gab (setq gab 15.0))
(setq
gabtemp
(getdist
(strcat "\n Enter Gab Distance : <"
(rtos
gab 2 2)
">:
"
)
;_ strcat
)
;_ getdist
)
;_ setq
(and
gabtemp (setq gab gabtemp))
(while
(setq p1 (getpoint "\nPick Start Point : "))
(setq
p2 (getpoint p1 "\nPick End Point : "))
(setvar
"osmode" 0)
;(setq
gab 15.0);;Gab Distance
(setq
p1a (polar p1 (angle p1 p2) gab)
p2a
(polar p2 (angle p2 p1) gab)
)
(command
"_line" p1a p2a "")
(setvar
"osmode" 33)
);while
(setvar
"cmdecho" old_cmdecho)
(setvar
"osmode" old_osnap)
(princ)
)