明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: hnfsf

用什么办法把图中每组数中中间那个数挑出来

  [复制链接]
 楼主| 发表于 2007-5-16 14:45 | 显示全部楼层
zml84发表于2007-5-15 8:34:00楼主的数据规律是什么?从图片上看:可否从右侧四边形入手?即先搜索到四四边形,再取出其中心位置,然后向左一定距离得到文字对象。<br>

这个倒是一个可能的办法,谢谢zml184的提醒

 楼主| 发表于 2007-5-16 14:50 | 显示全部楼层
phoenixdjq发表于2007-5-15 11:03:00都选择上,然后找绝对值最大的那个是不是可以呀

应该不可以吧,如果说找绝对值大于某个值的。。。

但那样会选到不是中间的那个

 楼主| 发表于 2007-5-17 17:24 | 显示全部楼层

今天想了一下,能否把所有数据作为一个集合,然后找出间距相等的5个字符作为一组,这样就解决问题了

发表于 2007-5-17 17:38 | 显示全部楼层
何不参考其右侧的方形作搜寻?
 楼主| 发表于 2007-5-18 23:52 | 显示全部楼层

完美算法想出来了:

1,选择所有数据作为一个选择集SS

2,根据(ssname ss 0)的dxf10 坐标,在SS集里面用窗交(ssget "_C")挑出附件的数据选择集SS1

3,在SS1里面选出dxf11坐标间距为1-4倍字行距的5个字符,建立选择集SS2

4,在SS2里面挑出中间的那个数。

5,把SS2从SS里面删除(减少SS的容量,减少程序运行时间)得到新的SS

6,重复1-5步,直到SS的个数为零

ok,完工

发表于 2007-5-19 09:16 | 显示全部楼层

这个涉及到专业的问题

这是结构专业的SATWE输出的柱底轴力图

中间那个是轴力

规律就是五个一组

排序后再按五个分成一组 

取第三个

程序的实现

见俺的《柱轴力和》

 楼主| 发表于 2007-5-19 11:18 | 显示全部楼层
本帖最后由 作者 于 2007-5-19 16:40:25 编辑

(defun c:tt (/ ang col d d0 d01 d10 d11 d40 d62 d8 di e0 e1 en i ii j
        e ni lst mind mp n os p1 p2 s0 s1 si ss x1 xyz y1 z1 zb zl
     )
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
  (setq ss (ssget '((0 . "TEXT"))))
  (while (> (sslength ss) 0)
    (setq en (entget (ssname ss 0)))
    (setq d8 (cdr (assoc 8 en))
   d10 (cdr (assoc 10 en))
   d11 (cdr (assoc 11 en))
   d40 (cdr (assoc 40 en))
   d62 (cdr (assoc 62 en))
   di (* 7 d40)
   ang (cdr (assoc 50 en))
   col (cdr (assoc 62 (tblsearch "layer" d8)))
    )
    (setq p1 (polar d10 (+ ang (/ pi 2)) di)
   p2 (polar d11 (- ang (/ pi 2)) di)
   p3 (polar d10 (- ang (/ pi 2)) di)
   p4 (polar d11 (+ ang (/ pi 2)) di)
   pt (list p1 p3 p2 p4)
    )          
    (if d62
      (setq s1 (ssget "cp" pt (list '(0 . "TEXT") (cons 62 d62))))
      (setq s1 (ssget "cp" pt (list '(0 . "TEXT"))))
    )  

    (if (< (sslength (setq s (xdrx_PickSet_Intersect ss s1))) 5)(setq s1 s1)(setq s1 s)) 
    (setq lst '())
    (while (/= (length lst) 5)
      (setq i 0)
      (setq s0 (ssname s1 i)
     d0 (cdr (assoc 11 (entget s0)))
     lst (list (list d0 s0))
      )          
      (setq j 1)
      (repeat (- (sslength s1) 1)
 (setq si (ssname s1 j)
       e1 (entget si)
       d01 (cdr (assoc 11 e1))
 )
 (if (or
       (equal (* 1.5 d40) (rem (distance d0 d01) (* 1.5 d40)) 0.01)
       (equal 0.0 (rem (distance d0 d01) (* 1.5 d40)) 0.01)
     )
   (setq lst (append
        lst
        (list (list d01 si))
      )
   )
 )
 (setq j (1+ j))
      )
      (setq i (1+ i))
    )
    (if (= 5 (length lst))
      (progn
 (setq x1 0
       y1 0
       z1 0
       ii 0
 )
 (repeat 5
   (setq zb (car (nth ii lst))
  x1 (+ x1 (car zb))
  y1 (+ y1 (cadr zb))
  z1 (+ z1 (caddr zb))
   )        
   (setq ii (+ 1 ii))
 )
 (setq xyz (list (/ x1 5) (/ y1 5) (/ z1 5))
       j 1
 )
 (setq mind (distance (car (nth 0 lst)) xyz))
 (foreach n lst
   (setq ss (ssdel (cadr n) ss))
   (setq d (distance (car n) xyz))
   (if (< d mind)
     (setq mind d
    mp (car n)
     )
   )
 )
 (setq zl (cadr (assoc mp lst)))
 (command "change" zl "" "p" "c" 240 "")
      )
    )
  )
  (setvar "osmode" os)
)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 03:35 , Processed in 0.352045 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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