prodromosm 发表于 2022-7-5 23:05:52

插入并分解块lisp

我使用这个lisp插入块
 
我有两个问题
 
A)
 

(defun c:textblock ()
(COMMAND "_layer" "_m" "text" "_c" "140" "" "")
(setq scl (getvar "useri1"))
(setq scl1 (* scl 1.5))
(setq dt1 (getpoint "\ninsert text block: "))
(command" "*insert" "textblock" dt1 scl1 scl1 "0" )
(princ)
)

 
当块插入到图形中时,会发生旋转
 
我使用的单位是:十进制、米、梯度、北向。
 
图形模板和块的单位设置相同。我不知道为什么。
 
当我使用相同的不带“*”的lisp时,我没有旋转问题,但没有exlope。
 
B) 第二个问题
 
我用这个lisp插入绘图戳记(Rtext)
 

(defun c:dstamp ()
(COMMAND "_layer" "_m" "dstamp" "_c" "140" "" "")
(setq scl (getvar "useri1"))
(setq scl1 (* scl 1.5))
(setq dt1 (getpoint "\ninsert dstamp: "))
(command"insert" "dstamp" dt1 scl1 scl1 "0" )
(princ)
)

 
插入后,我将Rtext分解两次,将其转换为简单文本
 
谢谢

hmsilva 发表于 2022-7-5 23:19:13

尝试
 

(defun c:textblock ( / DT1 SCL SCL1)
(COMMAND "_layer" "_m" "text" "_c" "140" "" "")
(setq scl (getvar "useri1"))
(setq scl1 (* scl 1.5))
(setq dt1 (getpoint "\ninsert text block: "))
(command "insert" "*textblock" dt1 scl1 "0" )
(princ)
)
(defun c:dstamp ( / DT1 SCL SCL1)
(COMMAND "_layer" "_m" "dstamp" "_c" "140" "" "")
(setq scl (getvar "useri1"))
(setq scl1 (* scl 1.5))
(setq dt1 (getpoint "\ninsert dstamp: "))
(command "insert" "*dstamp" dt1 scl1 "0"
"_.explode" "_L"
"_.explode" "_L")
(princ)
)

 
HTH公司
亨里克

prodromosm 发表于 2022-7-5 23:27:44

谢谢你hmsilva
在dstam(Rtex)中,只有第三行是我使用的dwg文件
 
你能检查一下吗?
D amp。图纸

hmsilva 发表于 2022-7-5 23:39:11

不客气prodromosm
 

(defun c:dstamp ( / DT1 SCL SCL1)
(COMMAND "_layer" "_m" "dstamp" "_c" "140" "" "")
(setq scl (getvar "useri1"))
(setq scl1 (* scl 1.5))
(setq dt1 (getpoint "\ninsert dstamp: "))
(command "insert" "dstamp" dt1 scl1 scl1 "0")
(command "_.explode" "_L")
(initcommandversion)
(command "_.explode" "_P" "")
(initcommandversion)
(command "_.explode" "_P" "")
(princ)
)
 
HTH公司
亨里克

prodromosm 发表于 2022-7-5 23:41:38

谢谢你hmsilva

hmsilva 发表于 2022-7-5 23:54:11

不客气prodromosm
很高兴我能帮忙!
 
亨里克

VVA 发表于 2022-7-5 23:58:12

其他变体。
使用插入分解块
QAFLAGS=5
不取决于块中Rtext的数量。

(defun c:dstamp ( / DT1 SCL SCL1 SS *error* qf)
(defun *error* ( msg )
   (and qf (setvar 'QAFLAGS qf))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ)
)

(COMMAND "_layer" "_m" "dstamp" "_c" "140" "" "")
(setq scl (getvar "useri1"))
(setq scl1 (* scl 1.5))
(setq dt1 (getpoint "\ninsert dstamp: "))
(mip:mark)
(command "_-insert" "*dstamp" dt1 scl1 scl1)
(if (setq SS (mip:get-last-ss))
(progn
   (setq qf (getvar 'QAFLAGS))
   (setvar 'QAFLAGS 5)

   (command "_.explode" ss "")

   (setvar 'QAFLAGS qf)
   )
)

)

;;;* Mark data base to allow KB:catch.
;;;* http://www.theswamp.org/index.php?topic=15863.0
(defun mip:mark ( )
(if (setq *mip:mark (entlast)) nil
   (progn (entmake '((0 . "point") (10 0.0 0.0 0.0)))
      (setq *mip:mark (entlast))(entdel *mip:mark)))(princ))
;;;* returns selection set of entities since last mip:mark.
(defun mip:get-last-ss (/ ss tmp val)
(setq val (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if *mip:mark
   (progn (setq ss (ssadd))
          (while (setq *mip:mark (entnext *mip:mark))
            (ssadd *mip:mark ss)
          ) ;_ end of while
          (if (> (sslength ss) 0)
            (progn
            (command "_.select" ss "")
            (setq tmp ss)
            ) ;_ end of progn
            (setq tmp nil)
          ) ;_ end of if
   ) ;_progn
   (alert
   "*mip:mark not set. \n run (mip:mark) before mip:get-last-ss."
   ) ;_ end of alert
) ;_if
(setvar "cmdecho" val)
tmp
) ;_ end of defun

hmsilva 发表于 2022-7-6 00:07:03

你好,VVA,
代码不错。
 
 
但是,您需要分解两次,分解后的Rtext变为多行文字,您需要根据操作要求再次分解为文字。
 
 
如果只在explode命令之前使用initcommandversion函数,将允许选择集作为参数,则无需更改QAFLAGS SysVar来分解选择集。
 
亨里克
页: [1]
查看完整版本: 插入并分解块lisp