几何空间点原始描述字符串替换工具
AI编写的代码,放到这里备忘。
同事在画图时,
遇到了一个问题:
导入的几何空间点原始描述中有对于的字符,
需要删除,
于是让ai写了下面的代码。
;;; 几何空间点原始描述字符串替换工具 ;;; 用于Civil 3D中批量修改几何空间点的原始描述 (defun c:ReplacePointDesc ( / ss searchStr replaceStr count i pointObj oldDesc newDesc) ;; 设置错误处理 (vl-load-com) (setq *error* (lambda (msg) (princ (strcat "\n错误: " msg)))) ;; 选择几何空间点 (princ "\n选择几何空间点: ") (setq ss (ssget '((0 . "AECC_COGO_POINT")))) (if (not ss) (progn (princ "\n未选择任何几何空间点。") (exit) ) ) ;; 获取搜索字符串 (setq searchStr (getstring T "\n输入要查找的字符串: ")) ;; 检查搜索字符串是否为空 (if (= searchStr "") (progn (princ "\n搜索字符串不能为空。") (exit) ) ) ;; 获取替换字符串(默认为空字符串) (setq replaceStr (getstring T "\n输入替换的字符串(直接回车使用空字符串): ")) ;; 如果用户直接回车,设置为空字符串 (if (= replaceStr "") (setq replaceStr "") ) ;; 确认操作 (princ (strcat "\n将在 " (itoa (sslength ss)) " 个点上执行替换:")) (princ (strcat "\n查找: \"" searchStr "\"")) (princ (strcat "\n替换为: \"" replaceStr "\"")) (initget "是 否") (setq confirm (getkword "\n是否继续? [是/否] <是>: ")) (if (or (= confirm "否") (= confirm "N")) (progn (princ "\n操作已取消。") (exit) ) ) ;; 开始替换操作 (setq count 0) (setq i 0) (repeat (sslength ss) (setq pointObj (vlax-ename->vla-object (ssname ss i))) ;; 获取原始描述 (setq oldDesc (vlax-get-property pointObj 'RawDescription)) ;; 检查描述是否存在且包含搜索字符串 (if (and oldDesc (/= oldDesc "") (vl-string-search searchStr oldDesc)) (progn ;; 执行字符串替换 (setq newDesc (vl-string-subst replaceStr searchStr oldDesc)) ;; 更新点的原始描述 (vlax-put-property pointObj 'RawDescription newDesc) (setq count (1+ count)) (princ (strcat "\n点 " (itoa (1+ i)) " 描述已更新: " newDesc)) ) (princ (strcat "\n点 " (itoa (1+ i)) " 未包含搜索字符串或描述为空")) ) (setq i (1+ i)) ) ;; 显示操作结果 (princ (strcat "\n\n操作完成! 共处理了 " (itoa count) " 个点的描述。")) (princ) ) ;;; 增强版本:支持大小写不敏感搜索和全局替换 (defun c:ReplacePointDescEx ( / ss searchStr replaceStr count i pointObj oldDesc newDesc caseSensitive) (vl-load-com) (setq *error* (lambda (msg) (princ (strcat "\n错误: " msg)))) ;; 选择几何空间点 (princ "\n选择几何空间点: ") (setq ss (ssget '((0 . "AECC_COGO_POINT")))) (if (not ss) (progn (princ "\n未选择任何几何空间点。") (exit) ) ) ;; 获取搜索字符串 (setq searchStr (getstring T "\n输入要查找的字符串: ")) (if (= searchStr "") (progn (princ "\n搜索字符串不能为空。") (exit) ) ) ;; 获取替换字符串 (setq replaceStr (getstring T "\n输入替换的字符串(直接回车使用空字符串): ")) (if (= replaceStr "") (setq replaceStr "") ) ;; 选择是否区分大小写 (initget "是 否") (setq caseSensitive (getkword "\n是否区分大小写? [是/否] <是>: ")) (if (or (= caseSensitive "否") (= caseSensitive "N")) (setq caseSensitive nil) (setq caseSensitive T) ) ;; 确认操作 (princ (strcat "\n将在 " (itoa (sslength ss)) " 个点上执行替换:")) (princ (strcat "\n查找: \"" searchStr "\"")) (princ (strcat "\n替换为: \"" replaceStr "\"")) (princ (strcat "\n区分大小写: " (if caseSensitive "是" "否"))) (initget "是 否") (setq confirm (getkword "\n是否继续? [是/否] <是>: ")) (if (or (= confirm "否") (= confirm "N")) (progn (princ "\n操作已取消。") (exit) ) ) ;; 开始替换操作 (setq count 0) (setq i 0) (repeat (sslength ss) (setq pointObj (vlax-ename->vla-object (ssname ss i))) (setq oldDesc (vlax-get-property pointObj 'RawDescription)) (if (and oldDesc (/= oldDesc "")) (progn ;; 根据是否区分大小写进行搜索 (if caseSensitive (setq found (vl-string-search searchStr oldDesc)) (setq found (vl-string-search (strcase searchStr) (strcase oldDesc))) ) (if found (progn ;; 执行字符串替换(区分大小写版本) (if caseSensitive (setq newDesc (vl-string-subst replaceStr searchStr oldDesc)) ;; 不区分大小写版本需要更复杂的处理 (progn (setq tempDesc oldDesc) (setq searchLower (strcase searchStr)) (setq oldLower (strcase oldDesc)) ;; 循环替换所有出现的位置 (while (setq pos (vl-string-search searchLower oldLower)) (setq tempDesc (strcat (substr tempDesc 1 pos) replaceStr (substr tempDesc (+ pos 1 (strlen searchStr))))) (setq oldLower (strcat (substr oldLower 1 pos) (strcase replaceStr) (substr oldLower (+ pos 1 (strlen searchStr))))) ) (setq newDesc tempDesc) ) ) ;; 更新点的原始描述 (vlax-put-property pointObj 'RawDescription newDesc) (setq count (1+ count)) (princ (strcat "\n点 " (itoa (1+ i)) " 描述已更新: " newDesc)) ) (princ (strcat "\n点 " (itoa (1+ i)) " 未包含搜索字符串")) ) ) (princ (strcat "\n点 " (itoa (1+ i)) " 描述为空")) ) (setq i (1+ i)) ) (princ (strcat "\n\n操作完成! 共处理了 " (itoa count) " 个点的描述。")) (princ) ) ;;; 加载提示信息 (princ "\n几何空间点描述替换工具已加载。") (princ "\n命令: ReplacePointDesc - 基本版本") (princ "\n命令: ReplacePointDescEx - 增强版本(支持大小写不敏感)") (princ)

浙公网安备 33010602011771号