明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4760|回复: 10

[讨论] 标高符号源码解析与测试(左击缩小grread,生成对象entmakex应用)

[复制链接]
发表于 2014-1-20 21:15 | 显示全部楼层 |阅读模式
标高符号源码——左击缩小grread,生成对象entmakex形成选择集应用
常用图块用代码生成,可以省去打开种子文件拷贝的麻烦。标高符号,不可或缺。
子程序elev-symbol,返回生成的对象的选择集
  1. elev-symbol(str pt)
  2. ;函数elev-symbol(str pt),参数str:string pt:point,返回值,生成对象的选择集
  3. ;Desiged by 林霄云 2014年1月20日
复制代码
根据种子文件图例,是采用硬编码形式支座函数生成代码,即将标高符号插入点置为(0 0 0),获取其他相对点位置,为entmakex做准备。
为了将生成的对象进行其他缩放旋转操作,将entmakex的返回值,添加到选择集。所形成的选择集作为子函数的返回值。
针对标高文字,进行特殊处理,处理默认值,处理数字格式化,对于0,增加正负符号。
  1. (if (= "" str) (setq str "Hs")

  2. (if  (numberp (read str))
  3.    (progn (setvar "DIMZIN" 0)
  4.       (setq str (rtos (atof str) 2 3) ) ;格式化
  5.       (if  (= 0 (atof str))
  6.       (setq str (strcat "%%p" str)))
  7.       );progn
  8. )
  9. );if
对插入点进行处理,硬编码方案
  1. (setq pt-text10 (mapcar '+ pt '(350 325 0)))
  2. (setq pt-text11 (mapcar '+ pt '(460 325 0)))

  3. (setq pt-pl1 (mapcar '+ pt '(225 225 0)))
  4. (setq pt-pl2 (mapcar '+ pt '(-225 225 0)))
  5. (setq pt-pl3 (mapcar '+ pt '(1145 225 0)))

  6. (setq pt-l1 (mapcar '+ pt '(-275 0 0)))
  7. (setq pt-l2 (mapcar '+ pt '(275 0 0)))
生成选择集并返回
  1. (setq ss (ssadd)) ;设置选择集
  2. ;文字
  3. (ssadd (EntMakex (list '(0 . "TEXT") '(8 . "G_LEVEL(标高)") '(62 . 2) (cons 10 pt-text10) '(40 . 300) (cons 1 str) '(41 . 0.7) '(7 . "G_text") '(72 . 1) (cons 11 pt-text11) '(210 0 0 1))) ss)
  4. ;多线
  5. (ssadd (EntMakex (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(8 . "G_LEVEL(标高)") '(100 . "AcDbPolyline") '(90 . 4) '(43 . 0) (cons 10 pt-pl1) (cons 10 pt) (cons 10 pt-pl2) (cons 10 pt-pl3) '(210 0 0 1))) ss)
  6. ;直线
  7. (ssadd (EntMakex (list '(0 . "LINE") '(8 . "G_LEVEL(标高)") (cons 10 pt-l1) (cons 11 pt-l2) '(210 0 0 1))) ss)

  8. ss
使用entmakex生成对象时,涉及到,需要图层与字体样式检测,增加判断并使用entmake生成,代码置之前面。
  1. (setq layername "G_LEVEL(标高)")
  2. (if (null (tblobjname "LAYER" layername) )
  3. (entmake (list '(0 . "LAYER")
  4.         '(100 . "AcDbSymbolTableRecord")
  5.         '(100 . "AcDbLayerTableRecord")
  6.         '(70 . 0)
  7.         '(6 . "Continuous")   ;线型
  8.         (cons 2 layername)
  9.     '(62 . 7)  ;颜色
  10.         )
  11.     )
  12. );if


  13. (setq stylename "G_text")
  14. (if (null (tblobjname "STYLE" stylename) )
  15. (entmake (list '(0 . "STYLE")
  16.         '(100 . "AcDbSymbolTableRecord")
  17.         '(100 . "AcDbTextStyleTableRecord")
  18.         '(70 . 0)
  19.     '(42 . 300) ;默认字高
  20.     '(3 . "_bxsz.shx")
  21.     '(4 . "_bxfs.shx")
  22.         (cons 2 stylename)
  23.     '(40 . 0.0) ;字高
  24.     '(41 . 0.7) ;字宽比例
  25.     '(50 . 0.0) ;默认旋转角度
  26.         )
  27.     )
  28. );if
最后调用主函数C:ES() Elev-Symbol 标高符号,增加左击缩放,使用grread。并且,为了有可被接受的动态,并不失捕捉,使用getpoint获取插入点。
  1. (defun C:ES();Elev-Symbol 标高符号
  2. (setq pt '(0 0 0))
  3. (while (setq pt (getpoint pt "基点"))
  4.          
  5.         (setq ss (elev-symbol (getstring "输入标高值?[Hs]\n")  pt))
  6.       
  7.       ;捕捉左键,进行缩放测试
  8.       (prompt "\n比例为1:25时左击,1:100时右击继续\n")
  9.       (while (and (setq ptr (grread t 15 2))
  10.               (not (and (= 2 (car ptr)); 键盘事件
  11.                     (or (= 13 (cadr ptr)) (= 32 (cadr ptr))) ;_Enter Space
  12.             ))
  13.              (not (or (= (car ptr) 11) (= (car ptr) 25)));_Mouse Right button
  14.                           )   
  15.                  ; (redraw)
  16.       (cond ((= (car ptr) 3);_Mouse Left button
  17.          (command "scale" ss "" pt 0.25) ;左键进行0.25倍缩小,测试ss选择集方式可行。
  18.            ))
  19.            );while
  20.       ;捕捉左键,进行缩放测试
  21.    
  22.     );while
  23.   (princ)
  24. );es
  25. (princ "\nES  Elevation Symbol 标高符号命令加载成功\nDesigned by 林霄云 2014年1月20日")
  26. (princ)
使用左击进行比例缩小只是为了增加grread函数的应用,不同比例的输入逻辑,可以进一步改进。
结果:
详附图,能无误实现添加标高符号。
结论:
本文根据标高符号实例,测试了entmake生成图层,文字样式,测试了entmakex生成对象形成选择集,进行后续操作,测试了grread函数获取左击,右击,enter,space,进行缩放与退出操作。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +4 收起 理由
edata + 1 赞一个!
Gu_xl + 3 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-1-20 22:01 | 显示全部楼层
LZ很强大。
发表于 2014-1-21 08:15 | 显示全部楼层
支持小林一下
 楼主| 发表于 2014-1-21 12:21 | 显示全部楼层
很感谢老大的支持,但我必须更新一个版本,支持UCS,加强的grread应用。
标高符号v2源码解析与测试(左击缩小grread,生成对象entmakex应用,支持UCS)
http://bbs.mjtd.com/forum.php?mo ... amp;fromuid=7303580
发表于 2014-1-25 08:41 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2014-1-25 09:03 编辑

为什么要缩小呢?对于一张图而言,大小基本上是个定值吧?这个grread不容易控制大小吧?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-1-25 11:24 | 显示全部楼层
自贡黄明儒 发表于 2014-1-25 08:41
为什么要缩小呢?对于一张图而言,大小基本上是个定值吧?这个grread不容易控制大小吧?

黄老,感谢关照。缩小是为了实现在1:1的比例下做1:25的图。关于这个grread的操作,在v2版本上,我做了逻辑上的调整。也就是生成之后,可以进行大小,方向调整。当不需要此类调整时,可以右击,空格,enter退出。
发表于 2014-1-25 11:27 | 显示全部楼层
意义真不大
 楼主| 发表于 2014-1-25 11:48 | 显示全部楼层
xyp1964 发表于 2014-1-25 11:27
意义真不大

谢谢院长光顾,v2版本有更大的操作性。
关于这个标高符号,统一格式是我做这个的初衷。在任何情况下调用(即会补充图层和文字样式)。
一般对于结构专业,标高值,是手动或者用内容刷输入。
对于建筑专业,画立剖面时,需要计算数值,自动填充,对于我,意义真不大。
发表于 2014-1-25 16:10 | 显示全部楼层
没有钱啊,免费就好了。

评分

参与人数 1明经币 +1 金钱 +10 收起 理由
林霄云 + 1 + 10 淡定

查看全部评分

发表于 2015-12-26 21:15 | 显示全部楼层
同步学习…………
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-2-28 14:32 , Processed in 0.182706 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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