属性块形式的标高标注程序!
欢迎来拍砖说明:由于本人经常要用标高做一些计算(尤其是总图),所以个人认为做成属性标高有利于其他程序直接调用数据(比如说计算总图排水坡度坡向等),所以用标高块的形式做标高,喜欢的可以拿去用用。。。。;创建4种标高形式的属性块(实心)
(defun Make-Block-4BGS( / mkblock-bg lst n)
(defun mkblock-bg (blkname 4pt p)
(entmake (list(cons 0 "BLOCK") (cons 2 blkname) '(70 . 2) '(10 0 0)))
(entmake (append (list '(0 . "LWPOLYLINE") '(8 . "0") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length 4pt)))
(mapcar '(lambda (pt)(cons 10 pt)) 4pt)
)
)
(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))));是否实心,不要实心则删除此行
(entmake (list '(0 . "ATTDEF") '(1 . "0.000") '(2 . "H") '(3 . "H") '(70 . 0) '(7 . "Standard") '(8 . "0")
(cons 10 P) (cons 11 P) '(40 . 3.5) '(41 . 0.7)'(50 . 0.0) '(51 . 0.0)'(71 . 0) '(72 . 0) '(73 . 0)
)
)
(entmake '((0 . "endblk")))
)
(setq lst '(
("1001-标高S" ((3 3)(0 0)(-3 3)(12 3)) (3 3.5));标高块名称 点表 文字位置
("1002-标高S" ((-3 3)(0 0)(3 3)(-12 3)) (-12 3.5))
("1003-标高S" ((-3 -3)(0 0)(3 -3)(-12 -3)) (-12 -7.0))
("1004-标高S" ((3 -3)(0 0)(-3 -3)(12 -3)) (3 -7.0))
)
)
(foreach n lst
(if (not (tblsearch "block" (car n)))
(mkblock-bg (car n) (cadr n) (caddr n))
)
)
)
;主程序1,手动输入标高,适用于总图部分标注各点标高
(defun c:sdbg( / p1 ang bg)
(princ "\n 手动输入标高,适用于总图部分标注各点标高!")
(Make-Block-4BGK)
(while (setq p1 (getpoint"\n基点位置:"))
(setq ang (getangle p1 "方向: ")
bg (rtos (getreal "输入标高:") 2 3)
)
(cond
((< ang (* 0.5 pi))(setq blkname "1001-标高S"))
((< ang pi) (setq blkname "1002-标高"))
((< ang (* 1.5 pi))(setq blkname "1003-标高S"))
((< ang (* 2 pi)) (setq blkname "1004-标高S"))
)
(command "_insert" blkname p1 1 1 0 bg)
)
(princ "谢谢使用!")
(princ)
)
;主程序2,连续标高标注,适用于建筑立面连续标注标高
(defun c:lxbg( / bl p1 ang y1 bg1 bg2 blkname)
(princ "\n 连续标高标注,适用于建筑立面连续标注标高!")
(setq BL (getreal"\设置比例<1:1000>:"))
(if (null bl) (setq bl 1000))
(Make-Block-4BGS)
(setq p1 (getpoint"\起点位置:")
ang (getangle p1 "方向: ")
bg1 (getreal "起点标高:")
y1 (- (cadr p1) (* bg1 BL))
bg1 (rtos bg1 2 3)
)
(cond
((< ang (* 0.5 pi))(setq blkname "1001-标高S"))
((< ang pi) (setq blkname "1002-标高"))
((< ang (* 1.5 pi))(setq blkname "1003-标高S"))
((< ang (* 2 pi)) (setq blkname "1004-标高S"))
)
(command "_insert" blkname p1 BL BL 0 bg1)
(while (setq p2 (getpoint"\n下一点:"))
(setq bg2 (rtos(/ (- (cadr p2) y1) BL)2 3))
(command "_insert" blkname p2 BL BL 0 bg2)
)
(princ "谢谢使用!")
(princ)
) 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:33 编辑
期待大侠在代码里实现“中望CAD建筑版”标高功能
利用CAD字段制作动态变化的标高图块http://www.360doc.com/content/18/0328/21/9816594_741092421.shtml
请问属性块如何设置成三角新呀 大意了一点(Make-Block-4BGK)应该为(Make-Block-4BGS),这里调用的是做4个实心标高块~~~~~ 感谢 77077 分享程序,谢谢! 最好有个演示,一目了然。 有两个问题:
1.第40行“1002-标高”少个S。
2.需要修改两个系统变量才能正常运行:ATTDIA=0,ATTREQ=1。 gaics 发表于 2015-4-29 10:55 static/image/common/back.gif
有两个问题:
1.第40行“1002-标高”少个S。
2.需要修改两个系统变量才能正常运行:ATTDIA=0,ATTREQ=1。
在哪修改系统变量 修改了,加载后sdbg和lxbg提示是无效命令 有错误啊 哦呃 程序有点小问题,在新建的dwg文件中可以运行,但在打开已有的图后,运行程序出错 本帖最后由 tumu2008323 于 2015-5-29 22:06 编辑
修改了可以使用,手动标高也添加输入比例,感谢原作者,很好用
页:
[1]
2