多行文字段落间距
可以通过lisp编辑多行文字的段落间距吗?我在dxf参考中找不到它(或者我错过了它-不确定到底要找什么)。。。假设它可以被dxf代码访问,我假设它可以用entmod更改?
我问的原因是,在2011年,多行文字段落对话框juust中的功能不起作用。Autodesk告诉我:
谢谢
恐怕是多行文字格式代码,类似于:
\\pxb0.5,a0.4;
before , after
使用此选项将其删除
谢谢李
有可能操纵它吗?这不是一个可以用entmod更改的普通DXF代码,是吗。。。?
你能给我一个如何访问它的提示吗? 格式化代码存储在多行文字字符串(DXF 1和3)中,因此需要处理这些字符串中编码的数据。 啊,谢谢 我想我可能会接受这个挑战——这可能是解决问题的一种方法,使用正则表达式对象来执行替换。
(defun c:test ( / *error* ss before after )
;; © Lee Mac 2010
(defun *error* ( msg )
(and RegEx (vlax-release-object RegEx))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ)
)
(if (and (setq ss (ssget "_:L" '((0 . "MTEXT"))))
(not (initget 5))
(setq before (getdist "\n'Before' Paragraph Spacing: "))
(not (initget 5))
(setq after(getdist"\n'After' Paragraph Spacing: ")))
(ApplyFootoSS (lambda ( x ) (LM:ReplaceParagraphFormatting x before after)) ss)
)
(princ)
)
(defun LM:ReplaceParagraphFormatting ( ent before after / new RegEx )
(mapcar '(lambda ( x ) (and (zerop (eval x)) (set x nil))) '(before after))
(setq new
(if (apply 'or (list before after))
(strcat "\\px"
(if before (strcat "b" (vl-princ-to-string before)) "")
(if after(strcat (if before ",a" "a") (vl-princ-to-string after)) "")
";"
)
""
)
)
(setq RegEx (vlax-create-object "VBScript.RegExp"))
(setq str (LM:RegExReplace RegEx new "\\\\p.*?;" (LM:GetTextString ent)))
(vlax-release-object RegEx)
(vla-put-TextString (vlax-ename->vla-object ent) str)
)
(defun LM:GetTextString ( ent / string )
;; © Lee Mac 2010
(vl-load-com)
(and (eq 'VLA-OBJECT (type ent))
(setq ent (vlax-vla-object->ename ent)))
((lambda ( string )
(mapcar
(function
(lambda ( pair )
(if (vl-position (car pair) '(1 3))
(setq string (strcat string (cdr pair)))
)
)
)
(entget ent)
)
string
)
""
)
)
(defun ApplyFootoSS ( foo ss )
;; © Lee Mac 2010
(
(lambda ( i / e )
(while (setq e (ssname ss (setq i (1+ i)))) (foo e))
)
-1
)
)
(defun LM:RegExReplace ( reg new pat str )
;; © Lee Mac 2010
(mapcar
'(lambda ( prop value ) (vlax-put-property reg prop value))
'(pattern global ignorecase) (list pat actrue acfalse)
)
(vlax-invoke reg 'replace str new)
)
谢谢李
但在2011年,这没有起作用——没有变化。也许是因为“已知问题”。。。? 我正在研究vl string subst,但我不确定从实体中提取字符串的最佳方法是什么。在我的应用中,文本相当长-远远超过DXF 1的限制(我不知道如何获得它们,所有DXF 3和1,全部加在一起…) 请尝试上面更新的代码 成功了!谢谢
它确实删除了大纲结构的左对齐和缩进。
页:
[1]
2