乐筑天下

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

[编程交流] ssget随机排列

[复制链接]

9

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 23:58:06 | 显示全部楼层 |阅读模式
嗨,伙计们
当我使用ssget函数时,autocad会随机选择实体、、、或我不知道选择实体的概念是什么>
如果我想让它根据特定的安排来选择它,我该怎么办。。。例如,沿x或y方向上升
 
 
我制作了这个lisp来计算多段线面积,,,,
 
  1. (defun c:ar ()
  2. (setq AnItem (getvar "OSMODE"))
  3. (AList "OLDSNAP" AnItem)
  4. (setq AnItem (getvar "HIGHLIGHT"))
  5. (AList "OLDHIGH" AnItem)
  6. (setq AnItem (getvar "CMDECHO"))
  7. (AList "OLDECHO" AnItem)
  8. (setq eset (ssget))
  9. (setq cntr 0)
  10. (setq tap (getpoint "Insertion point"))
  11. (setq pt1 (mapcar '+ tap (list 0.5 -0.45)))
  12. (setq pt2 (mapcar '+ pt1 (list 1 0)))
  13. (setq pt4 (mapcar '+ pt2 (list 1 0)))
  14. (setq pt5 (mapcar '+ pt4 (list 1 0)))
  15. (setq h (getreal "\nHeight"))
  16. (while (< cntr (sslength eset))
  17. (setq en (ssname eset cntr))
  18.    (setq enlist (entget en ))
  19.    (setq myVertexList (list))
  20.    (foreach a enlist                                          
  21.      (if(= 10 (car a))                                          
  22.       (setq myVertexList                                
  23.          (append myVertexList                       
  24.        (list                                                      
  25.          (cdr a)                                            
  26.         )                                                                 
  27.           )                                                                     
  28.        )                                                                     
  29.      )                                                                                
  30.     )  
  31. (setq listana (vl-sort myVertexList '(lambda (j k)  (< (car j) (car k))  )))
  32. (setq p1 (car listana))
  33. (setq AnItem (getvar "OSMODE"))
  34. (AList "OLDSNAP" AnItem)
  35. (setq AnItem (getvar "HIGHLIGHT"))
  36. (AList "OLDHIGH" AnItem)
  37. (setq AnItem (getvar "CMDECHO"))
  38. (AList "OLDECHO" AnItem)
  39. (setvar "Osmode" 0)
  40. (setvar "Highlight" 0)
  41. (setvar "Cmdecho" 0)
  42. (setq ptx1 (mapcar '+ p1 (list 0.20 0.20)))
  43. (setq ptx2 (mapcar '+ p1 (list 0.20 0.50)))
  44. (command "area" "Object" en)
  45. (setq are (getvar "area"))
  46. (setq ar (strcat (rtos are 2 2) " m2"))
  47. (setq vol (strcat (rtos (* are h) 2 2) " m3" ))
  48. (command "layer" "m" "ali_text" ""  )
  49. (command "text" "j" "mc" pt1 "0.2" "0" (strcat "O" (rtos (+ 1 cntr) 2 0)) "")
  50. (command "text" "j" "mc" pt2 "0.2" "0" ar "")
  51. (command "text" "j" "mc" pt4 "0.2" "0" (rtos h 2 2) "")
  52. (command "text" "j" "mc" pt5 "0.2" "0" vol "")
  53. (command "text"  ptx2 "0.25" "0" (strcat "O" (rtos (+ 1 cntr) 2 0))"")
  54. (command "text"  ptx1 "0.25" "0" (strcat "Area=" ar) "")
  55. (setq cntr (+ 1 cntr))
  56. (setq pt1 (mapcar '+ pt1 (list 0 -0.30)))
  57. (setq pt2 (mapcar '+ pt2 (list 0 -0.30)))
  58. (setq pt4 (mapcar '+ pt4 (list 0 -0.30)))
  59. (setq pt5 (mapcar '+ pt5 (list 0 -0.30)))
  60. )
  61. (setvar "OSMODE" (RList "OLDSNAP"))
  62.    ;retrieve and reset snap
  63.    (setvar "HIGHLIGHT" (RList "OLDHIGH"))
  64.    ;retrieve and reset highlight
  65.    (setvar "CMDECHO" (RList "OLDECHO"))
  66.    ;retrieve and reset command echo
  67. (princ)
  68.         
  69. )
  70. (defun AList (Name Val)
  71.    (setq item (list (cons Name Val)))
  72.    ;construct list
  73.    (setq MainList (append item Mainlist))
  74.    ;add it to the main list
  75. );defun
  76. ;This function retrieves the values from the main list
  77. (defun RList (TheName)
  78.      (cdr (assoc TheName MainList))
  79.      ;retrieve value from list
  80. );defun
  81. (princ)
  82. (defun dtr (x)
  83.    ;define degrees to radians function
  84.    (* pi (/ x 180.0))
  85.    ;divide the angle by 180 then
  86.    ;multiply the result by the constant PI
  87. )    ;end of function

你可以在这里看到如何使用它
 
 
 
问题是:
如果多段线的排列很重要,我必须一个接一个地选择它,,,因为如果我一次全部选择,它将是随机排列
 
所以,,,我希望如果你能帮我怎么修复它
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:17:36 | 显示全部楼层
尊敬的先生,
 
当您选择不带任何过滤器时,它或多或少是实体创建的顺序。
 
对于lisp,您不能依赖于此来给出有序序列。
 
你可以做的是得到每个区域的边界框(我想是lwpolyline)
并通过vl排序
 
 
السلام عليكم
 
ymg公司
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:27:14 | 显示全部楼层
سبع الليل
 
我看了你们的节目。
 
您已经对每条多段线进行排序,以获得点p1。
现在,如果您将所有p1保存在一个单独的列表中,您可以像获取p1一样对其进行排序。
 
缺点是它会改变程序的结构。那就是你会的
需要将所有内容保存在一个大列表中((p1“Surface”“height”“Volume”)……)
 
一旦你有了这个大列表,你就对它进行排序,然后,只有这样,你才能画出你的文本。
 
السلام عليكم
 
ymg公司
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:28:59 | 显示全部楼层
سبع الليل
 
希望你不会介意,但我对你的日常生活做了一些调整,
结果如下。
 
  1. (defun c:ar (/ *acaddoc* are biglst cntr en errl eset h i item
  2.                     p1 pt1 pt2 pt4 pt5 ptx1 ptx2 su tap tarea vol)
  3. (vl-load-com)
  4.   ;;; Error Handler by ElpanovEvgenyi                                      ;
  5.   (defun *error* (msg)
  6. (mapcar 'eval errl)
  7.      
  8. (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")))
  9.           (princ (strcat "\nError: " msg))
  10.        )
  11. (and *AcadDoc* (vla-endundomark *AcadDoc*))
  12.        (princ)
  13.   )
  14.    
  15.   (setq errl '("CLAYER" "OSMODE" "CMDECHO" "HIGHLIGHT" "DIMZIN")
  16.         errl (mapcar (function (lambda (a) (list 'setvar a (getvar a)))) errl)
  17.   )     
  18.    
  19.   (or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  20.       
  21.   (setvar 'CMDECHO 0)
  22.   (setvar 'DIMZIN 0)
  23.   (setvar 'OSMODE 0)  
  24.   (setvar 'HIGHLIGHT 0)
  25. (princ "\nSelect Polylines:")
  26. (setq eset (ssget '((0 . "*POLYLINE")))
  27.        cntr 0
  28.         tap (getpoint "\nInsertion point")
  29.         pt1 (mapcar '+ tap (list 0.5 -0.45))
  30.         pt2 (mapcar '+ pt1 (list 1 0))
  31.         pt4 (mapcar '+ pt2 (list 1 0))
  32.         pt5 (mapcar '+ pt4 (list 1 0))
  33.           h (getreal "\nHeight of Footings:")
  34. )
  35. (command "layer" "m" "ali_text" "")
  36. (setvar 'CLAYER "ali_text")
  37. (setq tarea 0.0 biglst nil)
  38. (repeat (setq i (sslength eset))
  39.      (setq   en (ssname eset (setq i (1- i)))
  40.             are (vlax-curve-getarea en)
  41.           tarea (+ tarea are)
  42.              su (strcat (rtos are 2 2) " m2")
  43.             vol (strcat (rtos (* are h) 2 2) " m3")
  44.              p1 (car (vl-sort (listpol en) '(lambda (j k) (< (car j) (car k)))))
  45.            item (list p1 su (rtos h 2 2) vol)  
  46.          biglst (cons item biglst)   
  47.      )
  48. )
  49. (setq biglst (vl-sort biglst '(lambda (j k) (< (caar j) (caar k)))))
  50. (vla-startundomark *AcadDoc*)
  51. (foreach item biglst      
  52.      (command "text" "j" "mc" pt1 "0.2" "0" (strcat "O" (rtos (+ 1 cntr) 2 0)))
  53.      (command "text" "j" "mc" pt2 "0.2" "0" (cadr item))
  54.      (command "text" "j" "mc" pt4 "0.2" "0" (caddr item))
  55.      (command "text" "j" "mc" pt5 "0.2" "0" (cadddr item))
  56.      (setq p1 (car item))
  57.      (setq ptx1 (mapcar '+ p1 (list 0.20 0.20)))
  58.      (setq ptx2 (mapcar '+ p1 (list 0.20 0.50)))
  59.      (command "text" ptx2 "0.25" "0" (strcat "O" (rtos (+ 1 cntr) 2 0)))
  60.      (command "text" ptx1 "0.25" "0" (strcat "Area=" (cadr item)))
  61.      (setq cntr (+ 1 cntr))
  62.      (setq pt1 (mapcar '+ pt1 (list 0 -0.30))
  63.            pt2 (mapcar '+ pt2 (list 0 -0.30))
  64.            pt4 (mapcar '+ pt4 (list 0 -0.30))
  65.            pt5 (mapcar '+ pt5 (list 0 -0.30))
  66.      )
  67. )
  68. (*error* nil)
  69. )
  70. (defun dtr (x)  (* pi (/ x 180.0)))
  71. ;;; Poly-Pts (gile)                                                           ;
  72. ;;; Returns the vertices list of any type of polyline (WCS coordinates)       ;
  73. ;;;                                                                           ;
  74. ;;; Argument                                                                  ;
  75. ;;; pl : a polyline (ename or vla-object)                                     ;
  76. (defun listpol        (en / pa pt lst)
  77. (vl-load-com)
  78. (setq        pa (if (vlax-curve-IsClosed en)
  79.       (vlax-curve-getEndParam en)
  80.       (+ (vlax-curve-getEndParam en) 1)
  81.    )
  82. )
  83. (while (setq pt (vlax-curve-getPointAtParam en (setq pa (- pa 1))))
  84.    (setq lst (cons pt lst))
  85. )
  86. )

 
现在,如果我是你,我会去掉所有的命令并使用Entmake
输出文本。
 
ymg公司
基脚。图纸
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-6 00:39:15 | 显示全部楼层
李有一个很好的ssget教程
回复

使用道具 举报

9

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:54:42 | 显示全部楼层
ymg3
非常感谢你,,,,
非常感谢您的帮助。。。。
现在我很高兴你们为我的节目做了精彩的编辑
我在afralisp学习autolisp。com和jefferyspanders。通用域名格式。。。。但我觉得我错过了autolisp的许多基础知识。。我不知道哪里是最好的网站,在那里我可以找到所有的东西,没有遗漏
我现在计划开始学习visual lisp教程
谢谢你,,,很抱歉我英语不好
回复

使用道具 举报

9

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:59:27 | 显示全部楼层
asos2000年
شكراً للمرور يا برنس .... إنت منين من كايرو
أنا هندسة طنطا 2003 ... و ما كنتش فاكر إني هلاقي عرب في المنتدى ده
كل سنة و إنت طيب
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:27 , Processed in 1.130026 second(s), 77 queries .

© 2020-2025 乐筑天下

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