ILoveMadoka 发表于 2022-7-6 14:35:05

是否在没有选项的情况下对齐文本?

我有几个不同的例程可以将理由更改为任何
Autocad中可用的对齐方式。每一个都相当冗长。
我要找的是一个简单的例程来选择我的文本,并让它更改为左中心。
没有选项,没有用户输入。
 
选择对象
进来
进来
完成!
 
有谁有这样简单的例行公事吗?或者你能给我指一个吗?
 
你们太棒了!
TIA!

borgunit 发表于 2022-7-6 14:41:11

这是我下载过的一个旧的。。。

(defun c:tj (/ j e p11 p10 f en plin p10n fn y)
   (setq j (getstring "\nLeft/Center/Middle/Right"))
   (setq j (strcase j))
   (setq e (entget (car (entsel))))
   (setq p11 (assoc 11 e))
   (setq p10 (assoc 10 e))
   (setq f (assoc 72 e))
   (setq en e)
   (if (= (cdr f) 0) (setq plin (cons 11 (cdr p10))))
   (if (= (cdr f) 0) (setq en (subst plin p11 en)))
   (if (and (= j "L") (/= (cdr f) 0))
       (progn
         (setq p10 (cons 10 (cdr p11)))
         (setq en (subst p1on p10 en))
       )
   )
   (IF (= J "L") (setq fn 0))
   (IF (= J "C") (setq fn 1))
   (IF (= J "M") (setq fn 4))
   (IF (= J "R") (setq fn 2))
   (setq fn (cons 72 fn))
   (setq en (subst fn f en))
   (entmod en)
       (princ)
)

ILoveMadoka 发表于 2022-7-6 14:48:36

不,不是这样的。
我有一个,它没有解决
“更新”的理由。
我认为中间偏左等等。。同时使用(assoc 71和(assoc 72
 
当我开始CAD时,Autocad第9版刚刚推出。。。
所以中间偏左之类的在当时并不存在。。
 
我想如果我能确定组码是特定的
根据特定的理由,我可以修改上述代码
以适应。

CAB 发表于 2022-7-6 14:52:35

(defun c:tjLeft(/ ss obj)
(vl-load-com)
(and
   (setq ss (ssget "_+.:E:S" '((0 . "TEXT"))))
   (setq obj (vlax-ename->vla-object (ssname ss 0)))
   (vla-put-alignment obj acAlignmentLeft)
)
(princ)
)

;|
acAlignmentLeft
acAlignmentCenter
acAlignmentRight
acAlignmentAligned
acAlignmentMiddle
acAlignmentFit
acAlignmentTopLeft
acAlignmentTopCenter
acAlignmentTopRight
acAlignmentMiddleLeft
acAlignmentMiddleCenter
acAlignmentMiddleRight
acAlignmentBottomLeft
acAlignmentBottomCenter
acAlignmentBottomRight
|;

ILoveMadoka 发表于 2022-7-6 14:57:16

真 的!
你太不适合我了!!
非常感谢!!
 
很棒的编程知识!

ILoveMadoka 发表于 2022-7-6 15:01:19

那么中心对齐的语法是什么?
我以为它只是在取代acAlignmentLeft
使用acAlignmentCenter,但这将我的文本移动到了0,0
 
非常感谢!
 
 

CAB 发表于 2022-7-6 15:09:50

使用此例程获取对象属性:
(defun c:dump (/ ent obj)
(while (setq ent (entsel "\nSelect entity to get object data: "))
   (setq obj (vlax-ename->vla-object (car ent)))
   (vlax-dump-object obj t)
   (vlax-release-object obj)
)
(princ)
)
 
Select object:
#<VLA-OBJECT IAcadText 02ce832c>
; IAcadText: AutoCAD Text Interface
; Property values:
;   Alignment = 0
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00ac8928>
;   Backward = 0
;   Color = 256
;   Document (RO) = #<VLA-OBJECT IAcadDocument 01b694bc>
;   Handle (RO) = "A367"
;   HasExtensionDictionary (RO) = 0
;   Height = 5.0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 02cebb0c>
;   InsertionPoint = (1799.16 -194.612 0.0)
;   Layer = "POWER"
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 29887800
;   ObjectName (RO) = "AcDbText"
;   ObliqueAngle = 0.0
;   OwnerID (RO) = 29804560
;   PlotStyleName = "ByLayer"
;   Rotation = 0.0
;   ScaleFactor = 1.0
;   StyleName = "SIMPLEX 0"
;   TextAlignmentPoint = (0.0 0.0 0.0)
;   TextGenerationFlag = 0
;   TextString = "this is a"
;   Thickness = 0.0
;   UpsideDown = 0
;   Visible = -1
 
看看这是不是你想要的:
 
(defun c:tjc(/ ss obj)
(vl-load-com)
(if
   (and
   (setq ss (ssget "_+.:E:S" '((0 . "TEXT"))))
   (setq obj (vlax-ename->vla-object (ssname ss 0)))
   (setq ipt (vla-get-InsertionPoint obj)))
   (progn
   (vla-put-alignment obj acAlignmentCenter)
   (vla-put-TextAlignmentPoint obj ipt)
   )
)
(princ)
)

;|
acAlignmentLeft
acAlignmentCenter
acAlignmentRight
acAlignmentAligned
acAlignmentMiddle
acAlignmentFit
acAlignmentTopLeft
acAlignmentTopCenter
acAlignmentTopRight
acAlignmentMiddleLeft
acAlignmentMiddleCenter
acAlignmentMiddleRight
acAlignmentBottomLeft
acAlignmentBottomCenter
acAlignmentBottomRight
|;

Longchamp 发表于 2022-7-6 15:10:57

对不起,我对autoCAD中的编程了解不多。有人能告诉我如何安装这个吗?我正在使用land desktop 06

Zorg 发表于 2022-7-6 15:17:42

 
将其添加到ACAD。LSP文件

CAB 发表于 2022-7-6 15:22:16

复制代码,确保您获得了代码的最后一行,有时会错过这一行。
将其像记事本一样粘贴到文本编辑器中。
保存到你的ACAD文件夹,我有一个子文件夹名为LISP,我保存到。
在命令行中使用APPLOAD
导航到刚刚保存的文件并将其加载或添加到要为每个DWG加载的启动套件中。
请注意,load将仅为当前DWG安装例程&仅适用于此会话。
 
查看lisp文件中的(defun)
上面的那个有这个
(defun c:tjc(/ ss obj)
c: 意味着您可以通过键入tjc从命令行运行它
如果c:像这样丢失了
(defun tjc(/ ss obj)
您需要输入(tjc)来运行它。
 
任何人看到我遗漏的东西请插话。
 
HTH公司
页: [1] 2
查看完整版本: 是否在没有选项的情况下对齐文本?