明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 尘缘一生

[提问] 关于CAD方向轮的思路

[复制链接]
发表于 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
)
;;说明:;;方向轮函数===================【结束】=====================================
发表于 2019-12-20 00:26:51 | 显示全部楼层
很牛X的样子
大神为了少按一个键也够拼了
回复 支持 0 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-18 07:49 , Processed in 0.149681 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表