乐筑天下

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

[编程交流] 需要帮助提取属性

[复制链接]

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:13:02 | 显示全部楼层
李,我如何编辑你写的Lisp,这样我就可以把aVal作为变量调用。例如,我想决定“如果属性值='D',那么…”我试着只添加一个“if”函数,然后在此基础上设置一个变量,但在我的完整Lisp中似乎不起作用。我知道最后它会获取属性值并将其添加到列表中,然后与块名相结合。然后进入下一个属性/块。我该怎么做呢,搜索列表中的特定值,或者特别是“Border.D”等,以便可以相应地配置以下命令。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:16:24 | 显示全部楼层
嗨,Archiman,
 
如果要保持输出不变,即关联列表,则可以用许多不同的方式操作列表:
 
例如,要处理名为“block1”的块,例如:
 
  1. (foreach x blkLst
  2. (if (= "block1" (car x))
  3. [color=Navy]    ... Do something with result ...[/color]
  4.    ) ; end if
  5. ) ; end foreach
或者,可能有多种情况:
 
或者可以提取不同的属性值:
 
另一种方法-没有那么优雅:
 
或者您只需要一个具有属性“Size”的块名列表:
 
或者仅属性本身:
 
  1. (mapcar 'cdr blkLst)

希望这能进一步澄清问题。
 
如果你还有任何疑问,请告诉我
 
干杯
 
回复

使用道具 举报

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:21:13 | 显示全部楼层
李,我还有一个简短的问题。我遇到了一个障碍,在这个Lisp程序,我不知道为什么它不工作。基本上,这就是我面临的问题。在做出决定后,我将变量设置为数值,例如(感谢您对这个例程的帮助):
 
  1. (foreach y blkLst
  2.    (cond
  3.      ((= "A" (cdr x))
  4.       (setq numThree 20))
  5.      ((= "D" (cdr x))
  6.       (setq numThree 40))
  7.      ((= "E" (cdr x))
  8.       (setq numThree 60))
  9.      ((= "S" (cdr x))
  10.       (setq numThree 20))
  11.    )
  12. )

 
基本上,基于用户选择,我有三个不同的数字变量,以确定所需的确切配置(数字值设置为每个最终总和只允许一个配置)。我遇到的问题是,当我试图将这三个变量相加时。当达到这一点时:
 
  1. (setq numEq (+ numOne numTwo numThree))

 
我在命令行中得到错误:
 
  1. "; error: bad argument type: numberp: nil"

 
当我在VisualLisp中为lisp设置动画时,它在试图添加三个变量时会向右中断。如果您能提供任何帮助,或提出任何更好的设置方法,我们将不胜感激。基本上,我有三个决定配置的输入:两个来自对话框中的用户选择,一个来自图形文件中的属性。基于这些输入的所有不同组合,我需要相应地设置配置。如果你想查看整个文件,请告诉我。
 
提前感谢,
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:22:16 | 显示全部楼层
 
在上面的代码中,您似乎使用符号“y”分配给每个属性,然后在使用cond函数时继续使用不同的符号“x”。-这可能是没有设置变量的原因。
 
此外,您可以通过添加最终条件来测试上述理论:
 
  1. (foreach x blkLst
  2.    (cond
  3.      ((= "A" (cdr x))
  4.       (setq numThree 20))
  5.      ((= "D" (cdr x))
  6.       (setq numThree 40))
  7.      ((= "E" (cdr x))
  8.       (setq numThree 60))
  9.      ((= "S" (cdr x))
  10.       (setq numThree 20))
  11.      (T (princ "\nNo Atrribute Found."))
  12.    )
  13. )

 
这通常意味着您正在向函数提供一个设置为nil的参数。(见上文)
 
希望这有帮助!
 
回复

使用道具 举报

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:27:11 | 显示全部楼层
不幸的是,我仍然有这个问题。我在最后添加了这个测试,但它没有打印出来,所以我猜它与其他两个数字有关。以下是每个的例程,具体取决于它们是否是对话框中的单选按钮。
 
  1. (if (= Draw1 "1") (setq numTwo 1))
  2. (if (= Draw2 "1") (setq numTwo 2))
  3. (if (= Draw3 "1") (setq numTwo 3))
  4. (if (= Draw4 "1") (setq numTwo 4))
  5. (if (= Draw5 "1") (setq numTwo 5))

 
  1. 14

 
我想知道我是否需要在设置变量后转换为整数或其他东西,以确保它们是数值。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:31:23 | 显示全部楼层
我会考虑将“cond”与您拥有的选项一起使用。-但无论如何,它应该与“if”一起工作。
 
如果你只是在加法,那么它们是否是整数应该没有多大区别——但是如果你以后要除法,那么实数是必要的,所以把它们转换成实数可能是最好的。
 
(条件
(=图纸1“1”)(setq numTwo 1.0)
((…等)
)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:34:27 | 显示全部楼层
如果您仍然有问题,我建议您完整地发布代码,这样我就可以看到错误是否存在于其他地方。
回复

使用道具 举报

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:36:11 | 显示全部楼层
这只是我正在做的一个示例,以便为其他操作进行修改。这是我尝试创建的一个快速绘图应用程序。如果您注意到末尾的plot命令,我必须明确说明比例、旋转和偏移,以便通过命令行正确绘制。因此,我们有3个独立的绘图仪和三种尺寸的绘图。我还附上了随附文件。dcl。
 
  1. 15

 
 
  1. 16
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:38:31 | 显示全部楼层
 
 
我对对话框本身不太了解,因为我自己从来没有使用过它们,但我只是好奇,上面突出显示的是正确的吗?
回复

使用道具 举报

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:42:27 | 显示全部楼层
是的,没错。这就是决定在选择给定选项时取消激活(灰显)哪些选项。它是关于
 
  1. 17
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:05 , Processed in 0.455568 second(s), 70 queries .

© 2020-2025 乐筑天下

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