lisperado 发表于 2019-12-19 18:01:31

尘缘一生 发表于 2019-12-19 09:46
代码我看了,挺好的,无奈我改不了源码,我不要写数字,我要画箭头,我写好了一个,也实现了。

箭头?leader不就行了吗?
可否上载图片示范为何画箭头要写代码?

p/s:猜测可能是block箭头块?

尘缘一生 发表于 2019-12-19 18:10:54

lisperado 发表于 2019-12-19 18:01
箭头?leader不就行了吗?
可否上载图片示范为何画箭头要写代码?



;;;;;;;三领-定距拉伸;;;;;;框选样式代码;;;;;;;;;;;;;;;;;;;;;;;;
;;:1:可以定点定距离
;;:2:可以任意拉伸
;;:3:可以输入距离拉伸
;;;4:和原CAD一样,具有拖曳效果
(defun c:tt (/ pt1 pt2 ang ss oldorh oldosm)
        (sl-cishu)
        (setq pt1 (getpoint "\n第一框角点: ")
                pt2 (getcorner pt1 "\n第二框角点: ")
        )
        (prompt "\n 移动鼠标定-->拉伸方向:")
        (command "select" "c" pt1 pt2 "")
        (setq ss (ssget "p"))
        (setq pt1 (yy:mid pt1 pt2))
        (setq ang (4dire1 pt1))
        (sldis)
        (setq sldis1 (/ sl-dis (getvar "dimlfac")))
        (setq pt2 (polar pt1 ang sldis1))
        (command "_.stretch" ss "" pt1 pt2)
        (princ)
)
;;说明:;;方向轮函数=【开始】==========================(一级)==============================
;;说明:;pt1 方向轮几点    返回 ang取得角度
(defun 4dire1 (pt1 / gr grr p1 os loop lastss)
        ;;;;;;;;生成方位图--------------------------------
        (defun entmake-fx (pt1 pt / ss1)
                (if lastss (SL:PickSet-Erase lastss))
                (slslx pt1 0)
                (setq ss1 (entlast)) ;;;;;;构造最后一个实体选择集
                (entmakeX            ;;;;;;;;;;;;;;;;;;;;;创建 LEADER 对象
                        (list '(0 . "LEADER")
                                '(100 . "AcDbEntity")
                                '(100 . "AcDbLeader")
                                '(40 . 0.9875)
                                (cons 62 1)
                                (cons 10 pt)
                                (cons 10 pt1)
                                (list -3
                                        (list "ACAD"
                                                '(1000 . "DSTYLE")
                                                '(1002 . "{")
                                                '(1070 . 41)
                                                (cons 1040 (* 5.0 SLBL));;;;;箭头大小
                                                '(1002 . "}")
                                        )
                                )
                        )
                )
                (entmake (list '(0 . "CIRCLE") (cons 62 6) (cons 6 "xx")(cons 10 pt1) (cons 40 (* SLBL 10.0))))
                (setq lastss (last_ent ss1))
        )
        (setq os (getvar "osmode"))
        (setvar "osmode" 0)
        (setq loop t)
(while loop
                (setq grr (grread t));请求输入
                (setq gr (car grr))
                (setq p1 (cadr grr))
                (cond
                        ((= gr 5);移动时
                                (setq ang (angle pt1 p1))
                                (if (and (>= ang 0.0)(< ang (* 0.25 pi)));;;向右
                                        (progn
                                                (setq pt (polar pt1 0 (* 15.0 slbl)))
                                                (setq ang 0.0)
                                        )
                                )
                                (if (>= ang 5.5) ;;;向右
                                        (progn
                                                (setq pt (polar pt1 0 (* 15.0 slbl)))
                                                (setq ang 0.0)
                                        )
                                )
                                (if (and (>= ang (* 0.25 pi))(< ang (* 0.75 pi))) ;;;;;向上
                                        (progn
                                                (setq pt (polar pt1 (* 0.5 pi) (* 15.0 slbl)))
                                                (setq ang (* 0.5 pi))
                                        )
                                )
                                (if (and (>= ang (* 0.75 pi))(< ang (* 1.25 pi))) ;;;;;向左
                                        (progn
                                                (setq pt (polar pt1 pi (* 15.0 slbl)))
                                                (setq ang pi)
                                        )
                                )
                                (if (and (>= ang (* 1.25 pi))(< ang (* 2.0 pi))) ;;;;;向下
                                        (progn
                                                (setq pt (polar pt1 (* 1.5 pi) (* 15.0 slbl)))
                                                (setq ang (* 1.5 pi))
                                        )
                                )
                                (entmake-fx pt1 pt)
                        )               
                        ((or(equal grr '(2 32));空格
                               (equal gr 3);左键
                               (equal grr '(2 13));回车
                               (equal grr'(11 0));右击
                       )
                                (setq loop nil)
                        )          
                )
        )
        (if lastss (SL:PickSet-Erase lastss))
        (redraw)
        (setvar "osmode" os)
        ang
)
;;说明:;;方向轮函数===================【结束】=====================================

ysq101 发表于 2019-12-20 00:26:51

很牛X的样子
大神为了少按一个键也够拼了

magicheno 发表于 2020-2-25 19:36:30

页: 1 [2]
查看完整版本: 关于CAD方向轮的思路