millermin 发表于 2012-12-27 14:46:02

vla-addtext 如何实现对中

(command "text" "J" "C" pt txth 0 word) 这句语句里的“c“ 参数,如何用vla-addtext 或类似函数实现,表格文字需要对中,起点坐标是变化的。同时因为我的程序只能用vlisp函数。我实在想不出更好的办法。

ll_j 发表于 2012-12-27 15:16:05

试试使用entmake,下面是我以前使用的:
(defun mktext1(:sty :str :pt10 :j72 :j73);写文字,参考实体
(setq :sty (cdr (entget :sty))
:pt10(trans :pt10 1 0)
:sty (subst (cons 1 :str) (assoc 1 :sty) :sty)
:sty (subst (cons 10 :pt10) (assoc 10 :sty) :sty)
:sty (subst (cons 11 :pt10) (assoc 11 :sty) :sty)
:sty (subst (cons 72 :j72) (assoc 72 :sty) :sty)
:sty (subst (cons 73 :j73) (assoc 73 :sty) :sty)
)
(entmake :sty)
)
(defun mktext2(:str :pt10 :j72 / :sty);写文字
(setq :pt10(trans :pt10 1 0))
(entmake
    (list
      '(0 . "TEXT")
      (cons 1 :str)
      (cons 10 :pt10)
      (cons 11 :pt10)
      (cons 7 (setq :sty(getvar "textstyle")))
      (cons 40 (getvar "textsize"))
      (cons 41 (cdr (assoc 41 (tblsearch "style" :sty))))
;      (cons 50 alf)
      (cons 51 (cdr (assoc 50 (tblsearch "style" :sty))))
      '(71 . 0)
      (cons 72 :j72)
    )
)
)

millermin 发表于 2012-12-28 00:21:50

本帖最后由 millermin 于 2012-12-28 02:26 编辑

ll_j 发表于 2012-12-27 15:16 http://bbs.mjtd.com/static/image/common/back.gif
试试使用entmake,下面是我以前使用的:

谢谢。我的操作对象是paperspace里的dbx 对象。这是不开图需要使用的对象。所以一切操作命令都必须针对vla object对象,就是vl开头的函数。

millermin 发表于 2012-12-28 02:24:50

本帖最后由 millermin 于 2012-12-28 08:00 编辑

问题解决了一半。加多了这两句,
(vla-put-alignment ts acalignmentcenter)
(vla-put-textalignmentpoint ts pt-v)

文字在属性窗口里的信息是,“justify “ 显示”center“, text alignment x 里显示column中点坐标。这两项非常正常,和手动操作一样,但是文字的显示位置仍然是左对齐。但是双击目标后,目标立刻可以显示对中的位置。于是我想如果能regen一下,估计就成了。但是这时才发现
(vla-regen dbx acactiveviewport) 的针对对象是图像文件,而不是我的dbx对象。这下没辙了,谁能帮我进一步完善?
根据这里的说明,dbx对象没有regen的功能,不知有无其他方法更新图形显示。
http://carrot1983.blog.sohu.com/110033917.html#commentbox

sunny20102 发表于 2012-12-28 10:17:41

试下:
(vla-update ts)

millermin 发表于 2012-12-28 11:25:19

sunny20102 发表于 2012-12-28 10:17 static/image/common/back.gif
试下:
(vla-update ts)

谢谢。还是不行。投降了。

millermin 发表于 2012-12-30 12:39:52

millermin 发表于 2012-12-28 11:25 static/image/common/back.gif
谢谢。还是不行。投降了。

又反复地实验了。程序针对当前打开的图形文件,就没有任何问题,但是对于dbxobject 对象,就不行。是不是可以宣告:不开图对文件的操作,添加文字时,文字只能左对齐,其他对齐方式都不能正常显示。(左对齐时缺省值)

MXS 发表于 2022-2-19 20:42:47

楼主想问一下解决了吗?

yshf 发表于 2022-2-19 23:28:26

(defun c:AddText()
    (vl-load-com)
    (setq insertionPoint (vlax-3d-point 2 2 0) ;;插入点
          textString "Hello, Visual LISP!"   ;;文字内容
          height 1.0                           ;;文字高度
    )
    ;;取得模型空间对象
    (setq modelSpace (vla-get-ModelSpace
                         (vla-get-ActiveDocument
                              (vlax-get-acad-object)
                       )
                      )
    )
    ;;在模型空间写入文字
    (setq textObj (vla-AddText modelSpace textString insertionPoint height))
    (vlax-put-property textObj "Alignment" 1) ;设置文字对齐方式为:居中
    (setq pt (vlax-3d-point 3 3 0)) ;居中对齐点
    ;;指定对齐点(注意:需要先设置对齐方式再指定对齐点才行)
    (vlax-put-property textobj "TextAlignmentPoint" pt)
    (vla-ZoomAll (vlax-get-acad-object))
    (princ)
)
页: [1]
查看完整版本: vla-addtext 如何实现对中