问题标签 [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.

0 投票
3 回答
951 浏览

programming-languages - 谁能向我解释 Autolisp/visual lisp 背后的设计决策?

我想知道任何人都可以解释 autolisp / visual lisp 的以下功能背后的设计原理吗?对我来说,它们似乎与公认的软件实践背道而驰……我错过了什么吗?

  • 默认情况下,所有变量都是全局变量(即,除非放在/函数参数中的 a 之后)
  • 从 AutoCAD 读取/写入数据需要将内容放入包含大量幻数的关联列表中。 10表示 x/y 坐标,90表示坐标列表的长度,63表示颜色等。好的,您可以将它们存储在一些常量中,但这意味着更多的全局变量,并且文档鼓励您直接使用幻数。
  • Lisp 是一种函数式语言,它鼓励通过迭代迭代进行递归编程,但是尾递归在视觉 lisp 中没有经过优化,导致可怕的调用堆栈——当然,除非你进行迭代。但是循环语法非常严格;例如,除非您在终止条件中放置某种标志,否则您不能跳出循环或从循环中返回值。结果,丑陋的代码。
  • 通常,您被迫在面对函数式编程的所有地方声明变量 - 那么为什么要使用函数式(-ish)语言呢?
0 投票
2 回答
11864 浏览

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 文件都在同一个文件夹中,没有其他子文件夹或其他任何东西。

0 投票
1 回答
112 浏览

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:

0 投票
1 回答
997 浏览

autocad - 为什么 entnext 命令返回 nil?

我对 AutoLISP 和 AutoCAD 都很陌生。

我想获取折线的顶点,以便更改它们的宽度。

这是我写的一段代码。我想知道为什么它不起作用。“entnext”部分似乎导致了问题。当我用“!”测试它时,它返回 nil 值。

我将不胜感激任何帮助或线索来解决这个问题。

0 投票
1 回答
662 浏览

vba - 自动生成 AutoCAD 3D 模型

我想使用 AutoCAD 生成一个 3D 模型,该模型由许多基本的 3D 几何形状组成,例如球体、立方体等。

我有基本几何图形的局部坐标系的尺寸、原点和方向。数据存储在 Excel 文件中。excel 数据的每一行对应一个几何图形,列用于尺寸、原点坐标和方向。为每种几何类型定义了数据格式。

我想为 AutoCAD 使用 AutoLisp 或 VBA 或其他一些宏工具来自动化这个过程,这样当数据发生变化时,我只需要运行宏来读取数据并重新生成 AutoCAD 3D 模型。

什么是最好的解决方案?

0 投票
1 回答
1381 浏览

lisp - AutoCAD Lisp - 如何垂直绘制 Y

我目前正在使用以下 Lisp 代码来显示原点的 X 和 Y 坐标:

该脚本当前显示 Y 坐标 (6050.00),如下所示:

水平 Y

虽然我希望像这样垂直绘制 Y 坐标:

垂直 Y

有没有可能通过 Lisp 实现这一目标?如果是这样,我必须做出哪些改变?

0 投票
1 回答
5631 浏览

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.

0 投票
1 回答
4292 浏览

vb.net - 使用 .NET 在 AutoCAD 中加载(和执行)一个 lisp 文件

我目前正在将一些旧的 AutoCAD 插件从 VBA 重写为 VB.NET。事实证明,所述插件的(相当大的)部分是在 LISP 中实现的,我被告知不要这样做。所以问题变成了在 .NET 的 AutoCAD 中运行 LISP 代码。现在,网上有一些资源解释了这样做的必要过程(比如这个),但他们都理所当然地认为 lisp-files/functions 已经加载。我目前正在挠头试图弄清楚如何转换的 VBA 函数是 a "(LOAD ""<file>"")",并且脚本的构建方式是它在加载时自动执行(它是一个简单的脚本,不注册函数,只是从头到尾运行并做到这一点)。

所以我的问题是。如何从 .NET 插件加载(并因此执行)AutoCAD 中的 lisp 文件?

0 投票
1 回答
819 浏览

python - 如何检测 AutoCAD 是否在 AutoLISP 中完成绘图

有没有办法确定绘图作业是否仍在 AutoLISP 中工作?

我目前DWG To PDF.pc3在 AutoCAD 2007 的 LISP 脚本中使用打印机。不幸的是,vla-PlotToFile函数立即返回。我想在绘图完成后自动打开文件。

如果有帮助,我实际上在 Python 中在 AutoCAD 之外进行了大量编码,并使用 win32com 调用它。

我目前拥有的代码是:

在 AutoCAD 完成打印之前返回。

我考虑在该命令之后检查 pdf 文件是否存在,但通常我会覆盖该文件,因此它在命令之前已经存在。

0 投票
1 回答
419 浏览

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.