乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 49|回复: 19

[编程交流] 按VP比例设置文本大小

[复制链接]

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 06:15:01 | 显示全部楼层 |阅读模式
我想根据视口比例将textsize变量设置为特定值。我认为这可以在lisp中完成,方法是读取vpscale,然后通过某种if,then语句进行处理。我是沿着正确的道路走,还是应该换个方向看?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:19:46 | 显示全部楼层
并不是说这不能用代码来完成,而是您是否只考虑使用注释性文字,您为其指定了“纸张文字高度”,并且视口的注释比例(也将控制单向关系中的缩放比例)确定了您的实际大小?
 
只是一个想法。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 06:23:57 | 显示全部楼层
相信我,如果可以的话,我会的。这就是我们在AutoCad上使用的垂直产品之外进行所有注释的方式。其自动注释不支持注释性文字或标注样式。这让我疯狂!
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:26:04 | 显示全部楼层
在这种情况下,我认为您将实现一个命令和DocManager Reactor组合(用于处理MDI环境,SDI=0),并且您需要检查模型空间、图纸空间或PViewport是否处于活动状态,以确定使用哪个“比例”以编程方式更新TextSize系统变量。
 
哦,您可能会加入一个SysVar或Lisp反应器,以观察其他例程/用户何时启动更改以采取相应的行动。只需注意循环。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 06:30:28 | 显示全部楼层
还有-你有几种文字尺寸吗?E、 g.一个用于注释,另一个用于视图标题,另一个用于区域名称等。如何确定这些的最终高度?
 
问题是,具有高度的文本样式会获得该高度,而与当前的TextSize系统变量无关。实际上,每次绘制文本时,它都会恢复到样式的高度。只有当样式的高度=0时,TextSize变量才会产生任何影响。但是当样式的高度=0时,你怎么知道这段文本的最终高度应该是多少?因此,您要么必须硬编码每个stylename=PS height,要么将其保存到字典/扩展数据中,但在任何一种情况下,所有样式的高度都需要=0。
 
然后,如果可以使用anno scale设置视口的高度,可能会更容易一些,因为可以通过CAnnoScaleValue系统变量获得视口的“缩放因子”。否则,您需要计算VP的缩放,例如从其DXF扩展数据。
 
那么,您只关心通过视口放置文本吗?一、 e.如果您在“模型”选项卡中,是否忽略比例因子/CAnnoScale?
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 06:33:28 | 显示全部楼层
我确实将要更改的样式的文本高度设置为0。我在想一些简单的事情。。。例如,如果视口比例设置为1/2“=1'-0”,文本大小将自动调整为2 1/4。如果比例设置为1/4“=1'-0”,文本大小将调整为4 1/2”。一切都将在纸面上完成。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:34:12 | 显示全部楼层
这个话题引出了我的一个想法,我还没有将其付诸实践。NET插件,该插件将设置存储在XML中,允许ObjectModified事件处理程序在基于XML中用户定义的设置将所有注释实体(即DIM、引线、多行文字、多重引线、文本等)放置/更改到新层时,以编程方式“更新”所有注释实体。
 
仍在尝试确定注册实体级事件处理程序或数据库本身是否更好。
 
\切线
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 06:40:17 | 显示全部楼层
 
如果我正确理解了这两个reactor上的your链接,那么命令reactor将启动一系列事件,只要在该特定图形中加载lisp,DocManager reactor就会响应这些事件。因此,只要我设置命令反应器来观察视口的比例,DocManager反应器就会自动执行我选择的指定命令,对吗?
 
听起来像是我想做的。现在最难的部分。。。。让它发生。谢谢你为我指明了正确的方向。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:43:28 | 显示全部楼层
 
不完全是。。。当命令反应器的事件触发时(即CommandWillStart、CommandEnded等),命令反应器将允许您调用函数(恰当地称为回调)。例如,当您在图纸空间中激活PViewport时,会调用MSPACE命令(双击时发生事件)。
 
命令反应器将负责调用当前图形(ActiveDocument对象)中的“协调”函数(用于确定哪个空间处于活动状态的函数;即模型、纸张或PViewport处于活动状态)。
 
DocManager Reactor将负责在您切换图形(文档)时调用“协调”功能。。。这允许一个文档在图纸空间中,另一个文档在PViewport中处于活动状态,只需来回切换以调用“协调”函数,以编程方式采取必要的操作。
 
问题的关键是,代码必须加载到每个打开的图形中(文档添加到DocumentCollection),以便让用户产生这样的错觉,即这只是自动工作。。。我使用阿卡多克。lsp加载这些定制。
 
听起来,你正处于这样一个时刻,你的头脑刚刚打开,接受了这种定制可以提供的许多可能性,是时候让你自己“发现”一些了。。。试一试,自己编写代码,当你陷入困境时,我们会在这里。这(为自己编写代码,但它不起作用,然后必须学习如何修复它)将比我所能做的更多。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 06:45:52 | 显示全部楼层
好的,这不是上面建议的方式。我认为我写Lisp程序,无法完成反应堆路线。但我认为(在阅读了Afralisp网站的一些部分后),我至少可以尝试使用一个条件函数。难道我不理解如何使用条件句,因为下面的内容并不像我根据所读内容所想的那样有效吗。
 
  1. (defun c:tsize (/ vps tsz)
  2. (setq vps (getvar "_cannoscale"))
  3. (setq tsz (cond
  4.       ((= vps "1/8\042 = 1'-0\042") 9.000)
  5.       ((= vps "1/4\042 = 1'-0\042") 4.500)
  6.       ((= vps "1/2\042 = 1'-0\042") 2.250)
  7.       ((= vps "3/4\042 = 1'-0\042") 1.500)
  8.       ((= vps "1\042 = 1'-0\042") 1.125)
  9.       ((= vps "1-1/2\042 = 1'-0\042") 0.750)
  10.       (t nil)
  11.       )
  12. )
  13. (setvar "textsize" tsz)
  14. (command "_regenall")
  15. (princ)
  16. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 18:49 , Processed in 0.728208 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表