明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6253|回复: 12

[源码] 属性块形式的标高标注程序!

[复制链接]
发表于 2015-4-20 16:01:50 | 显示全部楼层 |阅读模式
欢迎来拍砖
说明:由于本人经常要用标高做一些计算(尤其是总图),所以个人认为做成属性标高有利于其他程序直接调用数据(比如说计算总图排水坡度坡向等),所以用标高块的形式做标高,喜欢的可以拿去用用。。。。
  1. ;创建4种标高形式的属性块(实心)
  2. (defun Make-Block-4BGS( / mkblock-bg lst n)
  3.   (defun mkblock-bg (blkname 4pt p)
  4.     (entmake (list  (cons 0 "BLOCK") (cons 2 blkname) '(70 . 2) '(10 0 0)))
  5.     (entmake (append (list '(0 . "LWPOLYLINE") '(8 . "0") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length 4pt)))
  6.                      (mapcar '(lambda (pt)(cons 10 pt)) 4pt)
  7.                      )
  8.              )
  9.           (entmake (list '(0 . "LINE") '(8 . "0") '(10 -3 0) '(11 3 0)));是否要小短线,不要则删除此行
  10.           (entmake (list '(0 . "SOLID") '(8 . "0") (cons 10 (car 4pt)) (cons 11 (car 4pt)) (cons 12 (cadr 4pt)) (cons 13 (caddr 4pt))));是否实心,不要实心则删除此行
  11.     (entmake (list '(0 . "ATTDEF") '(1 . "0.000") '(2 . "H") '(3 . "H") '(70 . 0) '(7 . "Standard") '(8 . "0")
  12.                             (cons 10 P) (cons 11 P) '(40 . 3.5) '(41 . 0.7)  '(50 . 0.0) '(51 . 0.0)  '(71 . 0) '(72 . 0)   '(73 . 0)
  13.                          )
  14.              )
  15.     (entmake '((0 . "endblk")))
  16.     )
  17.   (setq lst '(
  18.               ("1001-标高S" ((3 3)(0 0)(-3 3)(12 3)) (3 3.5));标高块名称 点表 文字位置
  19.               ("1002-标高S" ((-3 3)(0 0)(3 3)(-12 3)) (-12 3.5))
  20.               ("1003-标高S" ((-3 -3)(0 0)(3 -3)(-12 -3)) (-12 -7.0))
  21.               ("1004-标高S" ((3 -3)(0 0)(-3 -3)(12 -3)) (3 -7.0))
  22.               )
  23.         )
  24.   (foreach n lst
  25.     (if (not (tblsearch "block" (car n)))
  26.       (mkblock-bg (car n) (cadr n) (caddr n))
  27.       )
  28.     )
  29.   )
  30. ;主程序1,手动输入标高,适用于总图部分标注各点标高
  31. (defun c:sdbg( / p1 ang bg)
  32.   (princ "\n 手动输入标高,适用于总图部分标注各点标高!")
  33.   (Make-Block-4BGK)
  34.   (while (setq p1 (getpoint"\n基点位置:"))
  35.     (setq ang (getangle p1 "方向: ")
  36.           bg (rtos (getreal "输入标高:") 2 3)
  37.           )
  38.     (cond
  39.       ((< ang (* 0.5 pi))(setq blkname "1001-标高S"))
  40.       ((< ang pi)    (setq blkname "1002-标高"))
  41.       ((< ang (* 1.5 pi))(setq blkname "1003-标高S"))
  42.       ((< ang (* 2 pi)) (setq blkname "1004-标高S"))
  43.     )
  44.     (command "_insert" blkname p1 1 1 0 bg)
  45.   )
  46.   (princ "谢谢使用!")
  47.   (princ)
  48. )

  49. ;主程序2,连续标高标注,适用于建筑立面连续标注标高
  50. (defun c:lxbg( / bl p1 ang y1 bg1 bg2 blkname)
  51.   (princ "\n 连续标高标注,适用于建筑立面连续标注标高!")
  52.   (setq BL (getreal"\设置比例<1:1000>:"))
  53.   (if (null bl) (setq bl 1000))
  54.   (Make-Block-4BGS)
  55.   (setq p1 (getpoint"\起点位置:")
  56.         ang (getangle p1 "方向: ")
  57.         bg1 (getreal "起点标高:")
  58.         y1 (- (cadr p1) (* bg1 BL))
  59.         bg1 (rtos bg1 2 3)        
  60.        )
  61.     (cond
  62.       ((< ang (* 0.5 pi))(setq blkname "1001-标高S"))
  63.       ((< ang pi)    (setq blkname "1002-标高"))
  64.       ((< ang (* 1.5 pi))(setq blkname "1003-标高S"))
  65.       ((< ang (* 2 pi)) (setq blkname "1004-标高S"))
  66.     )
  67.   (command "_insert" blkname p1 BL BL 0 bg1)
  68.   (while (setq p2 (getpoint"\n下一点:"))
  69.     (setq bg2 (rtos(/ (- (cadr p2) y1) BL)2 3))
  70.     (command "_insert" blkname p2 BL BL 0 bg2)
  71.   )
  72.   (princ "谢谢使用!")
  73.   (princ)
  74. )

评分

参与人数 1明经币 +1 收起 理由
寒潮大冬瓜 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2024-8-25 17:55:52 | 显示全部楼层
yangchao2005090 发表于 2019-5-18 22:23
请问属性块如何设置成三角新呀

;(entmake (list '(0 . "LINE") '(8 . "0") '(10 -3 0) '(11 3 0)));是否要小短线,不要则删除此行
          ;(entmake (list '(0 . "SOLID") '(8 . "0") (cons 10 (car 4pt)) (cons 11 (car 4pt)) (cons 12 (cadr 4pt)) (cons 13 (caddr 4pt))));是否实心,不要实心则删除此行
代码里有提示!
楼主辛苦了!四个象限分别设置四个块来创建
发表于 2024-8-25 21:29:09 | 显示全部楼层
本帖最后由 寒潮大冬瓜 于 2024-8-25 21:33 编辑

期待大侠在代码里实现“中望CAD建筑版”标高功能
利用CAD字段制作动态变化的标高图块  http://www.360doc.com/content/18/0328/21/9816594_741092421.shtml

本帖子中包含更多资源

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

x
发表于 2019-5-18 22:23:01 | 显示全部楼层
请问属性块如何设置成三角新呀
 楼主| 发表于 2015-4-20 16:05:27 | 显示全部楼层
大意了一点(Make-Block-4BGK)应该为(Make-Block-4BGS),这里调用的是做4个实心标高块~~~~~
发表于 2015-4-20 22:34:47 | 显示全部楼层
感谢 77077 分享程序,谢谢!
发表于 2015-4-21 08:56:56 | 显示全部楼层
最好有个演示,一目了然。
发表于 2015-4-29 10:55:22 | 显示全部楼层
有两个问题:
1.第40行“1002-标高”少个S。
2.需要修改两个系统变量才能正常运行:ATTDIA=0,ATTREQ=1。
发表于 2015-5-1 22:40:11 | 显示全部楼层
gaics 发表于 2015-4-29 10:55
有两个问题:
1.第40行“1002-标高”少个S。
2.需要修改两个系统变量才能正常运行:ATTDIA=0,ATTREQ=1。

在哪修改系统变量
发表于 2015-5-1 22:48:40 | 显示全部楼层
修改了,加载后sdbg和lxbg提示是无效命令
发表于 2015-5-28 22:39:56 | 显示全部楼层
有错误啊 哦呃
发表于 2015-5-29 09:26:31 | 显示全部楼层
程序有点小问题,在新建的dwg文件中可以运行,但在打开已有的图后,运行程序出错
发表于 2015-5-29 12:27:21 | 显示全部楼层
本帖最后由 tumu2008323 于 2015-5-29 22:06 编辑

修改了可以使用,手动标高也添加输入比例,感谢原作者,很好用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 19:30 , Processed in 0.179251 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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