乐筑天下

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

[编程交流] 布局之间的快速切换

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 14:43:29 | 显示全部楼层 |阅读模式
您好,我正在绘制一个有75张布局图纸(全部编号)的图形,我想创建一个按钮,单击该按钮时,需要用户输入(即图纸编号),然后更改为该图纸。
 
提前感谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:53:22 | 显示全部楼层
快速一:
 
  1. (defun c:lsw (/ lay)
  2. (if (and (not (eq "" (setq lay (getstring t "\nSpecify Layout Name: "))))
  3.           (member lay (layoutlist)))
  4.    (setvar "CTAB" lay)
  5.    (princ "\n<!> Layout not Found <!>"))
  6. (princ))

 
区分大小写
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:01:26 | 显示全部楼层
我认为这不区分大小写:
 
  1. (defun c:lsw (/ lay lst)
  2. (vl-load-com)
  3. (if (and (not (eq "" (setq lay (strcase (getstring t "\nSpecify Layout Name: ")))))
  4.           (member lay (setq lst (mapcar 'strcase (layoutlist)))))
  5.    (setvar "CTAB" (nth (vl-position lay lst) (layoutlist)))
  6.    (princ "\n<!> Layout not Found <!>"))
  7. (princ))
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-6 15:02:30 | 显示全部楼层
还有一种方法:
 
  1. (defun c:tabchange (/ $value choice dir file fn fno id laylst sel w)
  2. (if (and (setq laylst (vl-sort (layoutlist) '<))
  3.           (setq w (itoa (apply 'max (mapcar 'strlen laylst))))
  4.           (setq fn (vl-filename-mktemp nil nil ".dcl"))
  5.           (setq fno (open fn "w"))
  6.      )
  7.    (progn
  8.      (write-line
  9.        (strcat
  10.          "batch : dialog { label = "RJP-TabChanger";
  11.               :column {
  12.          :boxed_column {
  13.            label = "< Select Tab >";
  14.            : list_box {
  15.              key = "laylist";
  16.              height = 30;
  17.              width = "
  18.          w
  19.          ";
  20.              multiple_select = false;
  21.              }
  22.           }
  23.           }
  24.          : row {
  25.            : button {
  26.              label = "&Select...";
  27.              key = "select";
  28.              }
  29.            : button {
  30.              label = "&Cancel";
  31.              is_cancel = true;
  32.              key = "cancel";
  33.              }
  34.             
  35.          }
  36.           }"
  37.        )
  38.        fno
  39.      )
  40.      (close fno)
  41.      (setq id (load_dialog fn))
  42.      (if (not (new_dialog "batch" id))
  43.        (exit)
  44.      )
  45.      (start_list "laylist")
  46.      (mapcar 'add_list laylst)
  47.      (end_list)
  48.      (action_tile "laylist" "(setq choice $value)")
  49.      (action_tile "select" "(done_dialog)")
  50.      (action_tile "cancel" "(setq choice nil)(done_dialog)(vl-file-delete fn)")
  51.      (start_dialog)
  52.      (unload_dialog id)
  53.      (if (and choice (setq sel (nth (atoi choice) laylst)))
  54.        (setvar 'ctab sel)
  55.      )
  56.    )
  57. )
  58. (princ)
  59. )
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:10:19 | 显示全部楼层
亲爱的,一切都很好。我认为我将使用rjp的例程,因为不需要输入,只需从下拉列表中选择。
我很好奇它们是如何工作的,试图在脑海中把最后两个分解开来,逐行理解它们。编辑:在这方面运气不太好,对如何学习lisp有什么建议吗?
非常感谢你们的帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:15:53 | 显示全部楼层
很高兴他们能满足你的要求
 
如果您对代码的工作方式有任何疑问,请提问
 
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:24:52 | 显示全部楼层
干杯,李,
 
我本来打算下午你,但没有下午??你的代码比较短,所以如果你能帮我把它分解一下,也许是一个更好的开始。
第1行defun(定义函数)c:(命令?)lsw(命令触发器)(/lay lst)(?)
2号线(vl负载com)(?)
(if(and(not)(eq“”(setq lay(strcase(getstring t“\n指定布局名称:”))))
(成员层(setq lst(mapcar's strcase(layoutlist 107;)а)а)
(setvar“CTAB”(第n个(vl位置lay lst)(布局列表)))
(princ“\n Layout not Found”))错误消息,但不确定它是如何产生的。
(普林斯)
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:30:56 | 显示全部楼层
罗恩·琼普,我能要求你也把代码分解一下吗?我想请你发邮件,但在论坛上可能会更好,这样其他人也可以从中学习。
你的程序很棒,ronjonp,我想到的一件事是添加一个打印按钮,这样它在更改布局后会自动打开打印对话框,你能帮我解决这个问题吗?
我猜它会像这样开始;
:行{
:按钮{
标签=\“&打印\”;
???????????????????
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:35:15 | 显示全部楼层
好的,这是我的代码分解。Ron的有点复杂,因为他创建了一个临时DCL文件,文件名由vl filename mktemp生成,然后将此DCL文件用作用户界面。
 
但希望这能有所帮助:
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] [i][color=#990099]; Define the function[/color][/i]
  2.       c:  [i][color=#990099]; Defined function is invoked through Command line[/color][/i]
  3.       lsw [i][color=#990099]; Function Syntax (that will invoke the function)[/color][/i]
  4. [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] lay lst[b][color=RED])[/color][/b] [i][color=#990099]; Arguments and Localised Variables[/color][/i]
  5. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Load the Visual LISP functions[/color][/i]
  6. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [i][color=#990099]; If the following is true...[/color][/i]
  7.    [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [i][color=#990099]; Both these Conditions must be met in order to continue[/color][/i]
  8.      [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [i][color=#990099]; As it says on the tin[/color][/i]
  9.        [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [i][color=#990099]; Returns T if the two expressions are identical[/color][/i]
  10.          [b][color=#ff00ff]""[/color][/b]  [i][color=#990099]; An empty String[/color][/i]
  11.          [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lay [i][color=#990099]; Setting the following to a Variable "lay"[/color][/i]
  12.                 [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b]  [i][color=#990099]; Capitalise the Following[/color][/i]
  13.                   [b][color=RED]([/color][/b][b][color=BLUE]getstring[/color][/b] [b][color=Blue]t[/color][/b] [b][color=#ff00ff]"\nSpecify Layout Name: "[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Retrieve a String from the User[/color][/i]
  14.                   [b][color=RED])[/color][/b] [i][color=#990099]; end strcase[/color][/i]
  15.                [b][color=RED])[/color][/b] [i][color=#990099]; end setq[/color][/i]
  16.          [b][color=RED])[/color][/b] [i][color=#990099]; end eq[/color][/i]
  17.        [b][color=RED])[/color][/b] [i][color=#990099]; end not[/color][/i]
  18.           [b][color=RED]([/color][/b][b][color=BLUE]member[/color][/b] lay [i][color=#990099]; If lay is a member of the following[/color][/i]
  19.                   [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lst [i][color=#990099]; Set the following to a variable "lst"[/color][/i]
  20.                          [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]strcase[/color][/b] [i][color=#990099]; Applies the function "strcase" to every member of the following[/color][/i]
  21.                                  [b][color=RED]([/color][color=Blue]layoutlist[/color][/b][b][color=RED])[/color][/b]  [i][color=#990099]; Retrieves a List of Layouts[/color][/i]
  22.                                  [b][color=RED])[/color][/b] [i][color=#990099]; end mapcar[/color][/i]
  23.                         [b][color=RED])[/color][/b] [i][color=#990099]; end setq[/color][/i]
  24.                   [b][color=RED])[/color][/b] [i][color=#990099]; setq member[/color][/i]
  25.      [b][color=RED])[/color][/b] [i][color=#990099]; end and[/color][/i]
  26.    [i][color=#990099]; Upon the IF statement returning true:[/color][/i]
  27.    [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CTAB"[/color][/b] [i][color=#990099]; Set the ACAD variable "CTAB" to the following[/color][/i]
  28.            [b][color=RED]([/color][/b][b][color=BLUE]nth[/color][/b] [i][color=#990099]; Retrieve the member in the nth position of the list provided[/color][/i]
  29.              [b][color=RED]([/color][/b][b][color=BLUE]vl-position[/color][/b] lay lst[b][color=RED])[/color][/b] [i][color=#990099]; Find the position of the variable "lay" in the list "lst"[/color][/i]
  30.              [b][color=RED]([/color][color=Blue]layoutlist[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Retrieve the List of Layouts (this time not Capitalised).[/color][/i]
  31.              [b][color=RED])[/color][/b] [i][color=#990099]; end nth[/color][/i]
  32.            [b][color=RED])[/color][/b] [i][color=#990099]; ent setvar[/color][/i]
  33.    [i][color=#990099]; Upon the IF statement returning false:[/color][/i]
  34.    [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<!> Layout not Found <!>"[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Print this Message to the Command line[/color][/i]
  35.    [b][color=RED])[/color][/b] [i][color=#990099]; end IF[/color][/i]
  36. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Exit Cleanly[/color][/i]
  37. [b][color=RED])[/color][/b] [i][color=#990099]; End Defun[/color][/i]
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-6 15:43:23 | 显示全部楼层
 
让我知道Lisp程序的哪些方面让你困惑,我会尽力解释。至于绘图选项。。。。可以添加,但使用(命令“绘图”)(至少在我的计算机上)仅在命令行上显示绘图选项。你以前用过PUBLISH吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 00:07 , Processed in 0.534932 second(s), 72 queries .

© 2020-2025 乐筑天下

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