乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 78|回复: 6

[编程交流] 循环和用户选择。。。。

[复制链接]
RJW

1

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 17:22:28 | 显示全部楼层 |阅读模式
我创建了下面的例程,作为将图形转换为公司标准图层的更大例程的一部分。它工作得很好,除了我需要用户在继续之前选择一行或点击“回车”键。现在,如果你在空间中选择一个空点而不是一条线,例程就会继续运行。
举个例子,如果Matchprop完全符合我的要求。。。它会不断提示您在继续之前选择一个源点。
TIA需要任何帮助!
 
(如果(setq ent1(entsel“\n拾取现有电气设备……………..如果没有,'Enter'))
(setq lay1(值8(entget(car ent1)))
)
(如果铺设1
(if(setq ss(ssget“x”(list(cons 410(getvar“ctab”)))(cons 8 lay1)))
(progn(sssetfirst nil ss))
)
)
(命令“chprop”“P”“”“la”“D-EX-ELECT”“C”“bylayer”“LT”“bylayer”“)
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 17:34:40 | 显示全部楼层
我认为您需要创建所有公司层的列表,并使用FOREACH函数进行循环。
 
  1. ; create all company layers list
  2. (setq layLst '("D-EX-ELECT" "Electrical2" "Electrical3" "Electrical4"))
  3. ; foreach layer in list
  4. (foreach lay layLst
  5. ; if user has select entity for this layer and selection set has created
  6. (if
  7.    (and
  8.      (setq cEnt(entsel(strcat "\nSelect entity for '" lay "' or Enter for none> ")))
  9.      (setq cLay(cdr(assoc 8(entget(car cEnt)))))
  10.      (setq cSet(ssget "x"(list(cons 410(getvar "ctab"))(cons 8 cLay))))
  11.      ); and and
  12.    (progn
  13.      ; higlight selection set for user can to see it
  14.      (sssetfirst nil cSet)
  15.      (initget "Yes No")
  16.      ; if user press Y or hit Enter
  17.      (setq cAns(getkword
  18.           (strcat "\nDo you want to cnahge layer to '" lay "'? [Yes/No]<Yes>: ")))
  19.      (if(/= "No" cAns)
  20. ; change properties of selection set
  21. (command "chprop" "P" "" "la" lay "C" "bylayer" "LT" "bylayer" "")
  22. (princ(strcat "\nLayer '" lay "' passed by user "))
  23. ); end if
  24.      ); end progn
  25.    (princ(strcat "\nNothing selected for '" lay))
  26.    ); end if
  27. ); end foreach

 
未测试。
回复

使用道具 举报

RJW

1

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 17:49:24 | 显示全部楼层
Kewl。。谢谢我试试看!
回复

使用道具 举报

RJW

1

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 17:59:33 | 显示全部楼层
ASMI,
它工作得很好,但缺少的一个元素是,如果你不小心什么都没有选择,它会跳到下一层。我如何确保在进入下一步之前选中一个实体?
再次感谢!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 18:08:08 | 显示全部楼层
ASMI,
 
这可能吗?
 
  1. ; create all company layers list
  2. (setq layLst '("D-EX-ELECT" "Electrical2" "Electrical3" "Electrical4"))
  3. ; foreach layer in list
  4. (foreach lay layLst
  5. ; if user has select entity for this layer and selection set has created
  6. (if
  7.    (and
  8.      (setq cEnt(entsel(strcat "\nSelect entity for '" lay "' or Enter for none> ")))
  9.      (setq cLay(cdr(assoc 8(entget(car cEnt)))))
  10.      (setq cSet(ssget "x"(list(cons 410(getvar "ctab"))(cons 8 cLay))))
  11.      ); and and
  12.    (progn
  13.      ; higlight selection set for user can to see it
  14.      (sssetfirst nil cSet)
  15.      (initget "Yes No")
  16.      ; if user press Y or hit Enter
  17.      (setq cAns(getkword
  18.          (strcat "\nDo you want to cnahge layer to '" lay "'? [Yes/No]<Yes>: ")))
  19.      (if(/= "No" cAns)
  20.    
  21.     ; change properties of selection set
  22.    (command "chprop" "P" "" "la" lay "C" "bylayer" "LT" "bylayer" "")
  23.    (princ(strcat "\nLayer '" lay "' passed by user "))
  24.    ); end if
  25.      ); end progn
  26.    (while
  27.    (and
  28.      (= (setq cEnt(entsel(strcat "\nSelect entity for '" lay "' or Enter for none> "))) nil)
  29.      (setq cLay(cdr(assoc 8(entget(car cEnt)))))
  30.      (setq cSet(ssget "x"(list(cons 410(getvar "ctab"))(cons 8 cLay))))
  31.      ); end and
  32.      ; higlight selection set for user can to see it
  33.      (sssetfirst nil cSet)
  34.      (initget "Yes No")
  35.      ; if user press Y or hit Enter
  36.      (setq cAns(getkword
  37.          (strcat "\nDo you want to cnahge layer to '" lay "'? [Yes/No]<Yes>: ")))
  38.      (if(/= "No" cAns)
  39.    
  40.     ; change properties of selection set
  41.    (command "chprop" "P" "" "la" lay "C" "bylayer" "LT" "bylayer" "")
  42.    ); end if
  43.    ); end while
  44.    ); end if
  45. ); end foreach
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 18:15:01 | 显示全部楼层
这是吗?
 
[code](defun c:测试(/layLst cEnt cLay cSet cAns);创建所有公司图层列表(setq layLst’(“D-EX-ELECT”“Electrical2”“Electrical3”“Electrical4”);列表中的foreach层(foreach lay layLst(setq cEnt nil);如果用户为该层选择了实体,并且选择集已经创建(而不是cEnt)(setq cEnt(entsel(strcat“\n选择‘lay’>’的实体))(if(和cEnt(setq cLay(cdr(assoc 8(entget(car cEnt)k))))(setq cSet(ssget“x”(list(cons 410(getvar“ctab”)))(cons 8 cLay)));and and(progn;higlight选择集,供用户查看(sssetfirst nil cSet)(initget“Yes No”);如果用户按Y键或按Enter键(setq cAns(getkword(strcat“\n您想将cnahge层转换为“lay”?[是/否]:”))(如果(/=“否”cAns);更改选择集的属性(命令“chprop”“P”“”“la”lay“C”“bylayer”“LT”“bylayer”“)(progn(princ(strcat“\nLayer”“lay”'由用户传递))(sssetfirst nil nil));结束程序);如果结束);结束progn(progn(princ(strcat)“\n>>>未为“lay”选择任何内容
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 18:29:40 | 显示全部楼层
另一个变体。
[code](defun c:测试(/layLst cEnt cLay cSet cAns);;创建所有公司图层列表(setq layLst’(“D-EX-ELECT”“Electrical2”“Electrical3”“Electrical4”);;foreach lay layLst;;如果用户已为此层选择实体,并且已创建选择集(而(cond((and(setq cEnt(entsel(strcat“\nSelect entity for‘lay’>”)))(setq cLay(cdr(assoc 8(entget(car cEnt)k)k))(setq cSet(ssget“x”(list(cons 410(getvar“ctab”)))(cons 8 cLay));;higlight选择集,用户可以看到它(sssetfirst nil cSet)(initget“Yes No”);;如果用户按Y键或按Enter键(setq cAns(getkword(strcat“\n您想将层更改为”lay“?[是/否]:”)))(如果(/=“否”cAns);更改选择集的属性(命令“chprop”“P”“la”lay“C”“bylayer”“LT”“bylayer”“)(progn(princ(strcat“\nLayer”“lay”'由用户传递))(sssetfirst nil nil)))((progn(princ(strcat“\n>>未为“lay”选择任何内容)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 16:00 , Processed in 0.480257 second(s), 77 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表