wharan 发表于 2022-8-22 13:13:18

VLA方法能否获取多行文字的行间距?

如题,怎么获得多行文字的行间距并进行操作?

liuhe 发表于 2022-8-22 13:30:23

取得多行文字对象的相对行间距系数。

语法及参数

(vla-get-LineSpacingFactor Object)
ObjectMText
这个属性适用的对象。
LineSpacingFactor 双精度;读/写
多行文字对象的相对行间距系数,输入一个0.25到4(含0.25与4)之间的值。







说明
    间距系数是某行文字的基准线到下一行文字的基准线的垂直距离。
    间距系数设定为单行文字的倍数。
    可以使用LineSpacingFactor属性,将行间距设成“至少”是指定的距离或“完全”是指定的距离。


范例

新窗口拷贝打印?
;;;从二代龙震工作室汉化帮助中提取
;;;本源代码由 xshrimp 2013.2.20 搜集整理,版权归原作者所有!

  (defun Example_LineSpacingFactor()
  ;;; 这个范例在模型空间建立一个MText 对象
  ;;; 接着找出对象的 LineSpacingFactor
  (VL-LOAD-COM)
  (setq AcadObject(vlax-get-acad-object)
  AcadDocument(vla-get-ActiveDocument Acadobject)
  mSpace(vla-get-ModelSpace Acaddocument)
)
  (setq corner1(vlax-make-safearray vlax-vbDouble '(0 . 2)))
  (vlax-safearray-fill corner1 '(0 10 0))
  (setq width 10)
  (setq textString "这是多行对象的文字字符串。")
  ;;; 建立多行文字对象
  (setq MTextObj(vla-AddMText mSpace corner1 width textString))
  (vla-ZoomExtents AcadObject)
  ;;; 找出当前的 LineSpacingFactor
  (setq currFactor(vla-get-LineSpacingFactor MTextObj))
  (princ (STRCAT " MText对象的 LineSpacingFactor 是: " (RTOS currFactor) "\n"))
  (PROMPT "<ENTER>进行:")(VL-CMDF pause)
  ;;; 改变 LineSpacingFactor
  (vla-put-LineSpacingFactor MTextObj 4)
  (setq newFactor(vla-get-LineSpacingFactor MTextObj))
  (princ (STRCAT " MText对象的新 LineSpacingFactor 是: " (RTOS newFactor) "\n"))
  (PROMPT "<ENTER>进行:")(VL-CMDF pause)
  ;;; 重设为 LineSpacingFactor
  (vla-put-LineSpacingFactor MTextObj currFactor)
  (princ (STRCAT " MText对象的 LineSpacingFactor 已经重设为: " (RTOS currFactor)))
  (princ)
)

;;;从二代龙震工作室汉化帮助中提取
;;;本源代码由 xshrimp 2013.2.20 搜集整理,版权归原作者所有!

  (defun Example_LineSpacingFactor()
  ;;; 这个范例在模型空间建立一个MText 对象
  ;;; 接着找出对象的 LineSpacingFactor
  (VL-LOAD-COM)
  (setq AcadObject(vlax-get-acad-object)
  AcadDocument(vla-get-ActiveDocument Acadobject)
  mSpace(vla-get-ModelSpace Acaddocument)
)
  (setq corner1(vlax-make-safearray vlax-vbDouble '(0 . 2)))
  (vlax-safearray-fill corner1 '(0 10 0))
  (setq width 10)
  (setq textString "这是多行对象的文字字符串。")
  ;;; 建立多行文字对象
  (setq MTextObj(vla-AddMText mSpace corner1 width textString))
  (vla-ZoomExtents AcadObject)
  ;;; 找出当前的 LineSpacingFactor
  (setq currFactor(vla-get-LineSpacingFactor MTextObj))
  (princ (STRCAT " MText对象的 LineSpacingFactor 是: " (RTOS currFactor) "\n"))
  (PROMPT "进行:")(VL-CMDF pause)
  ;;; 改变 LineSpacingFactor
  (vla-put-LineSpacingFactor MTextObj 4)
  (setq newFactor(vla-get-LineSpacingFactor MTextObj))
  (princ (STRCAT " MText对象的新 LineSpacingFactor 是: " (RTOS newFactor) "\n"))
  (PROMPT "进行:")(VL-CMDF pause)
  ;;; 重设为 LineSpacingFactor
  (vla-put-LineSpacingFactor MTextObj currFactor)
  (princ (STRCAT " MText对象的 LineSpacingFactor 已经重设为: " (RTOS currFactor)))
  (princ)
)


wharan 发表于 2022-8-22 17:49:12

liuhe 发表于 2022-8-22 13:30
取得多行文字对象的相对行间距系数。

语法及参数


谢谢,问题解决。
还有一个问题,当块中属性是多行文字时,却怎么也找不到LineSpacingFactor这个参数,怎么更改块中多行文字属性的行间距呢?

liuhe 发表于 2022-8-23 08:37:23

wharan 发表于 2022-8-22 17:49
谢谢,问题解决。
还有一个问题,当块中属性是多行文字时,却怎么也找不到LineSpacingFactor这个参数, ...

大哥你都04年就开始玩lisp,我才玩了两个月多点:L,我会的极其少。我给你提供给思路,先分解块,读取数据,再恢复块
页: [1]
查看完整版本: VLA方法能否获取多行文字的行间距?