乐筑天下

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

[编程交流] Lisp弹出窗口

[复制链接]

4

主题

24

帖子

20

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 16:59:17 | 显示全部楼层 |阅读模式
大家好。我最近开始使用lisp,我发现你的这些论坛非常有用。我刚刚Lisp程序一个月。我目前一直在研究如何创建一个带有多个按钮的弹出窗口,每个按钮都调用一个特定的lisp函数。这样,如果用户单击给定按钮,就会调用特定的lisp。这在有许多lisp函数帮助用户执行特定任务的情况下非常有用。例如,我有一个lisp用于创建网格、标记坐标和计算直线和多段线的总长度。为了便于用户使用,我创建了一个警报对话框,告诉用户使用什么特定函数来调用什么。
但这恰好不是那么用户友好,尤其是在涉及许多LISP的情况下。这就是为什么我想知道如何使用当用户单击某个特定函数时调用的按钮。我在这个论坛和其他论坛上读过类似的帖子,但没有成功。我甚至尝试过使用开放式Dcl Studio,但由于我碰巧是个新手,所以我还没走多远。附件是我的Lisp程序。任何帮助都将不胜感激。非常感谢。
Lisp程序。lsp
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:03:28 | 显示全部楼层
我还不熟悉Opendcl,但这有很大的可能性。但是为什么不在lisp中使用工具栏作为初学者呢?复制和修改现有AutoCAD按钮以满足您的需要非常容易。。
回复

使用道具 举报

4

主题

24

帖子

20

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:06:21 | 显示全部楼层
 
 
是的,我知道这是可能的,对个人来说很方便。但挑战是我和同事们分享了lisp,所以大家经常被问到调用特定lisp的函数是什么。这就是为什么我使用了警报功能,作为什么是什么的提醒。这样人们就不必总是来找我了。然后我想,我可以用一个包含按钮的弹出窗口来代替警报弹出窗口,使lisp更好,如果用户单击一个按钮,就会激活一个特定的lisp函数
回复

使用道具 举报

4

主题

24

帖子

20

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:11:06 | 显示全部楼层
弹出窗口不需要使用开放的Dcl,它可以使用Dcl或仅使用visual lisp。开放Dcl只是我尝试使用的方法之一。如果有人能帮我想出一个lisp代码来满足我的需要,那么我就会越高兴
 
这是一个弹出窗口的示例,我正在尝试使用OpenDcl。例如,要激活坐标lisp,用户只需单击“坐标”按钮,无需记住并键入该特定lisp的命令。。如所附图片所示
175918u569945agz0qe776.jpg
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:12:47 | 显示全部楼层
你好。。。
你给了我一个想法,我想分享一下我是如何完成这项任务的。。。从侧面讲,我将解释如何安装和自动化在启动AutoCAD会话时自动加载的基本lisp库。。。
 
首先解释一下我的主要支持文件夹是什么样子的:
-阿卡多克。lsp
-mylisps。lsp
-lisp1。lsp
-lisp2。lsp
- ...
-lispn。lsp
-dll1。dll
-dll2。dll
- ...
-dlln。dll
-DOSLibXX(XXx64)。arx公司
 
现在解释一下我是如何安装新应用程序的(lisp,dll)。。。
首先,您应该从安装DOSLibhttps://wiki.mcneel.com/doslib/home
安装DOSLib后,复制足够的*。arx从已安装文件夹到您的支持主文件夹(我之前解释的文件夹结构中的最后一个文件)。。。
那么你应该创建阿卡多克。lsp-我使用了这种结构:
 
然后您应该创建mylisp。lsp-其内容:
现在,为了使所有findfile都可以运行,您可以启动AutoCAD并在“选项”对话框和第一个选项卡“文件”下添加此文件夹以支持文件搜索路径。例如,单击“添加”->“浏览”->“c:\acad支持”\
 
完成后,解释如何添加新应用程序(lsp、dll)。。。到目前为止,AutoCAD应该正确地找到acaddoc。来自您先前指定的SFSP的lsp(c:\acad支持\)以及acaddoc内的所有应用程序。lsp应自动加载。。。现在要添加一个,只需添加以下行:
 
(if(findfile“lisp new.lsp”)(load“lisp new.lsp”)(load(getfield“Select lisp-new.lsp file”“\\”“lsp”16)))
 
或者是dll
 
(if(findfile“dll new.dll”)(命令“\.NETLOAD”“dll new.dll”)(命令“\.NETLOAD”(getfield“Select dll-new.dll file”“\\”“dll”16)))
 
确保新创建的lisp是新的。lsp或dll新建。dll位于(c:\acad支持\)。。。
就是这样-现在AutoCAD应该会自动识别您的新应用程序,并且可以通过调用命令函数名来执行新例程,该命令函数名被放置为(defun c:lisp new(/…)。。。创建新应用程序时,请始终记住,应用程序的最佳命名方式是根据执行的命令对其进行命名(lisp-new.lsp-执行命令:lisp new)。。。这样在您自动加载mylisp之后。lsp和警报消息提示启动AutoCAD时,您将启动对话框,执行mylisps命令,然后首先指向acaddoc。第一个对话框中的lsp(lisp将检测存储在adaddoc.lsp中的所有应用程序-自动加载),然后DOSLib的弹出窗口将显示在选择框中列出的所有应用程序。。。如果应用程序的名称与存储在CAD内存中的自动加载的SUBR(“C:LISP-NEW”)不匹配-您将其称为(atoms family 1),则选择此类例程将告诉AutoCAD使用提供的足够的LISP bad启动“notepad.exe”。lsp已打开,因此可以查看使用哪个(defun c:invokename(/…))如果lisp应用程序是您感兴趣的对象,您可以启动该lisp。。。因此,您可以在命令提示符下键入“invokename”来启动该应用程序-不带引号。。。如果应用程序名称和命令名称完全匹配-满足匹配,则当从DOSLib的对话框中单击“确定”时,将告诉AutoCAD使用正确的命令名称自动启动lisp。。。
 
这就是我如何解决这个任务,而不需要深入编程*。dcl等等。。。我只使用了已安装的用于AutoCAD的DOSLib。。。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:17:08 | 显示全部楼层
老式的方式。这是我的菜单,我还有定制的工具栏。关于给别人它不是一个问题,你可以有“部分菜单”,这些菜单/工具栏包含你的Lisp等等,它们也可以包含图像。它们通过使用命令“Menuload”单独加载。它们的优点是与版本无关,只需使用记事本,再加上一些CUI的剪切和粘贴即可创建。
 
如果你需要每个人的帮助,那么我会在菜单中添加一行额外的“帮助”,这将打开一个word文件,该文件可能非常广泛,包括有关命令的图像。我有一个名为“How to use lisp files”的文档,它保存在我们的服务器上的一个目录中,我们称之为“How to manuals”,我们都保存了关于各种东西的一些提示。菜单可以有子菜单等。
 
菜单源代码保存在服务器上,以便每个用户在启动Autocad时获得最新版本。一切都很简单
175920g8zvylzplbz3vbpf.png
175922e477bivj795ijzv8.jpg
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:18:46 | 显示全部楼层
如果OP想了解更多关于DCL的信息:
http://web2.airmail.net/terrycad/Tutorials/MyDialogs.htm
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 17:22:43 | 显示全部楼层
 
 
+1
甚至丝带。。。
部分自定义文件-->功能区-->面板。。[易于分享,确实简单]
 
我喜欢那个滑梯,不错
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:26:52 | 显示全部楼层
幻灯片可以追溯到很久以前,现在大多数人都会看调色板,如果你了解脚本,你可以一次制作100多张幻灯片,等等,在我们的例子中,大多数是块库中对象的独立DWG。
 
对于任何感兴趣的人
mnu中的示例代码
  1. [->IDM dwgs]
  2.             [TRENCH]$I=GGSTDS.IDMTRENCH $I=*
  3.             [PIPES]$I=GGSTDS.IDMPIPES $I=*
  4.             [PITS]$I=GGSTDS.IDMPITS $I=*
  5.             [KERBS]$I=GGSTDS.IDMKERBS $I=*
  6. [<-]
  7. ***image
  8. **KERBS
  9. [KERBS]
  10. [GGSLD(SD401,B1 KERB)]^C^C(openblk "P:/ACADSTDS/CIVIL STANDARDS/CGG401")
  11. [GGSLD(SD402,B2 KERB)]^C^C(openblk "P:/ACADSTDS/CIVIL STANDARDS/CGG402")

 
我不确定如何分配调用我的函数的操作
回复

使用道具 举报

4

主题

24

帖子

20

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:30:57 | 显示全部楼层
也许这有助于:
 
LSP:
DCL:
  1. (defun C:test( / cmd dcl ret)
  2. (setq dcl (load_dialog "test.DCL")) ; Load DCL.
  3. (if (new_dialog "dcl_test" dcl)
  4.    (progn
  5.      (action_tile "C1" "(setq cmd "C1") (done_dialog 1)")
  6.      (action_tile "C2" "(setq cmd "C2") (done_dialog 1)")
  7.      (action_tile "C3" "(setq cmd "C3") (done_dialog 1)")
  8.      (setq ret (start_dialog)) ; If Cancel is pressed ret will be 0.
  9.      (unload_dialog dcl)
  10.    )
  11.    (alert "Can't load the dialog!")
  12. )
  13. (if (= 1 ret)
  14.    (cond
  15.      ((= "C1" cmd)
  16.        (alert "Please enter your Command 1:")
  17.      )
  18.      ((= "C2" cmd)
  19.        (alert "Please enter your Command 2:")
  20.      )
  21.      ((= "C3" cmd)
  22.        (alert "Please enter your Command 3:")
  23.      )
  24.    )
  25. )
  26. (princ)
  27. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 08:55 , Processed in 0.557776 second(s), 74 queries .

© 2020-2025 乐筑天下

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