包哥 发表于 2023-7-10 20:10:05

关于动态索引文字的实现

本帖最后由 包哥 于 2023-7-10 20:18 编辑

题目大概是这样的:拾取一个圆,给出直径动态索引标注,如下图GIF演示,主要是动态文字如何实现,在确定索引转折点之前,必须实时显示,不能是拾取索引转折点之后才显示。

liuhe 发表于 2023-7-10 20:10:06

把你的源程序放出来改改就可以了

包哥 发表于 2023-7-11 09:52:28

liuhe 发表于 2023-7-11 08:36
把你的源程序放出来改改就可以了

(DEFUN C:tt ()                     
(setq ss (ssadd))   
(VL-LOAD-COM)                  
(setvar "osmode" 0)
(if (= nil (tblsearch "style" "索引文字"))                                 
   (command "-style" "索引文字" "黑体" 300 0.70 0 "n" "n")      
)
(command "layer" "m" "结-大样文字" "c" "7" "" "lt" "CONTINUOUS" "" "")
(command "clayer" "结-大样文字")
(prompt "\n<<请框选需要索引的一个圆>>:")
(setq ss (ssget '((0 . "CIRCLE"))))   
(setq cen (cdr (assoc 10 (entget (ssname ss 0)))))   ;圆心
(setq rr (cdr (assoc 40 (entget (ssname ss 0)))))      ;半径
(command "undo" "be")         
(SETQ LOOP T)      
(PROMPT "\n<请指定索引线转折点: >")
(WHILE LOOP      
      (SETQ GR (GRREAD T 15 2))   
      (SETQ CODE (CAR GR))         
      (SETQ GBWZ (CADR GR))      
      (COND
      ((OR (= CODE 3) (= CODE 25) (= CODE 2))   
            (SETQ LOOP NIL)         
      )
      ((= CODE 5)                               ;移动鼠标动作
            (redraw)                              ;视图更新
            (setq GBWZ (cadr GR))               ;光标所在位置点(即索引线转折点)
            (if (>= (car GBWZ) (car cen))               ;如果鼠标位置在圆心的右侧
               (SETQ SYZD (h-xiayidian GBWZ 2300 0))      ;程序自动确定索引线终点,水平索引段默认2300长
               (SETQ SYZD (h-xiayidian GBWZ -2300 0))   ;程序自动确定索引线终点,水平索引段默认2300长
            )
            (grdraw cen GBWZ 252 252)                     ;将圆心和索引线转折点连接,绘制斜向跟踪线
            (grdraw GBWZ SYZD 252 252)                  ;将圆心和索引线转折点连接,绘制水平跟踪线
      )
      )
)
(redraw)         
(entmake (list '(0 . "LINE") (cons 8 "结-大样文字") (cons 10 cen) (cons 11 GBWZ)))   ;画第一段索引线(斜线)         
(entmake (list '(0 . "LINE") (cons 8 "结-大样文字") (cons 10 GBWZ) (cons 11 SYZD)))    ;画第二段索引线(水平线)
(if (and (>= (atof (angtos (angle GBWZ SYZD))) 0) (<= (atof (angtos (angle GBWZ SYZD))) 90))         
    (h-wz1 (polar SYZD (+ (angtof "90") (angle GBWZ SYZD)) 80) (angtos (angle GBWZ SYZD)) (strcat "圆的直径=" (rtos (* 2.0 rr) 2 0)))   ;书写索引文字,右下对齐   
    (h-wz2 (polar SYZD (+ (angtof "90") (angle SYZD GBWZ)) 80) (angtos (angle SYZD GBWZ)) (strcat "圆的直径=" (rtos (* 2.0 rr) 2 0)))   ;书写索引文字,左下对齐
)
(command "undo" "e")                        
(setvar "osmode" 16383)
(PRINC)
)

(defun h-xiayidian (ppt1 deltax deltay)            
   (list (+ (car ppt1) deltax) (+ (cadr ppt1) deltay))
)
(defun h-wz1 (ppt1 jiaodu neirong)         
(command "textstyle" "索引文字")               
(command "text" "j" "BR" ppt1 jiaodu neirong)   
(princ)
)
(defun h-wz2 (ppt1 jiaodu neirong)         
(command "textstyle" "索引文字")            
(command "text" "j" "BL" ppt1 jiaodu neirong)
(princ)
)
(PRINC)

包哥 发表于 2023-7-11 09:55:41

目前只能实现这种效果,文字不能跟随鼠标动态显示

d1742647821 发表于 2023-7-11 11:19:21


比较基础,一个jig,另外,提问时要注明想要什么语言,这是cad二次开发论坛,不是lisp论坛


attach://128327.flv

start4444 发表于 2023-7-11 11:31:26

原程序已经很好的实现了,别搞那些花里胡哨的东西为好

包哥 发表于 2023-7-11 11:42:23

已实现,谢谢各位!

包哥 发表于 2023-7-11 11:48:44

liuhe 发表于 2023-7-11 08:36
把你的源程序放出来改改就可以了

感谢{:1_1:}

包哥 发表于 2023-7-11 11:50:38

d1742647821 发表于 2023-7-11 11:19
比较基础,一个jig,另外,提问时要注明想要什么语言,这是cad二次开发论坛,不是lisp论坛

好的,下次注意{:1_1:}

不一样地设计 发表于 2023-8-15 17:29:42

包哥 发表于 2023-7-11 11:42
已实现,谢谢各位!

贴出修改的学习一下吧
页: [1]
查看完整版本: 关于动态索引文字的实现