乐筑天下

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

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

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:47:35 | 显示全部楼层
您可能会发现使用CANNOSCALEVALUE系统变量更容易:
 
  1. (getvar 'cannoscalevalue)

 
仅供参考:非本地化前缀('')仅在命令中需要。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 06:50:02 | 显示全部楼层
在此版本之前,我确实使用了CANNOSCALEVALUE。这只返回了条件语句的最后一行,当我更改视口的比例,然后再次运行程序时,不会返回任何其他文本大小值。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:55:25 | 显示全部楼层
根据您的代码,这里有两种选择:
 
  1. (defun c:tsize ( / tsz )
  2.    (if
  3.        (setq tsz
  4.            (cdr
  5.                (assoc (/ 1.0 (getvar 'cannoscalevalue))
  6.                   '(
  7.                        (96.0 . 9.000)
  8.                        (48.0 . 4.500)
  9.                        (24.0 . 2.250)
  10.                        (16.0 . 1.500)
  11.                        (12.0 . 1.125)
  12.                        (08.0 . 0.750)
  13.                    )
  14.                )
  15.            )
  16.        )
  17.        (setvar 'textsize tsz)
  18.    )
  19.    (princ)
  20. )

 
  1. (defun c:tsize ( / )
  2.    (setvar 'textsize (/ 3.0 (* (getvar 'cannoscalevalue) 32.0)))
  3.    (princ)
  4. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:57:24 | 显示全部楼层
 
然后,您可能需要调整正在测试的硬编码值(字符串)。。。我使用十进制,而不是上面看起来像建筑单位的东西。。。但对我来说,1“=20”(例如),当我使用(getvar‘cannoscale)时,实际上返回“1\”=20’”。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:59:45 | 显示全部楼层
很好,李。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 07:03:41 | 显示全部楼层
这是我的第一个版本。当我发现CANNOSCALEVALUE时得到的值是一个长的十进制数。我发现是分数形式的分数除以12。
 
  1. (defun c:tsize (/ vps tsz)
  2. (setq vps (getvar "_cannoscalevalue"))
  3. (setq tsz (cond
  4.       ((= vps "0.010417") 9.000)
  5.       ((= vps "0.020833") 4.500)
  6.       ((= vps "0.041667") 2.250)
  7.       ((= vps "0.062500") 1.500)
  8.       ((= vps "0.083333") 1.125)
  9.       ((= vps "0.125000") 0.750)
  10.       (t nil)
  11.       )
  12. )
  13. (setvar "textsize" tsz)
  14. (command "_regenall")
  15. (princ)
  16. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:07:56 | 显示全部楼层
 
您已经正确理解了CANNOSCALEVALUE系统变量持有双[实]数据类型的值,但您正在代码中比较条件语句中的字符串:
 
 
此外,如前所述,系统变量不需要下划线非本地化前缀:
 
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 07:11:23 | 显示全部楼层
我不确定我是否遵循了你的代码李中的几个项目。如果撇号(')应该表示一个列表,那么它是否也可以作为一种变量,您可以从中调用?我指的是:
 
  1.                 (assoc (/ 1.0 (getvar[color="red"] 'cannoscalevalue[/color]))
  2.                  [color="red"] '[/color](
  3.                        (96.0 . 9.000)
  4.                        (48.0 . 4.500)
  5.                        (24.0 . 2.250)
  6.                        (16.0 . 1.500)
  7.                        (12.0 . 1.125)
  8.                        (08.0 . 0.750)
  9.                    )

 
您还将撇号放在系统变量TEXTSIZE之前。它是否记得您使用CDR时列表中的第二个元素?
 
这有什么意义吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:14:22 | 显示全部楼层
 
我会阻止你的
 
撇号并不表示列表。撇号(或引号)用于将表达式标记为文字-按“面值”取值-即不由AutoLISP解释器计算。
 
考虑以下示例:
 
这里,引用的整数列表相当于为列表函数提供5个整数参数。
 
再次,引用的列表结构在“面值”处被视为点对列表。如图所示,要使用AutoLISP函数构造此列表,需要将列表函数和cons函数相结合。
 
本例演示了“文字”和“面值”等术语的含义。
 
在这里,我们将符号x的值指定为4;在第一个表达式中,列表函数提供了4个参数:1、2、3和x。因此,变量x由列表函数求值,并返回列表(1、2、3、4)。
 
当列表被引用时,它被标记为文字,因此不进行评估;这导致符号x未被评估,并在列表中保留为符号。
 
然而,撇号或引号不仅仅用于列表,如以下示例所示:
 
此处,撇号用于将函数“+”标记为mapcar函数的参数,并且两个列表参数也被引用,因为它们不包含要计算的表达式。(考虑一下,如果未引用“+”函数,我们将收到“bad function”错误,因为计算“+”符号将返回指向其函数定义的指针)。
 
如果你厌恶撇号,上述内容可以等效为:
 
编译到VLX/FAS时,为了优化,可以使用函数:
 
关于getvar/setvar示例:使用撇号是因为getvar/setvar函数可以接受字符串或符号参数:
 
因此引用符号作为参数传递给getvar(或setvar)函数,而不是进行求值。
 
如上所述,也可以这样写:
 
请注意,如果未使用撇号,则表达式的计算公式为:
 
因为osmode符号在活动文档名称空间中没有值。
 
当然,我们可以给这个符号赋值(只是为了让你困惑):
 
  1. 15
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:15:31 | 显示全部楼层
 
干杯伙计
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:41 , Processed in 0.372733 second(s), 70 queries .

© 2020-2025 乐筑天下

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