乐筑天下

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

[编程交流] 关联列表

[复制链接]

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-6 06:45:43 | 显示全部楼层 |阅读模式
你好
我的代码执行以下操作
 
[列表=1]
  • 向用户询问a、b点
  • 向用户询问a b c d行
  • 返回包含所有用户输入的关联列表
    [/列表]
    我看了veritable userData,我得到了20个条目,而我希望有7个。
     
    有人能解释为什么吗?
     
    1. (defun main()
    2. (setq userData (wl:getUserData))
    3. )
    4. (defun wl:getUserData (/ strpt endpt)
    5. (if (setq strpt (getpoint "\nStart point of path: "))
    6.    (if    (setq endpt (getpoint strpt "\nEndpoint of path: "))
    7.    (progn
    8.      (setq wall (getPoly wall "\nSelect Wall eleveation line"))
    9.      (setq front (getPoly front "\nSelect Front eleveation line"))
    10.      (setq back (getPoly back "\nSelect Back eleveation line"))
    11.      (setq exist (getPoly exist "\nSelect Exist eleveation line"))
    12.      (list
    13.       cons 10 strpt
    14.       cons 11 endpt
    15.       cons 41 (distance strpt endpt)
    16.       cons 51 wall
    17.       cons 52 front
    18.       cons 53 back
    19.       cons 54 exist
    20.      ) ;_list
    21.       
    22.      );_progn
    23.    ) ;_if endpt
    24. ) ;_if strp
    25. ) ;_defun
    26. (defun getPoly (ent msg)
    27. (if (setq ent (car (entsel msg)))
    28.    (if    (eq (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
    29.    (princ)
    30.    ) ;_if
    31. ) ;_if
    32. ent
    33. )

     
    谢谢
    谢伊
  • 回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 06:55:23 | 显示全部楼层
     
    您的wl:getUserData函数将返回一个包含21项的列表,因为您为list函数提供了21个参数,可以从中构造列表:
    似乎缺少几个表达式:
    还要注意,无论用户是否选择LWPolyline或任何其他对象,getPoly函数都将返回实体名称:
    该函数的ent参数也是冗余的,因为它立即被重新定义为局部变量。
     
    此外,请注意,如果用户未能选择对象,则各种“getPoly”表达式将返回nil,从而导致变量wall、front、back、exist包含null值。
    1. 4
    回复

    使用道具 举报

    218

    主题

    699

    帖子

    483

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1090
    发表于 2022-7-6 07:05:14 | 显示全部楼层
    我懂了
     
    是否需要在函数中包含参数(定义fun(/v1 v2)并在函数中再次定义(setq v1 2)(setq v2 2)?
     
    谢谢
    谢伊
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 07:12:22 | 显示全部楼层
     
    defun表达式中正斜杠后面的符号是变量,其范围是所定义函数的局部范围,不是函数所需的参数或参数。在函数中定义但在defun表达式中未声明为局部变量的符号将是全局的(除非声明为调用函数的局部变量)。
    回复

    使用道具 举报

    218

    主题

    699

    帖子

    483

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1090
    发表于 2022-7-6 07:21:16 | 显示全部楼层
    我认为使变量全局或局部的是它们在代码中的位置(函数外部或内部)。
    所以你说defun变量是局部的,
    函数内外的setq变量是全局变量
    如果两者都存在,那么defun中的变量会覆盖setq定义的变量?
     
    谢谢
    谢伊
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 07:26:15 | 显示全部楼层
     
    否-如上所述,defun表达式中正斜杠后面列出的定义符号将是该函数的局部符号。
     
    考虑以下演示变量范围的示例:
    1. 5
    结果:
    我建议您阅读围绕defun函数和符号与函数处理的Visual LISP IDE(VLIDE)帮助文档主题。
    回复

    使用道具 举报

    218

    主题

    699

    帖子

    483

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1090
    发表于 2022-7-6 07:37:29 | 显示全部楼层
     
    我怎样才能善待用户,而不是退出该程序,我会告诉他:“这不是一个多边形,请选择一个多边形”
     
    谢谢
    谢伊
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 07:38:58 | 显示全部楼层
     
    使用while循环不断提示用户,直到满足选择标准,或者用户已取消提示。
    回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-6 07:49:11 | 显示全部楼层
    如果您拾取的4个柱脚是墙,则尝试此方法“pick pt inside”“pick pt outside”使用围栏“F”选项,如果只有3个,则可以一次找到所有4个对象,然后显示程序无法工作的消息
     
    1. 7
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-10 15:23 , Processed in 0.502391 second(s), 70 queries .

    © 2020-2025 乐筑天下

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