ILoveMadoka 发表于 2022-7-6 12:02:04

多行文字->文字对齐Tw

我有一个例行程序,将文本对齐改为
中间居中。如果选中文本,则效果良好。
 
我们不能使用多行文字,所以如果一段多行文字
被选中时,它会将其分解。我不知道怎么继续
分解后的例程,而不是再次重新选择对象。
如果有人能帮我,我将不胜感激。
 
TIA!!
 
这是我的。。。

(defun C:JMC (/ ss1 sslen index ent1 enttyp bspt1)
(prompt "\nSet to Middle Center Justification . . .")
   (setq ss1 (ssget))
   (setq   sslen (sslength ss1)
             index 0
             tents 0
   ) ; end setq
   (repeat sslen
       (setq   
         ent1 (entget (ssname ss1 index))
         enttyp (cdr (assoc 0 ent1))
       ) ; end setq
(if (= enttyp "MTEXT")
      (progn
      (Command "Explode" ss1)
          (alert "Text was MTEXT! Rerun the command. ")

;I put this note just to help notify me..
;How do you select the text entities that made up the MTEXT group?
      )
)
       (if (= enttyp "TEXT")
         (progn
               (setq bspt1 (cdr (assoc 10 ent1)))
               (setq ent1 (subst (cons 11 bspt1) (assoc 11 ent1) ent1))
               (entmod ent1)
               (setq ent1 (subst (cons 72 1) (assoc 72 ent1) ent1))
               (setq ent1 (subst (cons 73 2) (assoc 73 ent1) ent1))
               (entmod ent1)
               (setq tents (+ tents 1))
         ) ; end progn
       ) ; end if
       (setq index (+ index 1))
   ) ; end repeat

   (princ)
) ; end defun

ILoveMadoka 发表于 2022-7-6 12:08:10

由于某种原因,我的所有格式都被我的帖子删除了。。
对不起!

Lee Mac 发表于 2022-7-6 12:11:57

这对你有帮助吗?
 
http://www.cadtutor.net/forum/showthread.php?t=42438

ILoveMadoka 发表于 2022-7-6 12:13:29

李。。。
 
我以前也学过这些套路
我希望用其中的一些来满足其他需求。。
 
我的这个小程序是当用户
创建的文本不正确,我需要快速更改。
 
我真正想要的是一个常规
这不仅会将多行文字转换为文字,还会更改对齐方式
然后将文本居中放置在一个框中。我在慢慢地啄食
看看它。我有一些子程序最终完成了它,但即使这样,也有
我的定心程序中有几个错误。有时效果很好,但不起作用
有时根本没有。我无法持续地再现错误。
 
只要克服这个小障碍,我就会变得更有效率。。。
我知道这很容易,我只是不是一个伟大的程序员。。

Lee Mac 发表于 2022-7-6 12:15:29

也许是这样的?
 

(defun C:JMC(/ i ss ent tmp elst)
(prompt "\nSet to Middle Center Justification . . .")

(if (setq i -1 ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
   (while (setq ent (ssname ss (setq i (1+ i))))

   (if (eq "MTEXT" (cdr (assoc 0 (setq elst (entget ent)))))
       (progn
         (command "_.explode" ent)
         (setq ent (entlast))))

   (setq tmp(cdr (assoc 10 elst)))
   (setq elst (entmod (subst (cons 11 tmp) (assoc 11 elst) eLst))
         elst (entmod (subst (cons 72 1)   (assoc 72 elst) elst))
         elst (entmod (subst (cons 73 2)   (assoc 73 elst) elst)))))

(princ))

alanjt 发表于 2022-7-6 12:20:45

正如您所知,JustifyText允许用户将对正设置为所需的任何内容,而无需移动文本。

ILoveMadoka 发表于 2022-7-6 12:22:11

李。。
我运行了这个,它正在使(或留下)文本左对齐。
我在现有的多行文字上进行了尝试,并创建了一些新的多行文字,效果相同。
也许我的原始代码中有一些奇怪的东西??
 
 
艾伦。。
 
我知道这一点,还有其他的“辩护”程序。
这是一个快速的应用程序,适用于我没有遇到的特定情况
想要任何选择。我只想让它做一件事。

Lee Mac 发表于 2022-7-6 12:27:54

抱歉,请尝试以下操作:
 

(defun C:JMC(/ *error* ExEnts ELST ENT I LSTENT MSS OV SS TMP VL)
(prompt "\nSet to Middle Center Justification . . .")

(defun *error* (msg)
   (and ov (mapcar 'setvar vl ov))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ))

(defun ExEnts (ent / a)
   (if (setq ent (entnext ent))
       (cons ent (ExEnts ent))))

(setq vl '("CMDECHO" "QAFLAGS") ov (mapcar 'getvar vl))
(mapcar 'setvar vl '(0 1))

(if (setq i -1 ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
   (progn
   (if (setq mss (ssget "_P" '((0 . "MTEXT"))))
       (progn
         (setq lstent (entlast))
         (command "_.explode" mss "")
         (mapcar
         (function
             (lambda (x) (ssadd x ss))) (ExEnts (cond (lstent) ((entlast)))))))
         
   (while (setq ent (ssname ss (setq i (1+ i))))      
   
       (setq tmp(cdr (assoc 10 (setq elst (entget ent)))))
       (setq elst (entmod (subst (cons 11 tmp) (assoc 11 elst) eLst))
             elst (entmod (subst (cons 72 1)   (assoc 72 elst) elst))
             elst (entmod (subst (cons 73 2)   (assoc 73 elst) elst))))))

(mapcar 'setvar vl ov)
(princ))

ILoveMadoka 发表于 2022-7-6 12:31:55

我不得不做一个小改动,让它按我想要的方式工作。。
我添加了这一行:
 
elst(entmod(subst(cons 71 0)(assoc 73 elst)elst))
 
非常感谢!!
我自己永远也不会想到这一点!!
 
以下是整个程序。。。
 
(定义C:JMC(/*错误*ExEnts ELST ENT I LSENT MSS OV SS TMP VL)
(提示“\n设置到中间对正…”)
(defun*错误*(msg)
(和ov(mapcar’setvar vl ov))
(或(wcmatch(strcase msg)“*中断,*取消*,*退出*”)
(princ(strcat“\n**错误:“msg”**”)
(普林斯)
(定义EXCENTS(ent/a)
(如果(setq ent(entnext ent))
(cons ent(excents ent)))
(setq vl’(“CMDECHO”“QAFLAGS”)ov(mapcar‘getvar vl))
(mapcar“setvar vl”(0 1))
(if(setq i-1 ss(ssget“_:L”'((0。“TEXT,MTEXT”)))
(程序
(if(setq mss(ssget“_P”'((0。“多行文字”)))
(程序
(setq LSENT(entlast))
(命令“_.explode”mss”)
(地图车
(功能
(lambda(x)(ssadd x ss))(ExEnts(cond(lstent)((entlast 107;ЮЮ)Ю)
 
(while(setq ent(ssname ss(setq i(1+i))))
 
(setq tmp(cdr(assoc 10(setq elst(entget ent))))))
(setq elst(entmod(subst(cons 11 tmp)(assoc 11 elst)elst))
elst(entmod(subst(cons 72 1)(assoc 72 elst)elst))
elst(entmod(subst(cons 73 2)(assoc 73 elst)elst))
elst(entmod(subst(cons 71 0)(assoc 73 elst)elst))
))))
(mapcar’setvar vl ov)
(普林斯)

Lee Mac 发表于 2022-7-6 12:33:38

谢谢Madoka
 
我可以问一下你为什么要搞DXF 71吗?
页: [1] 2
查看完整版本: 多行文字->文字对齐Tw