[求助]编程申请:检查桩间距
<table cellspacing="0" cellpadding="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td><div id="textstyle_1" style="FONT-SIZE: 14pt; OVERFLOW: hidden; WORD-BREAK: break-all; TEXT-INDENT: 24px; WORD-WRAP: break-word;"><div class="t_msgfont" id="postmessage_17555799">思路:框选图中的圆(桩),计算圆心间的距离,当大于设置的半径的N倍时,作出标记,提出桩间距超出规范规定。</div></div></td></tr></tbody></table><br/> <p>应该叫“邻居太远”</p><p>(defun c:ttt ( / ss d n es e)<br/> (defun dxf1 ( k lst) (cdr (assoc k lst))) <br/> (if (and (setq ss (ssget))<br/> (setq d (getdist "最大距离:"))<br/> )<br/> (progn<br/> (setq n -1)<br/> (repeat (sslength ss) (setq es (cons (ssname ss (setq n (+ n 1))) es))) <br/> (foreach e es <br/> (if (not (apply 'or (vl-remove-if '(lambda (x) (> (distance (dxf1 10 (entget e)) (dxf1 10 (entget x))) d)) (vl-remove e es))))<br/> (command "change" e "" "p" "c" 1 "")<br/> ) )<br/> )<br/> )<br/>)</p><p></p> 这只是一个思路吧,运行命令没有反应啊?而且和我的要求也不太相符啊,呵呵 规范是控制最小间距,应该修改一下,当小于设置的半径的N倍时,作出标记,提出桩间距超出规范规定。 本帖最后由 NJZX05 于 2013-11-19 11:22 编辑(defun C:test(/ R N SEnt DEnt SPt DPt)
(vl-load-com)
(setq N (getint "\n请输入倍数N:"))
(while (/= (vla-get-objectname (setq SEnt (vlax-Ename->vla-object (car (entsel "\n请选择起始桩:"))))) "AcDbCircle") nil)
(while (/= (vla-get-objectname (setq DEnt (vlax-Ename->vla-object (car (entsel "\n请选择下一桩:"))))) "AcDbCircle") nil)
(setq R (vlax-get SEnt 'Radius))
(if (equal R (vlax-get DEnt 'Radius) 1E-10);;这里的1E-10是控制精度
(progn
(setq R (* N R))
(setq SPt (vlax-get SEnt 'Center) DPt (vlax-get DEnt 'Center))
(if (> (distance SPt DPt) R)
(progn
(prompt "\n桩间距超出规范规定!!!")
(vla-put-color SEnt 1)
(vla-put-color DEnt 1)
)
(prompt "\n桩间距符合规范规定.")
);;if
);;progn
(prompt "\n桩径不等,程序结束!")
);;if 半径不等
);;defun 本帖最后由 nbiao 于 2013-11-19 14:54 编辑
这个思路行不? 根据圆心画出三角网,遍历三角网边长把短边标红画出来就行
这个倒是改改我的现成代码就用了
不怎么上论坛,感兴趣可以一起探讨, 扣扣 516三二八九14 这个还真不好控制啊,我觉得,应该是这样的,布置承台的时候,就已经布置好了桩,只要控制好一个承台范围内的桩满足间距要求即可了。框选承台,在承台里判断,会好很多
页:
[1]