crazy007 发表于 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)
)


求助!!


xyp1964 发表于 2024-7-27 21:12:33

(defun c:tt ()
"选中多段线范围内的图元"
(if (setq s1 (car (entsel "\n选择多段线: ")))
    (progn
      (setq lst (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget s1))
            lst (mapcar 'cdr lst)
            lst (mapcar '(lambda (x) (trans x 0 1)) lst)
            ss (ssget "wp" lst)
      )
      (if ss (sssetfirst nil ss))
    )
)
(princ)
)

lijiao 发表于 2024-7-27 19:07:39

你是不是这个意思?
(defun C:WPS4 (/ ELIST PTS SS)
(princ "\nPick a polyline: ")
(if (setq ss (ssget ":E:S" '((0 . "LWPOLYLINE"))))
    (progn
      (setq elist (entget (ssname ss 0)))
      (setq elist (vl-remove-if-not '(lambda (x) (= (car x) 10)) elist))
      (setq pts (mapcar 'cdr elist))
      (apply 'command (append '("select" "wp") pts '("" "")))
    )
)
(princ)
)

czb203 发表于 2024-7-27 23:36:46

(defun c:tt ()
"选中多段线范围内的图元"
(if (setq s1 (car (entsel "\n选择多段线: ")))
    (progn
      (setq ss (ssget "wp" (xyp-Vertexs s1 0)))
      (if ss (sssetfirst nil ss))
    )
)
(princ)
)

bonny 发表于 2024-7-28 12:34:33

大佬们,不考虑下非零凸度的情况么

gble119 发表于 2024-7-29 18:00:55

没看懂说明意思

muai2010 发表于 2024-7-29 20:41:16

大佬们也是猜的,说明意图比较好

crazy007 发表于 2024-7-31 09:12:30

感谢大佬第一个代码 就可以了我学习哈

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




crazy007 发表于 2024-7-31 09:15:48

xyp1964 发表于 2024-7-27 21:12


感谢大佬!
页: [1]
查看完整版本: 求助,初学者,几行代码三天了还没解决!