如图,本意是想通过选择文字10@200,选中多段线,再将多段线建立为实体表,获取多段线的第二、第三个端点建立一个矩形选择框如图,选中两个文字980。现在就是无法获取多段线的第二、第三个端点。请内行帮忙指导,谢谢!
如图,本意是想通过选择文字10@200,选中多段线,再将多段线建立为实体表,获取多段线的第二、第三个端点建立一个矩形选择框如图,选中两个文字980。现在就是无法获取多段线的第二、第三个端点。请内行帮忙指导,谢谢!
2楼
用什么语言啊?
lisp吗
回复
3楼
只要能获取多段线端点赋值给lisp进行编辑就行
回复
4楼
还在这个钢筋上面锲而不舍啊,
(ssget "CP" pt1 pt2 pt3……"")
应该可以,没有试过
回复
5楼
(setq S1 (ssget "CP" pt1 pt2 pt3 pt4 "" '((8 . "楼板负筋标注"))))
加上了图层过滤了
回复
6楼
搞错了,以为你要选择的命令,原来是要得出钢筋的点
下面的
(setq en (entsel "请点选对应的钢筋:\n"))
(setq en_data (entget (car en)))
(setq pt1x (cadr (nth 14 en_data))) ;多线段第一点是14,第二点是18,每点加4
(setq pt1y (caddr (nth 14 en_data)))
(setq pt2x (cadr (nth 18 en_data)))
(setq pt2y (caddr (nth 18 en_data)))
(setq pt3x (cadr (nth 22 en_data)))
(setq pt3y (caddr (nth 22 en_data)))
(setq pt4x (cadr (nth 26 en_data)))
(setq p4y (caddr (nth 26 en_data)))
(setq pt1 (list pt1x pt1y))
(setq pt2 (list pt2x pt2y))
(setq pt3 (list pt3x pt3y))
(setq pt4 (list pt4x pt4y))
回复
7楼
哦,狼牙茄子,很高兴又见到你了啊,经过你上次的指点,我的lisp已经编辑完成了,你给我个邮箱吧,我把我的源程序发给你看看。
这次发帖,主要是想编辑里面的一个附带命令。
上次向你提问的时候,我连什么是Lisp,command是干什么的都不知道。谢谢你的指点与帮助!~
我觉得我能把这个lisp编辑完,很有成就感!
[
本帖最后由 maoniu20000 于 2012-8-31 09:11 编辑 ]
回复
8楼
lyqiezi@126.com
嘿嘿,我也是初学,要不是你问,我也不会往下做,你问的那个删除板底钢筋的那个程序,我现在自己就在用了,你的想法真的挺好,哈哈
回复
9楼
恩,主要是我看了一篇文章,说是一个合格的结构设计师,在制图上应该花很少的时间,大部分精力主要放在结构优化和模型上面。
现在公司网速很慢,我回去给你我的lisp源程序,我个人感觉很强大。你可以根据自己的制图习惯改。
回复
10楼
已经发送邮箱里了,用邮箱里面的板配筋图做实验吧,不然可能PKPM版本不同,不能用
(defun C:2222()
(setq os (getvar "osmode"));;存储osmode原来的值
(setvar "osmode" 0);;设置osmode为0
(setq e (entget (car (entsel "\n 选择已说明的楼板-负筋文字")))) ;取实体表e
(setq b1 (cdr (assoc 1 e)));获取字体内容
(setq tc (cdr (assoc 8 e)));获取要批量删除文字的图层
(command "zoom" "e") ;实时缩放
(if (= tc "楼板-负筋文字")
(progn
(setq s1 (ssget "x" '((8 . "楼板-负筋文字"))))
(setq zhj (/ pi 2))
(setq ti% 0)
(if (/= s1 nil)
(progn
(while
(<=
ti%
(- (sslength s1) 1)
)
(setq ename(ssname s1 ti%))
(setq p11 nil) ;将p11置空
(setq e (entget ename)) ;取实体表e
(setq p11 (cdr (assoc 1 e))) ;获取字体内容
(if (= p11 b1) ;判断是否需要删除
(progn
(setq th (cdr (assoc 40 e))) ;取字高,判断图纸比例,以便确定钢筋与文字的距离
(if (< th 100) (setq d1 1.02) (setq d1 102))
(setq tal (cdr (assoc 72 e))) ;取对齐方式,确认文字角度是否需要换算
(setq tsp (cdr (assoc 10 e)));第一对齐点
(if (= tal 5)
(progn
(setq tep (cdr (assoc 11 e)));第二对齐点
(setq tang (angle tsp tep));算出字体旋转的角度
)
(setq tang (cdr (assoc 50 e)))
)
(setq tang1 (- tang (/ pi 2)))
(setq dd1 (* d1 1.2))
(setq dd2 (* d1 0.5))
(setq pp1 (polar tsp tang1 dd1)) ;设删除框选点1
(setq pp2 (polar pp1 tang1 (* -1 dd2))) ;设删除框选点2
(entdel ename);删除选择的文字
(setq gjl (ssget "C" pp2 pp1 '((8 . "楼板-负筋钢筋") (0 . "LWPOLYLINE")))) ;应加上筛选,只要钢筋层,减少误删除
==================================================================================================================================================
(setq en_data (entget (car gjl))) ;取实体表en_data●●●●●●●
;(setq en (entsel "请点选对应的钢筋:\n")) ;●●●●●●
;(setq en_data (entget (car en))) ;●●●●●●
(setq pt1x (cadr (nth 14 en_data))) ;多线段第一点是14,第二点是18,每点加4
(setq pt1y (caddr (nth 14 en_data)))
(setq pt2x (cadr (nth 18 en_data)))
(setq pt2y (caddr (nth 18 en_data)))
(setq pt3x (cadr (nth 22 en_data)))
(setq pt3y (caddr (nth 22 en_data)))
(setq pt4x (cadr (nth 26 en_data)))
(setq pt4y (caddr (nth 26 en_data)))
(setq pt1 (list pt1x pt1y))
(setq pt2 (list pt2x pt2y))
(setq pt3 (list pt3x pt3y))
(setq pt4 (list pt4x pt4y))
(setq ss1 (ssget "CP"(list pt1 pt2 pt3 pt4) '((8 . "楼板-负筋尺寸"))))
(command "ERASE" ss1 "")
==================================================================================================================================================
(command "erase" gjl "");删除钢筋
)
)
(setq ti%(+ 1 ti%))
) ;end while
) ;endprogn s1/=nil
) ;endif s1 /= nil
(setq s1 nil)
));只对"楼板正筋文字"图层起作用
(setvar "osmode" os);;将原来的值恢复
)
带圆圈的这里不能衔接起来。entsel函数是单个选择对象;gjl是框选对象
你看看这个要如何连接
回复
11楼
我编写这个程序,主要是用在地下室顶板,或者屋面板配筋的时候用同时删除不需要的正筋 负筋及相关文字。
其实只要把删选框建立得尽量小一些,误差就会小很多!
回复