LISP2LEARN 发表于 2022-7-6 08:07:41

请改进我的口齿不清

大家好,
 
我想在插入文本之前预览它。我最后总是在插入文本后移动它。我到处找都找不到。非常感谢。
 
(defun C:test (/ e d p)
(setq e (cdr (assoc 2 (entget (car (entsel))))))
(setq d
(cond
((= e "p1") "1\"")
((= e "p1.5") "1-1\\2\"")
((= e "p2") "2\"")
;;etc..;;
(t (princ))
)
)
(setq p (getpoint "\nPick insertion point"))
(setq text
   (entmakex
   (list
       (cons 0 "TEXT")
       (cons 7 "romans")       
       (cons 40 10)
       (cons 8 "TEXT")
       (cons 10 p)
       (cons 210 '(0. 0. 1.))
       (cons 1 d)
       (cons 41 0.
       (cons 50 0)
         
      )
   
    )
)
(princ)
)

alanjt 发表于 2022-7-6 08:12:24

可以使用grread移动文本并将其附着到光标。但是,您将丢失osnaps/orthomode/etc。

David Bethel 发表于 2022-7-6 08:18:17

你可以用一个临时街区。效率不高,但可能有用
 

(defun c:mt ()
(if (setq e (entget (car (entsel))))
   (progn
       (setvar "DRAGMODE" 2)
       (setq bn "TEMP1" bc 1)
       (while (tblsearch "BLOCK" bn)
            (setq bn (strcat "TEMP" (itoa (setq bc (1+ bc))))))
       (entmake (list (cons 0 "BLOCK")(cons 2 bn)(cons 70 0)
                      (assoc 10 e)))
       (entmake (list (cons 0 "TEXT")
                      (assoc 1 e)
                      (if (assoc 6 e) (assoc 6 e) '(6 . "BYLAYER"))
                      (assoc 7 e)
                      (assoc 8 e)
                      (assoc 10 e)
                      (assoc 11 e)
                      (if (assoc 39 e) (assoc 39 e) '(39 . 0))
                      (assoc 40 e)
                      (assoc 41 e)
                      (assoc 50 e)
                      (assoc 51 e)
                      (if (assoc 62 e) (assoc 62 e) '(62 . 256))
                      (assoc 71 e)
                      (assoc 72 e)
                      (assoc 73 e)
                      (assoc 210 e)))
       (entmake (list (cons 0 "ENDBLK")))
       (princ "\nInsert Point: ")
       (setvar "CMDECHO" 0)
       (command "_.INSERT" bn pause 1 1 0
                "_.EXPLODE" (entlast))))
       (prin1))

 
你需要根据自己的需要修改它。
 
-大卫

LISP2LEARN 发表于 2022-7-6 08:23:41

谢谢你,大卫,但这对我不起作用。对不起,误会了。要插入的文本基于所选块的名称,这就是为什么我有一个cond函数。不用担心,你的努力不会白费,我会把这个添加到我的命令库中。
 
 
 
艾伦,我知道我需要使用grread来编写这段代码,但我真的不知道该怎么做。它工作很好,我只需要在插入之前预览一下。
你介意再给我一个提示吗?

Lee Mac 发表于 2022-7-6 08:28:45

 
 
..........

LISP2LEARN 发表于 2022-7-6 08:32:12

Lee,我想使用David的代码,但我每次运行命令时都需要清除图形,因为“temp_block”效率低下,或者在我完成绘图任务时清除,这是不推荐的。温度块一直充满。我在代码中添加了(命令“-PURGE”“\u B”“TEMP1”“n”),但我的系统滞后。
 
此外,我有一些lisp,我需要改进使用grread和entmake文本。

alanjt 发表于 2022-7-6 08:36:39

这是我几年前做的一个糟糕的例子:http://www.theswamp.org/index.php?topic=12813.msg369811#msg369811

MSasu 发表于 2022-7-6 08:41:45

另一种解决方案:
(setq pointIns '(0.0 0.0 0.0))
(setq text
   (entmakex
   (list
       (cons 0 "TEXT")
       (cons 7 "romans")
       (cons 40 10)
       (cons 8 "TEXT")
       (cons 10 pointIns)
       (cons 210 '(0. 0. 1.))
       (cons 1 d)
       (cons 41 0.
       (cons 50 0)
      )))
(redraw text 2)   ;hide new entity
(command "_MOVE" text "" pointIns pause)
 
可能需要将示例中的原点替换为要位于绘图区域中的源图元的插入点。
 
当做
米尔恰

pBe 发表于 2022-7-6 08:45:50

米尔恰。
 
只是一个建议:

(setq text
   (entmakex
   (list
       (cons 0 "TEXT")
       (cons 7 "romans")
       (cons 40 10)
       (cons 8 "TEXT")
       (cons 10
       (setq p (getpoint "\nPick insertion point")))
      (cons 1 d)
       (cons 41 0.
       (cons 50 0)
         
      )
   
    )
)

 
然后调用(命令“_move”text“”p)的循环,直到用户满意该位置。

MSasu 发表于 2022-7-6 08:48:04

不知道你的意思是什么,那么谁不需要再挑选一次来获得最终位置呢?
 
请在下面找到我是如何看到OP代码调整的:
 
(defun C:test ( / e d assocEnt pointIns )
(if (setq e (car (entsel)))
(progn
(setq assocEnt (entget e)
      e      (cdr (assoc 2 assocEnt))
      pointIns (cdr (assoc 10 assocEnt)))
(setq d (cond
         ((= e "p1") "1\"")
         ((= e "p1.5") "1-1\\2\"")
         ((= e "p2") "2\"")
         ;;etc..;;
         (t nil)
         )
      )
(if (and d
         (setq text (entmakex
                     (list (cons 0 "TEXT")
                           (cons 7 "romans")
                           (cons 40 10)
                           (cons 8 "TEXT")
                           (cons 10 pointIns)
                           (cons 210 '(0. 0. 1.))
                           (cons 1 d)
                           (cons 41 0.
                           (cons 50 0)
                           )
                     )
               )
         )
   (progn
    (redraw text 2)                  ;hide new entity
    (command "_MOVE" text "" pointIns pause)
    )
   )
)
)
(princ)
)
 
当做
米尔恰
页: [1] 2
查看完整版本: 请改进我的Lisp程序