hdlyt11 发表于 2010-4-23 13:21:00

[求助]编程申请:检查桩间距

<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/>

liu_kunlun 发表于 2010-4-23 14:13:00

<p>应该叫“邻居太远”</p><p>(defun c:ttt ( / ss d n es e)<br/>&nbsp; (defun dxf1 ( k lst) (cdr (assoc k lst))) <br/>&nbsp; (if (and (setq ss (ssget))<br/>&nbsp;&nbsp;&nbsp; (setq d (getdist "最大距离:"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp; (setq n -1)<br/>&nbsp; (repeat (sslength ss) (setq es (cons (ssname ss (setq n (+ n 1))) es)))&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (foreach e es&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not (apply 'or (vl-remove-if '(lambda (x) (&gt; (distance (dxf1 10 (entget e)) (dxf1 10 (entget x))) d)) (vl-remove e es))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "change" e "" "p" "c" 1 "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; )<br/>)</p><p></p>

hdlyt11 发表于 2010-9-3 09:39:00

这只是一个思路吧,运行命令没有反应啊?而且和我的要求也不太相符啊,呵呵

石井鱼 发表于 2013-11-19 10:51:44

规范是控制最小间距,应该修改一下,当小于设置的半径的N倍时,作出标记,提出桩间距超出规范规定。

NJZX05 发表于 2013-11-19 11:19:59

本帖最后由 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:37:57

本帖最后由 nbiao 于 2013-11-19 14:54 编辑

这个思路行不? 根据圆心画出三角网,遍历三角网边长把短边标红画出来就行

这个倒是改改我的现成代码就用了


不怎么上论坛,感兴趣可以一起探讨, 扣扣 516三二八九14

twsyzx 发表于 2013-11-19 21:46:22

这个还真不好控制啊,我觉得,应该是这样的,布置承台的时候,就已经布置好了桩,只要控制好一个承台范围内的桩满足间距要求即可了。框选承台,在承台里判断,会好很多
页: [1]
查看完整版本: [求助]编程申请:检查桩间距