明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2857|回复: 8

vla-addtext 如何实现对中

[复制链接]
发表于 2012-12-27 14:46 | 显示全部楼层 |阅读模式
(command "text" "J" "C" pt txth 0 word) 这句语句里的“c“ 参数,如何用vla-addtext 或类似函数实现,表格文字需要对中,起点坐标是变化的。同时因为我的程序只能用vlisp函数。我实在想不出更好的办法。
发表于 2012-12-27 15:16 | 显示全部楼层
试试使用entmake,下面是我以前使用的:
  1. (defun mktext1(:sty :str :pt10 :j72 :j73)  ;写文字,参考实体
  2.   (setq :sty (cdr (entget :sty))
  3. :pt10(trans :pt10 1 0)
  4. :sty (subst (cons 1 :str) (assoc 1 :sty) :sty)
  5. :sty (subst (cons 10 :pt10) (assoc 10 :sty) :sty)
  6. :sty (subst (cons 11 :pt10) (assoc 11 :sty) :sty)
  7. :sty (subst (cons 72 :j72) (assoc 72 :sty) :sty)
  8. :sty (subst (cons 73 :j73) (assoc 73 :sty) :sty)
  9.   )
  10.   (entmake :sty)
  11. )
  12. (defun mktext2(:str :pt10 :j72 / :sty)  ;写文字
  13.   (setq :pt10(trans :pt10 1 0))
  14.   (entmake
  15.     (list
  16.       '(0 . "TEXT")
  17.       (cons 1 :str)
  18.       (cons 10 :pt10)
  19.       (cons 11 :pt10)
  20.       (cons 7 (setq :sty(getvar "textstyle")))
  21.       (cons 40 (getvar "textsize"))
  22.       (cons 41 (cdr (assoc 41 (tblsearch "style" :sty))))
  23. ;      (cons 50 alf)
  24.       (cons 51 (cdr (assoc 50 (tblsearch "style" :sty))))
  25.       '(71 . 0)
  26.       (cons 72 :j72)
  27.     )
  28.   )
  29. )
 楼主| 发表于 2012-12-28 00:21 | 显示全部楼层
本帖最后由 millermin 于 2012-12-28 02:26 编辑
ll_j 发表于 2012-12-27 15:16
试试使用entmake,下面是我以前使用的:


谢谢。我的操作对象是paperspace里的dbx 对象。这是不开图需要使用的对象。所以一切操作命令都必须针对vla object对象,就是vl开头的函数。
 楼主| 发表于 2012-12-28 02:24 | 显示全部楼层
本帖最后由 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

发表于 2012-12-28 10:17 | 显示全部楼层
试下:
(vla-update ts)
 楼主| 发表于 2012-12-28 11:25 | 显示全部楼层
sunny20102 发表于 2012-12-28 10:17
试下:
(vla-update ts)

谢谢。还是不行。投降了。
 楼主| 发表于 2012-12-30 12:39 | 显示全部楼层
millermin 发表于 2012-12-28 11:25
谢谢。还是不行。投降了。

又反复地实验了。程序针对当前打开的图形文件,就没有任何问题,但是对于dbxobject 对象,就不行。是不是可以宣告:不开图对文件的操作,添加文字时,文字只能左对齐,其他对齐方式都不能正常显示。(左对齐时缺省值)
发表于 2022-2-19 20:42 | 显示全部楼层
楼主想问一下解决了吗?
发表于 2022-2-19 23:28 | 显示全部楼层
(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)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-5 15:15 , Processed in 0.231764 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表