问题标签 [autolisp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
programming-languages - 谁能向我解释 Autolisp/visual lisp 背后的设计决策?
我想知道任何人都可以解释 autolisp / visual lisp 的以下功能背后的设计原理吗?对我来说,它们似乎与公认的软件实践背道而驰……我错过了什么吗?
- 默认情况下,所有变量都是全局变量(即,除非放在
/
函数参数中的 a 之后) - 从 AutoCAD 读取/写入数据需要将内容放入包含大量幻数的关联列表中。
10
表示 x/y 坐标,90
表示坐标列表的长度,63
表示颜色等。好的,您可以将它们存储在一些常量中,但这意味着更多的全局变量,并且文档鼓励您直接使用幻数。 - Lisp 是一种函数式语言,它鼓励通过迭代迭代进行递归编程,但是尾递归在视觉 lisp 中没有经过优化,导致可怕的调用堆栈——当然,除非你进行迭代。但是循环语法非常严格;例如,除非您在终止条件中放置某种标志,否则您不能跳出循环或从循环中返回值。结果,丑陋的代码。
- 通常,您被迫在面对函数式编程的所有地方声明变量 - 那么为什么要使用函数式(-ish)语言呢?
dialog - 如何正确地将 DCL 链接到 AutoLisp?
我正在尝试构建一个非常基本的 AutoLisp 界面。我是这方面的初学者,所以在未能从头开始编写代码后,我转向正确学习 DCL。我遵循了本教程:
http://www.afralisp.net/dialog-control-language/tutorials/dialog-boxes-and-autolisp-part-1.php
我得到了同样的错误。AutoCAD 基本上退出执行该函数,就好像 dcl 文件甚至不存在一样。
我尝试将地址完全输入其中,但我认为它应该能够像将 HTML 链接到同一文件夹中的图像一样工作。
下面你有我的代码:
数据中心:
语言:
感谢任何愿意花时间帮助我解决这个问题的人。我开始非常绝望,这是我的第一个也是唯一一个 autolisp 项目,所以我没有任何经验......
LE:请注意,dcl 文件和 lisp 文件都在同一个文件夹中,没有其他子文件夹或其他任何东西。
autocad - 处理未转义的字符串
我写了一个替代函数来打开 AutoCAD 图纸。但是,当从 Windows 资源管理器运行文档时,AutoCAD 很难更改文档的打开方式(双击具有文件关联的文件)。我发现的唯一方法是更改注册表项“OpenDdeExec”。提供的参数 (%1) 为我提供了要打开的文件的非转义路径。
在将其解析为特殊字符之前,我需要忽略路径中的转义或用双反斜杠替换反斜杠。在 C# 中,您可以执行类似的操作string s = @"I\Like random\backslashes";
,反斜杠将被视为实际的反斜杠字符。在 lisp 中,我发现的唯一等价物是quote
它具有奇怪的行为(因为它的正常使用并不完全是我想要实现的)。
如果我写类似的东西(quote (I\Like random\backslashes))
,结果将是(I\\Like random\\backslashes)
我所需要的。但是,我必须摆脱括号。知道我怎么能做到这一点吗?
注意:这样做(quote I\Like random\backslashes)
会因空间而中断。但是,它可以在(quote I\Like\backslashes)
. 这会I\\Like\\backslashes
像我想要的那样输出。
这是当前具有所述问题的 OpenDdeExec:
autocad - 为什么 entnext 命令返回 nil?
我对 AutoLISP 和 AutoCAD 都很陌生。
我想获取折线的顶点,以便更改它们的宽度。
这是我写的一段代码。我想知道为什么它不起作用。“entnext”部分似乎导致了问题。当我用“!”测试它时,它返回 nil 值。
我将不胜感激任何帮助或线索来解决这个问题。
vba - 自动生成 AutoCAD 3D 模型
我想使用 AutoCAD 生成一个 3D 模型,该模型由许多基本的 3D 几何形状组成,例如球体、立方体等。
我有基本几何图形的局部坐标系的尺寸、原点和方向。数据存储在 Excel 文件中。excel 数据的每一行对应一个几何图形,列用于尺寸、原点坐标和方向。为每种几何类型定义了数据格式。
我想为 AutoCAD 使用 AutoLisp 或 VBA 或其他一些宏工具来自动化这个过程,这样当数据发生变化时,我只需要运行宏来读取数据并重新生成 AutoCAD 3D 模型。
什么是最好的解决方案?
lisp - AutoCAD Lisp - 如何垂直绘制 Y
我目前正在使用以下 Lisp 代码来显示原点的 X 和 Y 坐标:
该脚本当前显示 Y 坐标 (6050.00),如下所示:
虽然我希望像这样垂直绘制 Y 坐标:
有没有可能通过 Lisp 实现这一目标?如果是这样,我必须做出哪些改变?
functional-programming - AutoLISP: How to solve no function definition error?
Below I have pasted the code from my drawmycoil.lsp
file.
Here's the output of the lisp file after it is loaded and executed:
In spite of having clearly defined my functions, I am unable to make AutoCAD/AutoLISP recognize them. I am using Autodesk Education Master Suite 2011. I saw quite a few tutorial sites and most of them are focused on the LISP part of the functions. I am more focused on making AutoCAD plot my drawing for me through LISP.
vb.net - 使用 .NET 在 AutoCAD 中加载(和执行)一个 lisp 文件
我目前正在将一些旧的 AutoCAD 插件从 VBA 重写为 VB.NET。事实证明,所述插件的(相当大的)部分是在 LISP 中实现的,我被告知不要这样做。所以问题变成了在 .NET 的 AutoCAD 中运行 LISP 代码。现在,网上有一些资源解释了这样做的必要过程(比如这个),但他们都理所当然地认为 lisp-files/functions 已经加载。我目前正在挠头试图弄清楚如何转换的 VBA 函数是 a "(LOAD ""<file>"")"
,并且脚本的构建方式是它在加载时自动执行(它是一个简单的脚本,不注册函数,只是从头到尾运行并做到这一点)。
所以我的问题是。如何从 .NET 插件加载(并因此执行)AutoCAD 中的 lisp 文件?
python - 如何检测 AutoCAD 是否在 AutoLISP 中完成绘图
有没有办法确定绘图作业是否仍在 AutoLISP 中工作?
我目前DWG To PDF.pc3
在 AutoCAD 2007 的 LISP 脚本中使用打印机。不幸的是,vla-PlotToFile
函数立即返回。我想在绘图完成后自动打开文件。
如果有帮助,我实际上在 Python 中在 AutoCAD 之外进行了大量编码,并使用 win32com 调用它。
我目前拥有的代码是:
在 AutoCAD 完成打印之前返回。
我考虑在该命令之后检查 pdf 文件是否存在,但通常我会覆盖该文件,因此它在命令之前已经存在。
autocad - How does one change the angle of a gradient added by VLA-AddHatch in AutoCAD?
I am creating a gradient inside of a LWPolyLine with the code
The problem occurs when trying to set the PatternAngle
. I get the error:
Without that line, it works fine. The gradient is just rotated by 90 degrees.
What am I doing wrong? I have a feeling it has something to do with the acPreDefinedGradient
. Like I shouldn't be using a predefined gradient. Possibly using acUserDefinedGradient
.