本帖最后由 yanshengjiang 于 2025-10-13 12:00 编辑
翻阅电脑找到一个lsp源代码“为阀门和水泵添加扩展数据.lsp”
测试一番发现可以改成下面这个功能,经过deepseek润色。 没仔细测试,请明友帮忙反馈下bug

网友答: 本帖最后由 yanshengjiang 于 2025-10-12 02:10 编辑
![]()
网友答:
谢谢分享,你辛苦了。网友答:
我记得有一个剪切功能也是这样亮显,横2条中间竖一条交叉,点上下中间交叉段高亮显剪切。楼主那个图片填充研发一下看网友答:
楼主最近比较高产网友答:
哪个图片填充?估计我不会。网友答: 感谢分享。 网友答: 多谢分享!!!!!!
翻阅电脑找到一个lsp源代码“为阀门和水泵添加扩展数据.lsp”
测试一番发现可以改成下面这个功能,经过deepseek润色。 没仔细测试,请明友帮忙反馈下bug


- ; 重新设计 entsel2 函数,支持多种调用方式
- ; (entsel2 msg) - 只提供提示信息
- ; (entsel2 filter-list) - 只提供过滤条件
- ; (entsel2 (list msg filter-list)) - 同时提供提示信息和过滤条件
- ;; 1. 只提供提示信息
- ;;(entsel2 "请选择一条直线:")
- ;; 2. 只提供过滤条件
- ;;(entsel2 '((0 . "LINE") (8 . "0")))
- ;; 3. 同时提供提示信息和过滤条件
- ;;(entsel2 (list "选择0层上的圆:" '((0 . "CIRCLE") (8 . "0"))))
- (defun entsel2 (arg / jspt gr code pt ss ent oldent loop d ptlst result msg filter-list)
- ;; 内部函数:计算点偏移
- (defun jspt (pt w ww)
- (list (+ (car pt) w) (+ (cadr pt) ww))
- )
- ;; 解析参数 - 支持多种调用方式
- (setq msg nil
- filter-list nil)
-
- (cond
- ; 情况1: 参数是字符串 -> 只设置提示信息
- ((= (type arg) 'STR)
- (setq msg arg))
-
- ; 情况2: 参数是列表(过滤条件)-> 只设置过滤条件
- ((and (= (type arg) 'LIST)
- (not (and (= (length arg) 2)
- (= (type (car arg)) 'STR))))
- (setq filter-list arg))
-
- ; 情况3: 参数是包含2个元素的列表,且第一个是字符串 -> 提示信息和过滤条件
- ((and (= (type arg) 'LIST)
- (= (length arg) 2)
- (= (type (car arg)) 'STR))
- (setq msg (car arg)
- filter-list (cadr arg)))
-
- ; 情况4: 其他情况(如 nil 或无效参数)
- (t
- (setq msg nil filter-list nil))
- )
- ;; 显示提示信息
- (if msg(prompt(strcat "\n" msg))(prompt "\n选择对象:"))
- (if filter-list (princ filter-list))
- (setq loop t)
- (setq oldent nil)
- (setq result nil)
-
- (while loop
- (setq gr (grread t 15 2)
- code (car gr)
- pt (cadr gr)
- )
-
- (cond
- ((= code 3) ; 鼠标左键 - 确认选择
- (if oldent
- (progn
- (setq result (list oldent pt))
- (setq loop nil)
- )
- (progn
- (setq result nil)
- (setq loop nil)
- )
- )
- )
-
- ((= code 5) ; 鼠标移动 - 实时高亮
- (redraw) ; 清除所有临时图形
-
- ; 取消旧图元高亮
- (if oldent
- (progn
- (redraw oldent 4)
- (setq oldent nil)
- )
- )
-
- ; 尝试选择并高亮新图元
- (if (and
- (setq d (* (/ (getvar "viewsize") (cadr (getvar "screensize"))) (getvar "pickbox")))
- (setq ptlst (list (jspt pt d d)
- (jspt pt (* -1 d) d)
- (jspt pt (* -1 d) (* -1 d))
- (jspt pt d (* -1 d))))
- ; 使用解析后的filter-list作为ssget的过滤条件
- (setq ss (ssget "_C" (car ptlst) (caddr ptlst) (if filter-list filter-list)))
- (= (sslength ss) 1)
- (setq ent (ssname ss 0))
- )
- (progn
- (redraw ent 3) ; 高亮新图元
- (setq oldent ent) ; 记录新图元
- )
- )
- )
-
- ((or (= code 11) (= code 25)) ; 鼠标右键 - 退出
- (setq result nil)
- (setq loop nil)
- )
- (t) ; 其他事件忽略
- )
- )
-
- ; 清理工作:取消所有高亮
- (if oldent (redraw oldent 4))
- (princ)
- result ; 返回选择结果
- )
网友答: 本帖最后由 yanshengjiang 于 2025-10-12 02:10 编辑
pengbin 发表于 2025-10-12 12:05
我记得有一个剪切功能也是这样亮显,横2条中间竖一条交叉,点上下中间交叉段高亮显剪切。楼主那个图片填充 ...
哪个图片填充?估计我不会。网友答: 感谢分享。 网友答: 多谢分享!!!!!!