dimradius by AutoLisp in AutoCAD

简介: dimradius by AutoLisp in AutoCAD eryar@163.com 最近在开发一个自动出图程序,从PDMS模型中取数据后,经过处理生成AutoCAD的图纸。其中涉及到一个问题就是如何尽量使程序与AutoCAD低耦合,尽量不使用第三方库的情况下,实现数据的传递。

dimradius by AutoLisp in AutoCAD

eryar@163.com

最近在开发一个自动出图程序,从PDMS模型中取数据后,经过处理生成AutoCAD的图纸。其中涉及到一个问题就是如何尽量使程序与AutoCAD低耦合,尽量不使用第三方库的情况下,实现数据的传递。

最开始想到是用ODA(Open Design Alliance)的DWGdirect库来直接生成DWG文件,并且PDMS中就是使用这个库来生成DWG文件的。DWGdirect的用法与AutoCAD .Net的接口名称基本一致,用法也相同,但是这样就引入了第三方库。

还有一种方法就是使用AutoLisp脚本来生成图纸。这样的话,程序只需要生成一个AutoLisp脚本文件,文件中包含创建图形的命令。AutoLisp脚本与PDMS的PML类似,都需要一个解析执行的环境,即PML依赖PDMS平台才能运行,AutoLisp依赖AutoCAD平台。如果使用AutoLisp,程序不依赖DWG相关的第三方库,只需要生成一个文本文件。决定使用AutoLisp后,还有一个问题,就是如何在启动AutoCAD能自动加载生成的AutoLisp文件去生成图纸。

从网上查到自动加载程序的方法:About Auto-Loading and Running AutoLISP Routines:

http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-FDB4038D-1620-4A56-8824-D37729D42520 ,发现使用acaddoc.lsp的方法最方便。方法如下:

1. 使用一个模板DWG文件Template.dwg;

2. 在模板DWG文件Template.dwg相同的目录中,放一个acaddoc.lsp脚本文件,其中内容可以参考如下方式:

wps7FEA.tmp

3. 程序生成一个脚本文件myapp.lsp到acaddoc.lsp的文件夹中,然后再打开模板DWG文件Template.dwg。

经过上述处理,程序在打开模板DWG文件的时候会启动AutoCAD,启动AutoCAD的时候会加载acaddoc.lsp文件,在acaddoc.lsp中又会加载myapp.lsp,这样就会执行myapp.lsp中的命令,自动生成图纸了。

图形的生成可以使用AutoCAD中的命令,如生成直线可以使用line,生成圆可以使用circle,等等。对生成的图形进行标注的时候,发现线性标注很方便使用命令自动生成,但是想标注半径或直径的时候,一直没有测试成功。后来测试成功后,将这些命令记下来,方便查询。

; ; create a circle at (0,0,0) and radius is 8
(setq aCenter (list 0 0 0))
(setq aRadius 8)
(command "circle" aCenter aRadius "")
; ; remember the circle and dimradius
(setq aCircle (entlast))
(setq aPoint (polar aCenter 45 aRadius))
(setq aDim (cons aCircle (list aPoint)))
(command "dimradius" aDim aPoint)
; ; zoom all
(command "zoom" "e")

打开Template.dwg的时候,会自动生成如下内容:

wps7FFB.tmp

使用AutoLisp脚本文件来作为数据交换的方式来开发程序,可以使自己的程序不依赖DWG读写相关的第三方库,使程序更稳定。

使用AutoLisp来自动生成标注的时候,线性标注很容易生成,只需要指定几个点即可。可是生成半径或直径标注数据时,因为需要选择圆弧,AutoLisp不是那么直观。

目录
相关文章
|
算法 Shell
通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真
通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真
|
传感器 监控 Java
如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了
CPU(Central Processing Unit)是计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元,相当于系统的“大脑”。
3864 0
如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了
支付宝 - 支付宝怎么解除自动续费?
支付宝 - 支付宝怎么解除自动续费?
6025 1
支付宝 - 支付宝怎么解除自动续费?
|
6月前
|
人工智能 JSON 自然语言处理
我终于成为了全栈开发,各种AI工具加持的全过程记录
本文从一个需求出发,全程记录如何进行全栈开发。
995 51
我终于成为了全栈开发,各种AI工具加持的全过程记录
|
3月前
|
Prometheus 监控 Cloud Native
使用docker-compose管理多服务项目:日志监控方法指南
通过上述步骤,可以建立有效的日志监控系统,这不仅有助于问题的迅速定位和解决,而且对于分析系统性能、用户行为模式等都是一个宝贵的资源。只要正确配置和维护,Docker Compose管理的多服务项目可以高效地进行日志监控与分析。
117 0
|
数据安全/隐私保护 流计算
如何成功地下载和播放DRM受限的M3U8流媒体
在今天的数字娱乐领域中,许多平台提供了高品质的流媒体服务,其中包括使用M3U8格式的视频内容。然而,某些流媒体平台使用DRM技术保护其内容,限制了用户在其他设备上进行下载和播放的能力。在本文中,我们将向您介绍一种成功下载和播放DRM受限的M3U8流媒体的方法。
|
12月前
|
消息中间件 存储 Java
Kafka 如何避免重复消费?
在Apache Kafka中,避免消息的重复消费是确保数据准确处理的关键。本文详细介绍了七种避免重复消费的方法:使用消费者组、幂等生产者、事务性生产者与消费者、手动提交偏移量、外部存储管理偏移量、去重逻辑及幂等消息处理逻辑。每种方法均有其优缺点,可根据实际需求选择合适方案。结合消费者组、手动提交偏移量和幂等处理逻辑通常是有效策略,而对于高一致性要求,则可考虑使用事务性消息。
1750 0
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
212 2
|
SQL 分布式计算 关系型数据库
使用 Spark 抽取 MySQL 数据到 Hive 时某列字段值出现异常(字段错位)
在 MySQL 的 `order_info` 表中,包含 `order_id` 等5个字段,主要存储订单信息。执行按 `create_time` 降序的查询,显示了部分结果。在 Hive 中复制此表结构时,所有字段除 `order_id` 外设为 `string` 类型,并添加了 `etl_date` 分区字段。然而,由于使用逗号作为字段分隔符,当 `address` 字段含逗号时,数据写入 Hive 出现错位,导致 `create_time` 值变为中文字符串。问题解决方法包括更换字段分隔符或使用 Hive 默认分隔符 `\u0001`。此案例提醒在建表时需谨慎选择字段分隔符。
334 6