按VP比例设置文本大小
我想根据视口比例将textsize变量设置为特定值。我认为这可以在lisp中完成,方法是读取vpscale,然后通过某种if,then语句进行处理。我是沿着正确的道路走,还是应该换个方向看? 并不是说这不能用代码来完成,而是您是否只考虑使用注释性文字,您为其指定了“纸张文字高度”,并且视口的注释比例(也将控制单向关系中的缩放比例)确定了您的实际大小?只是一个想法。 相信我,如果可以的话,我会的。这就是我们在AutoCad上使用的垂直产品之外进行所有注释的方式。其自动注释不支持注释性文字或标注样式。这让我疯狂! 在这种情况下,我认为您将实现一个命令和DocManager Reactor组合(用于处理MDI环境,SDI=0),并且您需要检查模型空间、图纸空间或PViewport是否处于活动状态,以确定使用哪个“比例”以编程方式更新TextSize系统变量。
哦,您可能会加入一个SysVar或Lisp反应器,以观察其他例程/用户何时启动更改以采取相应的行动。只需注意循环。 还有-你有几种文字尺寸吗?E、 g.一个用于注释,另一个用于视图标题,另一个用于区域名称等。如何确定这些的最终高度?
问题是,具有高度的文本样式会获得该高度,而与当前的TextSize系统变量无关。实际上,每次绘制文本时,它都会恢复到样式的高度。只有当样式的高度=0时,TextSize变量才会产生任何影响。但是当样式的高度=0时,你怎么知道这段文本的最终高度应该是多少?因此,您要么必须硬编码每个stylename=PS height,要么将其保存到字典/扩展数据中,但在任何一种情况下,所有样式的高度都需要=0。
然后,如果可以使用anno scale设置视口的高度,可能会更容易一些,因为可以通过CAnnoScaleValue系统变量获得视口的“缩放因子”。否则,您需要计算VP的缩放,例如从其DXF扩展数据。
那么,您只关心通过视口放置文本吗?一、 e.如果您在“模型”选项卡中,是否忽略比例因子/CAnnoScale? 我确实将要更改的样式的文本高度设置为0。我在想一些简单的事情。。。例如,如果视口比例设置为1/2“=1'-0”,文本大小将自动调整为2 1/4。如果比例设置为1/4“=1'-0”,文本大小将调整为4 1/2”。一切都将在纸面上完成。 这个话题引出了我的一个想法,我还没有将其付诸实践。NET插件,该插件将设置存储在XML中,允许ObjectModified事件处理程序在基于XML中用户定义的设置将所有注释实体(即DIM、引线、多行文字、多重引线、文本等)放置/更改到新层时,以编程方式“更新”所有注释实体。
仍在尝试确定注册实体级事件处理程序或数据库本身是否更好。
\切线
如果我正确理解了这两个reactor上的your链接,那么命令reactor将启动一系列事件,只要在该特定图形中加载lisp,DocManager reactor就会响应这些事件。因此,只要我设置命令反应器来观察视口的比例,DocManager反应器就会自动执行我选择的指定命令,对吗?
听起来像是我想做的。现在最难的部分。。。。让它发生。谢谢你为我指明了正确的方向。
不完全是。。。当命令反应器的事件触发时(即CommandWillStart、CommandEnded等),命令反应器将允许您调用函数(恰当地称为回调)。例如,当您在图纸空间中激活PViewport时,会调用MSPACE命令(双击时发生事件)。
命令反应器将负责调用当前图形(ActiveDocument对象)中的“协调”函数(用于确定哪个空间处于活动状态的函数;即模型、纸张或PViewport处于活动状态)。
DocManager Reactor将负责在您切换图形(文档)时调用“协调”功能。。。这允许一个文档在图纸空间中,另一个文档在PViewport中处于活动状态,只需来回切换以调用“协调”函数,以编程方式采取必要的操作。
问题的关键是,代码必须加载到每个打开的图形中(文档添加到DocumentCollection),以便让用户产生这样的错觉,即这只是自动工作。。。我使用阿卡多克。lsp加载这些定制。
听起来,你正处于这样一个时刻,你的头脑刚刚打开,接受了这种定制可以提供的许多可能性,是时候让你自己“发现”一些了。。。试一试,自己编写代码,当你陷入困境时,我们会在这里。这(为自己编写代码,但它不起作用,然后必须学习如何修复它)将比我所能做的更多。 好的,这不是上面建议的方式。我认为我写Lisp程序,无法完成反应堆路线。但我认为(在阅读了Afralisp网站的一些部分后),我至少可以尝试使用一个条件函数。难道我不理解如何使用条件句,因为下面的内容并不像我根据所读内容所想的那样有效吗。
(defun c:tsize (/ vps tsz)
(setq vps (getvar "_cannoscale"))
(setq tsz (cond
((= vps "1/8\042 = 1'-0\042") 9.000)
((= vps "1/4\042 = 1'-0\042") 4.500)
((= vps "1/2\042 = 1'-0\042") 2.250)
((= vps "3/4\042 = 1'-0\042") 1.500)
((= vps "1\042 = 1'-0\042") 1.125)
((= vps "1-1/2\042 = 1'-0\042") 0.750)
(t nil)
)
)
(setvar "textsize" tsz)
(command "_regenall")
(princ)
)
页:
[1]
2