明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3998|回复: 14

[源码] ★★★★动态信息查询(精简+注释版),给初学者~~~

[复制链接]
发表于 2014-7-2 17:34:52 | 显示全部楼层 |阅读模式
  1. ;---------------------------------------------------------------------------------------------------------------------
  2. ; ★动态信息查询(精简+注释版)
  3. ; ★版权归原作者所有,精简目的只是让初学者更容易看懂
  4. ;---------------------------------------------------------------------------------------------------------------------
  5. (defun C:tt (/ myerr fx add_solid add_tex dis olderr oldos oldfill ss pd gr pt ent entold)
  6. (defun myerr (msg)
  7.     (setq *error* olderr)
  8.     (command "_.undo" "_b")
  9.     (princ)
  10.    )
  11. ;画矩形提示框
  12. (defun add_solid (p1 p2 p3 p4)
  13.     (entmakex (list (cons 0 "SOLID")
  14.         (cons 100 "AcDbEntity")
  15.         (cons 62 8);提示框背景颜色
  16.         (cons 100 "AcDbTrace")
  17.         (cons 10 p1)
  18.         (cons 11 p2)
  19.         (cons 12 p3)
  20.         (cons 13 p4)
  21.         )
  22.     )
  23.   )
  24. ;写列表文本
  25. (defun add_text (pt h ang txt style jus)
  26.     (entmakex (list
  27.         (cons 0 "TEXT")
  28.         (cons 100 "AcDbEntity")
  29.         (cons 62 7);提示框字体颜色
  30.         (cons 100 "AcDbText")
  31.         (cons 10 pt)
  32.         (cons 40 h)
  33.         (cons 1 txt)
  34.         (cons 7 style)
  35.         )
  36.     )
  37.   )
  38. ;处理子程序
  39. (defun dis (ent / obj laynm name lst h n)
  40.     (setq obj (vlax-ename->vla-object ent)
  41.           laynm  (strcat "图层:" (vlax-get obj 'Layer))
  42.           name  (vlax-get obj 'ObjectName)
  43.           )
  44.     (cond
  45.       ((= name "AcDbLine");图元为直线时执行,若使用者需要增加功能,在cond里面添加即可~
  46.        (setq lst (list
  47.                     "【直线】"
  48.                     laynm
  49.                     (strcat "长度:" (rtos (vlax-get obj 'Length) 2 0))
  50.                   )
  51.           )
  52.       )
  53.       ((= name "AcDbPolyline");图元为多段线执行
  54.        (setq lst (list
  55.                     "【多段线】"
  56.                     laynm
  57.                     (strcat "多段线:"
  58.                         (if (= (vla-get-Closed obj) :vlax-false)
  59.                         "不闭合"
  60.                         "闭合"
  61.                         )
  62.                       )
  63.                     (strcat "面积:" (rtos (vlax-get obj 'Area) 2 2))
  64.                   )
  65.            )
  66.       )
  67.       (T
  68.        (setq lst (list "【暂不支持】" laynm))
  69.       )
  70.     );cond
  71.     (setq ss (ssadd)
  72.           h (/ (getvar "viewsize") 60);视图大小,修改"60"可以调整提示框大小
  73.           n (* 1.4 (1+ (/ (apply 'max (mapcar 'strlen lst)) 2.0)));最长字符串决定提示框最大宽度
  74.         )
  75.     (ssadd
  76.       (add_solid
  77.          pt
  78.          (polar pt 0 (* n h))
  79.          (setq pt1 (polar pt (* pi 1.5) (+ h (* 1.6 h (length lst)))));表长度决定提示框高度
  80.          (polar pt1 0 (* n h))
  81.          )
  82.       ss
  83.     )
  84.     (setq pt (polar pt 0 (* n h 0.1)))
  85.     (setq n -1)
  86.     (repeat (length lst);repeat
  87.       (ssadd
  88.         (add_text
  89.           (setq pt (polar pt (* pi 1.5) (* 1.6 h)))
  90.            h
  91.            0
  92.            (nth (setq n (1+ n)) lst)
  93.            "新宋体"
  94.            1
  95.        )
  96.        ss
  97.       )
  98.     );repeat
  99.   )
  100. ;开始程序=======================================================================*
  101.   (vl-load-com)
  102.   (command "_.undo" "_m")
  103.   (prompt "\n***移动鼠标掠过对象查看信息!***")
  104.   (setq  olderr  *error*
  105.   *error*  myerr
  106.   )
  107.   (setq oldos (getvar "osmode"))
  108.   (setq oldfill (getvar "fillmode"))
  109.   (setvar "osmode" 0)
  110.   (setvar "fillmode" 1)
  111.   (setvar "cmdecho" 0)
  112.   (if (not (tblsearch "style" "新宋体"))
  113.     (command "_.style" "新宋体" "新宋体" "" "" "" "" "")
  114.   )
  115. ;-------------(开始)前处理完毕--------------------------------------------
  116.   (setq ss (ssadd))
  117.   (while (not pd);while1
  118.     (while ;while
  119.     (not (progn
  120.       (setq gr (grread T 1));鼠标动作
  121.       (if (= (car gr) 5)
  122.         (setq pt  (cadr gr);鼠标坐标
  123.              ent (nentselp pt);选择物件
  124.              ent (if (and ent (= (type (last (last ent))) 'ename))
  125.                      (last (last ent))
  126.                      (car ent)
  127.                    )
  128.               )
  129.         (setq pd T)
  130.       );if
  131.     )
  132.      )
  133.     );while2
  134.     (if (and (not pd) (not (equal ent entold)) (not (ssmemb ent ss)))
  135.       (progn
  136.           (if entold (redraw entold 4))
  137.           (if ss (command "_.erase" ss ""))
  138.           (redraw ent 3)
  139.           (dis ent)
  140.           (setq entold ent)
  141.       )
  142.     )
  143.   );while1
  144.   (if entold (redraw entold 4))
  145.   (if ss (command "_.erase" ss ""))
  146.   (setvar "osmode" oldos)
  147.   (setvar "fillmode" oldfill)
  148.   (setq *error* olderr)
  149.   (princ)
  150. );defun
  151. (prompt "\n ★★★★动态信息查询(精简+注释版)\n ★★★★版权归原作者所有,精简目的只是让初学者更容易看懂 \n")
  152. (princ)
★★★★动态信息查询(精简+注释版) ★★★★版权归原作者所有,精简目的只是让初学者更容易看懂
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-11-21 23:37:18 | 显示全部楼层

这个好使.!学习了。
发表于 2014-7-2 19:34:51 | 显示全部楼层
这个好使.!学习了。
发表于 2014-7-2 20:47:12 | 显示全部楼层
好用,
发表于 2014-7-3 08:16:01 | 显示全部楼层
不错!!!!!!
发表于 2014-7-7 08:36:47 | 显示全部楼层
出彩,真的狠精彩,学习了。
发表于 2014-7-8 08:16:57 | 显示全部楼层
程序不错,谢谢了
发表于 2014-7-8 13:42:08 | 显示全部楼层
初学者的   好老师   支持了
发表于 2014-7-10 09:31:16 来自手机 | 显示全部楼层
07用不了?
发表于 2014-7-12 11:15:30 | 显示全部楼层
只能查看直线
 楼主| 发表于 2014-7-12 11:59:52 | 显示全部楼层
meja 发表于 2014-7-12 11:15
只能查看直线

这个是精简出来给大家更容易看清代码的,完整的论坛里面有。如果你是要实用性,最好去下载人家原来那个!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 21:02 , Processed in 0.197192 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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