明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2629|回复: 12

[提问] ssget加repeat函数的问题

[复制链接]
发表于 2013-11-1 10:39:00 | 显示全部楼层 |阅读模式
如图
我想通过框选红色的线和黄色的线 得到白色的线线  (白色线居中)
我的思路是用ssget框选红色和黄色的线 利用函数依次到红色和黄色线的所有交点a1-a6 b1-b6  进而得到 p1-p6
我的问题是如果我用ssget加( setq n 0)  (repeat (sslength ss)的形式 那么我每repeat一次只能得到一个p点 那么我该如何实现p1和p2点之间的画线? 也就是说我该如何利用上一次repeat得到的点 来和我这次repeat得到的点连线?

本帖子中包含更多资源

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

x

点评

直接ssget  发表于 2013-11-1 21:08
 楼主| 发表于 2013-11-1 14:46:56 | 显示全部楼层
悄悄地来顶一下。。。
发表于 2013-11-2 09:23:19 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-11-2 09:25 编辑

(setq n 0)
(repeat (/(sslength ss)2)
  (setq e1(ssname ss n)
          e2(ssname ss(1+ n))
          n(+ 2 n)
          a1(.....e1....)
          b1(.....e1....);;用e1与黄线计算a1和b1
          a2(.....e2....)
          b2(.....e2....);;用e2与黄线计算a2和b2
          p1(list (/(+(car a1)(car b1))2.)(/(+(cadr a1)(cadr b1))2.))
          p2(list (/(+(car a2)(car b2))2.)(/(+(cadr a2)(cadr b2))2.))
   )
  (用p1 p2画线)
)  
发表于 2013-11-2 12:18:54 | 显示全部楼层
本帖最后由 NJZX05 于 2013-11-2 12:39 编辑

;;第一过程,分别得到两边对象
(setq n 0 e1 nil YLst nil RLst nil)
(repeat (sslength ss)
  (setq e2 (ssname ss n))
  (if (= (cdr (assoc 62 (entget e1))) 1) (setq RLst  (append RLst  E1)));;得到红色组
  (if (= (cdr (assoc 62 (entget e1))) 2) (setq RLst  (append YLst  E1)));;得到黄色组
  );;repeat
;;第二过程,得到a1-a6;b1-b6
(setq PLstS nil)
(foreach YItem Ylst
     (setq PLst nil)
     (foreach RItem RLst
         (setq PLst (append PLst (list (inters (cdr (assoc 10 (entget YItem)))  (cdr (assoc 11 (entget YItem)))  (cdr (assoc 10 (entget RItem)))  (cdr (assoc 11 (entget RItem)))))))
         )
     (setq PLst (vl-sort PLst '(lambda (P1 P2) (< (cadr P1) (cadr P2)))));;按Y坐标排序
     (setq PLsts (append PLsts (list PLst)))
    )
;;第三过程,得到P1-P6
(setq PLst  (mapcar '(LAMBDA (P1 P2) (LIST (/ (+ (CAR P1) (CAR P2)) 2) (/ (+ (CADR P1) (CADR P2)) 2) (/ (+ (CADDR P1) (CADDR P2)) 2))) (car PLsts) (cadr PLsts)))

;;第四过程,依次用P1-P6画线
(setq PS nil)
(while PLst
   (cond
    (PS (setq PE (car PLst) PLst (cdr PLst)) (command)
          (command "LINE" (command PS) (command PE))
          (setq PS nil)
          )
    (T  (setq PS (car PLst) PLst (cdr PLst))
    )
  )
)
;;这里用了可能的各种循环,你慢慢看吧,我想你要的肯定在里面了


;;第四过程还可以这样写
;(setq PS nil Index -1)
;(repeat (length PLst)
;   (setq Index (1+ Index))
;   (cond
;    (PS (setq PE (nth Inxex PLst)) (command)
;          (command "LINE" (command PS) (command PE))
;          (setq PS nil)
;          )
;    (T  (setq PS (nth Inxex  PLst))
;    )
;  )

;;如果想要连接画线,不间断,那么就这样写
;(setq PS nil)
;(while (setq PE (car PLst))
;  (setq  PLst (cdr PLst))
;  (cond
;    (PS (command)
;         (command "LINE" (command PS) (command PE))
;         (setq PS PE)
;         )
;    (T  (setq PS PE))
;  )
;)
 楼主| 发表于 2013-11-5 15:42:04 | 显示全部楼层
llsheng_73 发表于 2013-11-2 09:23
(setq n 0)
(repeat (/(sslength ss)2)
  (setq e1(ssname ss n)

谢谢你 不过貌似不可行哦
 楼主| 发表于 2013-11-5 15:44:16 | 显示全部楼层
本帖最后由 peraperson 于 2013-11-5 16:54 编辑
NJZX05 发表于 2013-11-2 12:18
;;第一过程,分别得到两边对象
(setq n 0 e1 nil YLst nil RLst nil)
(repeat (sslength ss)

提示error了

我将局部改成了
(if (= (cdr (assoc 62 (entget e2))) 1) (setq RLst  (append RLst  e2)));;得到红色组
(if (= (cdr (assoc 62 (entget e2))) 2) (setq RLst  (append YLst  e2)));;得到黄色组
还是不行 提示error: bad argument type: listp <Entity name: 7fffea67240>

对foreach 不是很懂 foreach 不是只针对表的吗?可以针对选择集?用append可以将选择集变成表?
发表于 2013-11-5 17:11:17 | 显示全部楼层
我线看看   我也是菜鸟
发表于 2013-11-11 09:41:25 | 显示全部楼层
网上即时写的没有调试,不好意思,在(setq RLst  (append RLst  E1))时漏了个list,你将这里写成下面的形式就行了:(setq RLst  (append RLst  (list E1)));因为append要求参数为表,而E1只是实体名,不是表,所以有那个错误;
发表于 2013-11-11 09:43:24 | 显示全部楼层
peraperson 发表于 2013-11-5 15:44
提示error了

我将局部改成了

对于foreach,你说的很对,不能用于选择集,可能你没看明白,我的代码中foreach并不是选择集,YLST、RLST都是普通的表
发表于 2013-11-11 09:49:11 | 显示全部楼层
peraperson 发表于 2013-11-5 15:42
谢谢你 不过貌似不可行哦

是的,这里面少了一句对索引变量的自增量控制。请在repeat语句中的最后加一句
(setq n (1+ n))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 03:28 , Processed in 0.215366 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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