找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 893|回复: 4

[求助] 统计循环的隶属性关系

[复制链接]
发表于 2017-1-20 01:14:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
;;(求矩形边长)
(defun qbc (pts / n bc_list b h pt1 pt2 pt3 pt4)
       (setq n 0 bc_list nil)         ;矩形的4个顶点,pts是顶点列表
       (setq pt1 (nth n pts))
       (setq pt2 (nth (+ 1 n) pts))
       (setq pt3 (nth (+ 2 n) pts))
       (setq pt4 (nth (+ 3 n) pts))
       (setq b (distance pt1 pt4))    ;矩形宽度
       (setq h (distance pt1 pt2))    ;矩形高度
       (setq bc_list (cons b h))      ;图层&边长点对(一个点对是一个特别的表)
     )
  
(defun c:tg ()
  (setq os (getvar "osmode"))
  (setq ss (ssget '((0 . "LWPOLYLINE"))))
  (setq i 0 x 0 bclst nil pts nil bc_new nil)
  (setq x (sslength ss))
  (repeat x
    (setq el (entget (ssname ss i)))
    (foreach pt el
       (if (= (car pt) 10)
           (setq pts (append pts (list (cdr pt))))
        )
    )
   (setq la (cdr (assoc 8 el))) ;层名没能进入循环
   (setq bc (qbc pts))
   (setq bclst(cons bc bclst))矩形的长宽尺寸,希望bcls隶属于la即根据图形的层名属性来归类。第一步层名分类,第二步才是长宽分类,第三步数量统计。不知道怎么建立这种隶属关系,想请各位大佬指点。谢谢各位。
   (setq pts nil)
   (setq i (+ 1 i))
)

   (setq bc_new nil)
   (while bclst
         (setq m (car bclst) x1 (length bclst))
         (setq bclst (vl-remove m bclst))
         (setq x2 (length bclst))
         (setq n (- x1 x2))
         (setq bc_new (cons (append (list m) (list n))bc_new))
   )
  (setvar "osmode" 0)
  (setq p1 (getpoint "\放置点"))
  (setq p2 (polar p1  0 60))
  (setq p3 (polar p2  0 56))
     (command "text" "j" "c" (polar p1 (* pi 0.5) 10) "5" "0" "层名")
     (command "text" "j" "c" (polar p2 (* pi 0.5) 10) "5" "0" "长宽")
     (command "text" "j" "c" (polar p3 (* pi 0.5) 10) "5" "0" "数量")
  (foreach bg bc_new
    (command "text" "j" "c" p1 "5" "0" la)
    (command "text" "j" "c" p2 "5" "0" (strcat (rtos (car (car bg)) 2)" * "(rtos (cdr (car bg))2)" * 25"))
    (command "text" "j" "c" p3 "5" "0" (cadr bg))
    (setq p1 (polar p1 (* pi 1.5) 12))
    (setq p2 (polar p1  0 60))
    (setq p3 (polar p2  0 56))
    )
    (setvar "osmode" os)
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-1-20 09:11:44 | 显示全部楼层
去开源函数库, 找 xd::list:groupbyindex 源码,看看里面怎么写的。

你其实有现成的,可以直接拿来用,把精力放到更需要的地方。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-1-20 09:58:11 | 显示全部楼层
不仔细看帖子了,就提少许建议:1、setq可以连写,一般情况下尽量使用连写,一是代码简练,二是在一些情况下可以避免错误,比如在if函数中作为分支,连写的情况算作一句,否则需要使用progn“合并”。
2、在对实体进行操作时,对实体进行信息提取,应该把需要的信息尽量一次提出,构成一个关联表或多层表,以后按自己的需要对这个表进行操作。比如你的这种情况,可以对每个实体构成一个由实体名、层名、端点构成的表,可以是这样:(en la pt1 pt2...),也可以是:(en la (pt1 pt2 ...)),还可以把这些表构成一个总表:((en1 la1 (pt11 pt12 ...)) (en2 la2 (pt21 pt22 ...) ...),以后再对这样的表进行需要的操作。


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 312个

财富等级: 日进斗金

发表于 2017-1-20 12:12:20 | 显示全部楼层
这个有什么用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-20 16:22:57 | 显示全部楼层

你好,可以麻烦你帮忙改改么,这个程序我弄了好久,建立那种隶属关系,一点思路都没有,根本无从入手
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-29 17:39 , Processed in 0.171441 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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