请问用lisp能不能画这样的图?
我知道像这样的情况可以用块做出来,不知道用lisp能不能行?有没有高手愿意帮我写个?
弧的半径可以设定,根据设定的半径绘制,拾取点为圆弧的中心,箭头的长度等于圆弧半径的一半,箭头的宽度等于三分之一的箭头长,箭头角度为20度左右
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 sibelle_hu的微博 你可以参考一下大师的程序 http://lee-mac.com/arrowarc.html 谢谢,lisp我不会,刚学会怎么使用lisp程序,这个程序可以画弧形的箭头,可是与我的要求有很多差别的 ;; Arc to Bulge-Lee Mac
;; c - center
;; a1,a2 - start, end angle
;; r - radius
;; Returns: (<vertex> <bulge> <vertex>)
(defun LM:Arc->Bulge ( c a1 a2 r )
(list
(polar c a1 r)
( (lambda ( a ) (/ (sin a) (cos a)))
(/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
)
(polar c a2 r)
)
)
;;绘制圆弧 pt 圆心r 半径 ang1 起始弧度 ang2 结束弧度 l_lay 图层 l_col 颜色 l_lt 线型 l_lts 线型比例 l_lw 线宽
;;(sk_mk_arc01 pt r ang1 ang2 l_lay l_col l_lt l_lts l_lw)
(defun sk_mk_arc01(pt r ang1 ang2 l_lay l_col l_lt l_lts l_lw)
(if(and pt r ang1 ang2)
(entmakex (list '(0 . "ARC")
(cons 8 (if l_lay l_lay (getvar 'clayer)))
(if l_col (cons 62 l_col)(cons 62 256))
(if l_lt (cons 6 l_lt)(cons 6 "bylayer"))
(cons 48 (if l_lts l_lts (getvar 'celtscale)))
(if l_lw (cons 370 l_lw)(cons 370 0))
(cons 10 pt)
(cons 40 r)
(cons 50 ang1)
(cons 51 ang2)
)
)
)
)
(defun c:tt(/ANG1 ARC_LEN EN L OBJ P1 P2 PT R W ANG2 BULGE P3)
(if(and (setq r(getdist "\n半径:"))
(setq pt(getpoint "\n圆心:"))
)
(progn
(setq l(* 0.5 r))
(setq w(/ l 3.0))
(setq en(sk_mk_arc01 pt r 0 pi nil nil nil nil nil))
(setq obj(vlax-ename->vla-object en))
(setq arc_len(vla-get-arclength obj))
(setq p1(vlax-curve-getstartpoint obj))
(setq p2(vlax-curve-getPointAtDist obj (- arc_len l)))
(setq p3(vlax-curve-getEndpoint obj))
(setq ang1(angle pt p2 ))
(setq ang2 0)
(setq bulge(cadr(LM:Arc->Bulge pt ang2 ang1 r)))
(vla-delete obj)
(entmakex (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 3)
(cons 10 p1)
(cons 42 bulge)
(cons 10 p2)
(cons 40 w)
(cons 41 0)
(cons 10 p3)))
)
)
(princ)
)
本帖最后由 lucas_3333 于 2014-8-8 18:17 编辑
edata 发表于 2014-8-8 17:30 static/image/common/back.gif
E大,厉害!乐于助人!明经的活雷锋! 谢谢大师,请问能不能再帮忙加个选项?即输入L,箭头就在左侧,输入R箭头就在右侧? edata 发表于 2014-8-8 17:30 static/image/common/back.gif
大师,能不能也帮帮我这个问题?
http://bbs.mjtd.com/thread-111031-1-1.html ;; Arc to Bulge-Lee Mac
;; c - center
;; a1,a2 - start, end angle
;; r - radius
;; Returns: (<vertex> <bulge> <vertex>)
(defun LM:Arc->Bulge ( c a1 a2 r )
(list
(polar c a1 r)
( (lambda ( a ) (/ (sin a) (cos a)))
(/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
)
(polar c a2 r)
)
)
;;绘制圆弧 pt 圆心r 半径 ang1 起始弧度 ang2 结束弧度 l_lay 图层 l_col 颜色 l_lt 线型 l_lts 线型比例 l_lw 线宽
;;(sk_mk_arc01 pt r ang1 ang2 l_lay l_col l_lt l_lts l_lw)
(defun sk_mk_arc01(pt r ang1 ang2 l_lay l_col l_lt l_lts l_lw )
(if(and pt r ang1 ang2)
(entmakex (list '(0 . "ARC")
(cons 8 (if l_lay l_lay (getvar 'clayer)))
(if l_col (cons 62 l_col)(cons 62 256))
(if l_lt (cons 6 l_lt)(cons 6 "bylayer"))
(cons 48 (if l_lts l_lts (getvar 'celtscale)))
(if l_lw (cons 370 l_lw)(cons 370 0))
(cons 10 pt)
(cons 40 r)
(cons 50 ang1)
(cons 51 ang2)
)
)
)
)
(defun c:tt(/ANG1 ARC_LEN EN L OBJ P1 P2 PT R W ANG2 BULGE P3 keys)
(or *sk_rad_jt001* (setq *sk_rad_jt001* 10.0))
(setq *sk_rad_jt001*(cond((getdist (strcat "\n输入半径<" (rtos *sk_rad_jt001* 2 4) ">:")))(*sk_rad_jt001*)))
(princ (strcat "\r当前半径<" (rtos *sk_rad_jt001* 2 4) ">:"))
(if(setq pt(getpoint "\n圆心:"))
(progn
(setq r *sk_rad_jt001*)
(initget "L R _l r")
(setq keys(cond((getkword "\r输入左右方向<L>: "))("l")))
(setq l(* 0.5 r))
(setq w(/ l 3.0))
(setq en(sk_mk_arc01 pt r 0 pi nil nil nil nil nil))
(setq obj(vlax-ename->vla-object en))
(setq arc_len(vla-get-arclength obj))
(setq p1(if (= keys "l") (vlax-curve-getstartpoint obj) (vlax-curve-getEndpoint obj)))
(setq p2(vlax-curve-getPointAtDist obj (if (= keys "l") (- arc_len l) l)))
(setq p3(if (= keys "l") (vlax-curve-getEndpoint obj)(vlax-curve-getstartpoint obj) ))
(setq ang1(angle pt p2 ))
(setq ang2 (if (= keys "l") 0 pi ))
(setq bulge(cadr(LM:Arc->Bulge pt (if (= keys "l") ang2 ang1 ) (if (= keys "l") ang1 ang2 ) r)))
(vla-delete obj)
(entmakex (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 3)
(cons 10 p1)
(cons 42 (if (= keys "l") bulge (* -1.0 bulge) ))
(cons 10 p2)
(cons 40 w)
(cons 41 0)
(cons 10 p3)))
)
)
(princ)
) edata 发表于 2014-8-8 20:35 static/image/common/back.gif
大师,非常好!谢谢了! 本帖最后由 ysq101 于 2014-8-9 12:17 编辑
Z版主直接给了鱼
我来点思路,楼主想学LIPS还是自己动手来吧
说说我的思路:
2段多线段 修改剪头部分的线宽即可
自己研究一下吧
其它箭头可以做成动态的好点吧
页:
[1]
2