admin 发表于 2024-2-20 19:49:48

[源码] 单行文本遮罩批量处理


(defun c:wpt(/ os i ii ss ssn ssdata key box p1 p3 p2 p4 px1 py1 px3 py3 mx my mpt ee )
(setvar "cmdecho" 0)
(setq os (getvar "osmode"))                ;取得捕捉形式               
(setvar "osmode" 0)                   ;取消捕捉,如果不取消,会出错
(setq clay (getvar "CLAYER"))                ;层初始状态
;创建符号层sign颜色31
(if (null (tblsearch "LAYER" "wipeout"))   ;如果wipeout层

   (command "采用layer" "采用m" "wipeout" "采用c" 251 "" "采用lt" "continuous"        "" "");,创建wipeout层,并把遮罩层设为灰度251色

)
(command "采用layer" "采用s" "wipeout" "") ;设为遮罩层

(setq i 0)                               ;设循环起始点
(setq ii 0)
(setq ss (ssget))                        ;多选目标
(repeat (sslength ss)                  ;循环目标数的次数
    (setq ssn (ssname ss i))               ;筛选出目标中的第i+1个对象名称
    (setq ssdata (entget ssn))             ;取出ssn中的数据
    (setq key (cdr (assoc 0 ssdata)))      ;取出关键字为0的列表
    (if (= key "TEXT")                     ;如果是单行文本
      (progn
        (setq ii (1+ ii))
         ;(setq ee1 (entlast))      ;文字临时赋值
       (command "ucs" "e" ssn)            ;以文字为参考坐标系
       (setq box (textbox ssdata))      ;测量并返回文字方框的对角坐标
       (setq p1 (car box))                ;取得一个角坐标
       (setq p3 (cadr box))               ;取得另对角坐标
       (setq p2 (list (car p3)(cadr p1))) ;取得另外角坐标
       (setq p4 (list (car p1)(cadr p3)));取得另外角坐标
       (command "wipeout" p1 p2 p3 p4 "");画遮罩部分
         
       (setq ee (entlast))                ;临时赋值
       
          ;以下求中心mpt
         (setq px1 (car p1))
         (setq py1 (cadr p1))
         (setq px3 (car p3))
       (setq py3 (cadr p3))
       (setq mx (/ (+ px1 px3) 2))
       (setq my (/ (+ py1 py3) 2))
       
       (setq mpt (list mx my))
       
       (command "scale"ee ""mpt 1.1)
       (command "copy" ssn "" mpt mpt )
       (entdel ssn)    ;删除原文字
       
      )
      
       ;(progn
       ;(prompt "无单行文字选项,退出!")
       ;(exit)
       ;)
      )
   
    (setq i (1+ i))   ;循环+1
    )
(command "wipeout" "f" "off")             ;消除wipeout外边框
(command "ucs" "")   ;返回世界坐标系
(prin1)
(setvar "osmode" os)   ;返回原始捕捉状态
(setvar "CLAYER" clay)                ;返回图层初始状态
(princ "\n 共处理了")(princ i ) (princ "个目标中的")(princ ii)(princ "个单行文字。感谢使用!")
(prin1)
       
)
(prompt "单行文字加外框遮罩程序<代替wipeout命令>***** <<wpt>>******")
(prin1)
      
          

页: [1]
查看完整版本: [源码] 单行文本遮罩批量处理