明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 540|回复: 8

[提问] 求助,初学者,几行代码三天了还没解决!

[复制链接]
发表于 2024-7-27 17:40:11 | 显示全部楼层 |阅读模式

三天了,求助!!!
以下代码实现一个简单功能,选中指定范围的图元。就差最后一个问题了,红色字体部分。
(defun C:WPS4 ( / i elist at cmde cen rad p1)
  ;; 初始化变量
  ;(setq cmde (getvar "cmdecho")) ; 获取当前的命令回显状态,并存储在变量cmde中
  ;(setvar "cmdecho" 0) ; 设置命令回显状态为0,关闭命令行回显

  (setq i 0 elist (entget (car (entsel "\nPick a circle or polyline: "))))
  ; 初始化i为0,获取用户选择的对象的实体数据,并存储在elist中

  ;; 改变选择模式,允许选择预选的对象
  ;(setvar "OSMODE" (boole 7 (getvar "OSMODE") 16384))
  ;(setvar "OSMODE" 0)
  ;(setvar "OSMODE" (boole 255 (getvar "OSMODE") (- 65536 16384)))
  ;(princ "\n elist:")
  ;(princ elist)
  ;; 检查是否处于命令活动状态,如果不是,则启动选择命令
  (if (zerop (getvar "CMDACTIVE")) (command "_select"))
  ;CMDACTIVE 系统变量,0表示命令行没有命令在执行,1表示有命令在执行,
  ;; 调用_wp或_CP命令(具体取决于注释或实际代码中的选择)
  (command "_wp")
  ; or _CP(圈选模式,cp交选模式)

  (repeat (length elist)
    (setq at (nth i elist) i (1+ i))
    (princ "\n at:")
    (princ at)
    ;; 判断是否是顶点坐标,并将其转换为点
    (if (= (car at) 10) (command (trans (cdr at) 0 1)))
  )
  (command "");此条指令执行完,还处于选择状态,再按回车,选中的图元就失去选择了,这个代码是网上找的

  ;(setvar "OSMODE" (boole 2 (getvar "OSMODE") 16384))
  ;; 重置命令行回显状态
  ;(setvar "cmdecho" 0)

  ;; 打印结果
  (princ)
)


求助!!


发表于 2024-7-27 21:12:33 | 显示全部楼层
  1. (defun c:tt ()
  2.   "选中多段线范围内的图元"
  3.   (if (setq s1 (car (entsel "\n选择多段线: ")))
  4.     (progn
  5.       (setq lst (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget s1))
  6.             lst (mapcar 'cdr lst)
  7.             lst (mapcar '(lambda (x) (trans x 0 1)) lst)
  8.             ss (ssget "wp" lst)
  9.       )
  10.       (if ss (sssetfirst nil ss))
  11.     )
  12.   )
  13.   (princ)
  14. )
回复 支持 1 反对 0

使用道具 举报

发表于 2024-7-27 19:07:39 | 显示全部楼层
你是不是这个意思?
  1. (defun C:WPS4 (/ ELIST PTS SS)
  2.   (princ "\nPick a polyline: ")
  3.   (if (setq ss (ssget ":E:S" '((0 . "LWPOLYLINE"))))
  4.     (progn
  5.       (setq elist (entget (ssname ss 0)))
  6.       (setq elist (vl-remove-if-not '(lambda (x) (= (car x) 10)) elist))
  7.       (setq pts (mapcar 'cdr elist))
  8.       (apply 'command (append '("select" "wp") pts '("" "")))
  9.     )
  10.   )
  11.   (princ)
  12. )
发表于 2024-7-27 23:36:46 | 显示全部楼层
  1. (defun c:tt ()
  2.   "选中多段线范围内的图元"
  3.   (if (setq s1 (car (entsel "\n选择多段线: ")))
  4.     (progn
  5.       (setq ss (ssget "wp" (xyp-Vertexs s1 0)))
  6.       (if ss (sssetfirst nil ss))
  7.     )
  8.   )
  9.   (princ)
  10. )
发表于 2024-7-28 12:34:33 | 显示全部楼层
大佬们,不考虑下非零凸度的情况么
发表于 2024-7-29 18:00:55 | 显示全部楼层
没看懂说明意思
发表于 2024-7-29 20:41:16 | 显示全部楼层
大佬们也是猜的,说明意图比较好
 楼主| 发表于 2024-7-31 09:12:30 | 显示全部楼层
感谢大佬  第一个代码 就可以了  我学习哈

后面两个代码我试了一下    还不行  我也不是很懂  我研究学习哈  感谢各位




本帖子中包含更多资源

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

x
 楼主| 发表于 2024-7-31 09:15:48 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-8 12:46 , Processed in 0.276965 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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