乐筑天下

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

[编程交流] 使用ssget标记圆

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:15:03 | 显示全部楼层 |阅读模式
你好
 
我有一个lisp,用保存在文本文件中的坐标一次性标记所有圆。lisp和dwg如下所示。我的问题是如何将带前缀的圆圈放在不同的组中。在查找了选择圆的ssget函数后,我还没有找到一个很好的选择方法。在web中找到了四种方法,并将其放入代码中。第一种方法是使用选择方法“w”工作,但窗口没有那么灵活,无法选择我想要的。第二种方法在选择圆后停止。第三种方法是“错误:错误参数类型:lselsetp nil”。第四种方法的结果与第三种方法相同。我考虑使用WPolygon选择方法,但不知道如何编写。
 
顺便问一下,如何将实体名称导出到文本文件?包含实体名称的变量不是字符串,因此我不知道如何将其放入文本文件中。
 
图纸2.dwg
 
  1. (defun c:labelcircle()
  2. (command "CMDECHO" "0")
  3. (command "layer" "m" "hk" "c" "1" "" "")
  4. (setq yy (entsel"\nselect the circle :"))
  5. (setq sews (getstring "\ninput the prefix:"))
  6. (setq f (open (getfiled "text file save as" "c:" "txt" 1) "w"))
  7. (setq y (entget (car yy)))
  8. (setq tc (assoc 8 y))
  9. (setq dx (assoc 40 y))
  10. (setq zg (cdr dx))
  11. ;-----1st method
  12. ;(setq p1 (getpoint "\nFirst Corner: "))
  13. ;(setq p2 (getcorner p1 "\nSecond Corner: "))
  14. ;(setq s (ssget "w" p1 p2 (list '(0 . "CIRCLE") tc dx)))
  15. ;-----2nd method
  16. ;(command "select" "WP")
  17. ;(setq s (ssget "_P"))
  18. ;-----3rd method
  19. ;(setq ptlst '())
  20. ;(setq pts 1)
  21. ;(while pts
  22. ;  (setq pts(getpoint "\nSelect Point: "))
  23. ;  (if pts (setq ptlst (cons pts ptlst)))
  24. ;_while
  25. ;(if pts
  26. ;  (setq s(ssget "_WP" ptlst))
  27. ;-----4th method
  28. ;(while (setq pt (getpoint pt "\nSpecify a point:"))
  29. ;  (setq ptlst (cons pt ptlst))
  30. ;while
  31. ;(if ptlst
  32. ;  (setq s (ssget "_WP" ptlst))
  33. ;if
  34. ;-----
  35. (setq n 0)
  36. (setq m (- (sslength s) 1))
  37.    (while
  38.    (setq a (ssname s m))
  39.    (setq xy (cdr (assoc 10 (entget a))))
  40.    (setq xy1 (polar xy (/ pi 4) )
  41.    (setq dh (rtos (+ 1 n) 2 0))
  42.    (command "layer" "s" "hk" "")
  43.    (command "text" "j" "m" xy1 3 "0" (strcat sews dh))
  44.    (setq ss (strcat sews dh "," (rtos (nth 0 xy) 2 3) "," (rtos (nth 1 xy) 2 3) ","))
  45.    (write-line ss f)
  46.    (setq n (1+ n))
  47.    (setq m (1- m))
  48.   );while
  49. );defun
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:34:48 | 显示全部楼层
第三种方法移除;(setq pts 1)
 
建议
  1. (repeat (setq m (sslength s))
  2.    (setq a (ssname s (setq m (- m 1))))
  3.    (setq xy (cdr (assoc 10 (entget a))))
  4.    (setq xy1 (polar xy (/ pi 4) )
  5.    (setq dh (rtos (+ 1 n) 2 0))
  6.    (command "layer" "s" "hk" "")
  7.    (command "text" "j" "m" xy1 3 "0" (strcat sews dh))
  8.    (setq ss (strcat sews dh "," (rtos (nth 0 xy) 2 3) "," (rtos (nth 1 xy) 2 3) ","))
  9.    (write-line ss f)
  10.   ); repeat
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:48:36 | 显示全部楼层
我尝试了第三种方法并删除了“;(setq pts 1)”,但结果是“错误:错误的参数类型:lselsetp nil”。代码有什么问题吗?与我的AutoCAD 2010版本有关吗?
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 17:57:40 | 显示全部楼层
也许你想得太多了,试试:
  1. (setq s(ssget '((0 . "CIRCLE"))))
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 18:09:47 | 显示全部楼层
我不确定我是否完全理解你的要求,但我今天做了一些练习:
[code]defun C:test/osm*error*p ptL#FilePath SS pref#File i e enx a;李·麦克帮忙,;Tharwat帮助,;Roy_043帮助,;作者:Grrrsetq osmgetvar'osmodedefun*错误*msg)[/color b]redraw b])[/color b][如果osmsetvar'osmode osmif#Fileclose#File如果([/color b]不是[color]b]成员消息'“函数取消”“退出/退出中止”[color=红色][color=蓝色][color=绿色][wcmatch[color=蓝色](strcase msg[color=蓝色])[/color b]“*中断,*取消*,*退出*”[color=绿色]颜色princstrcat“\n错误:msg]]princ];defun重画setvar'errno 0/=52getvar'errno)[/color b][颜色=#8b4513];收集点列表[color]initget 128“D DONE”setq pgetpoint“\n指定点或[D]一个:“cond; 将p存储在lst中,和GRVEClistp psetq ptLcons p ptLredraw如果[color=BLUE的话,>=长度ptL2grvecscons-3apply'appendmapcar'list ptLconslast ptLptL[color=GRAY)
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:18:47 | 显示全部楼层
谢谢大家!
 
@汤布:
最初的lisp是使用ssget来选择您编写的所有圆,但我进一步要求在不同的圆组之前放置不同的前缀,而不是所有的圆都具有相同的前缀。
 
@Grrr:
选择圆的方法很棒,文本文件可以选择是否打开。我只需要添加函数来标记它。
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-23 10:10 , Processed in 4.058909 second(s), 65 queries .

© 2020-2025 乐筑天下

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