找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 799|回复: 1

[文章]:利用S::STARTUP函数成批编辑AutoCAD图形文件

[复制链接]
发表于 2002-12-19 12:07:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
利用S::STARTUP函数成批编辑AutoCAD图形文件

耿宏斌

        1 前言

        近年来,我院承接的大型水利勘察工程很多,使用GICAD工程地质勘察软件生成的图件也较多,特别是生成的柱状图,往往多达几百张(各张均为一独立的图形文件)。对这些柱状图的编辑,多数工作都是重复的,如:炸开图框、删除外边线、为静探曲线图添加网格、修改图号等,常常需要一周左右的时间来完成。如果能利用AutoLISP编程,成批编辑这些图形,将大大提高工作效率。

        2 算法实现

        实现以上功能的算法并不复杂,难点在于当AutoCAD打开一张新图后,AutoLISP程序会停止执行,以至于无法完成后续工作。虽然可以用VB编程在外部调用AutoCAD来实现,但必将增加程序的复杂性,程序执行效率也会降低。本人使用S::STARTUP()函数(以下简称S函数)来实现了这一意图。S::STARTUP()函数的作用就是当AutoCAD输入新绘图或打开已有绘图时,会被自动调用(无变元)。

        现以修改柱状图图号为例来说明算法实现的过程:

        图号为图件的顺序号,其格式为04-1、04-2、…、04-XXX;

        GICAD软件生成的柱状图文件名命名原则为:“ZZT”+钻孔号+“-1.dwg”;

        为了使程序打开柱状图,需事先编辑生成一个文本文件(可直接从GICAD工程地质勘察数据库中复制得到),如:MMM.TXT,其内容为钻孔号,钻孔排列的顺序即为编排图号的顺序。

        整个程序共包括三个函数:

        th()函数,为主执行程序,功能是让用户指定数据文件(MMM.TXT)和第一个图形文件(如:ZZTZK1-1.DWG),并打开它;

        S函数,打开新图形文件后自动执行,累加图号变量,修改图号,接着调用th1()函数;

        th1()函数,打开后续图形文件。最后当所有图形编辑完成后,将S函数定义为空函数。

        如还需要增加其它编辑功能,可写入S函数中,就可以成批执行。

        原理图如下。




        3 程序代码

        ;为柱状图修改图号

(defun c:th()

(setq h1 0)

(setq ff (getfiled "请输入数据文件名:" "C:/Program Files/LiZheng/GICAD5/Output/" "txt" 2));出现一对话框,提示用户输入数据文件名

(setq kf (open ff "r"));将文本文件内容赋给变量

(setq kh (read-line kf));读取一行内容

(setq dwf (getfiled "请输入第一个图形文件名:" "C:/Program Files/LiZheng/GICAD5/Output/" "dwg" 2))

(initget 1)

(setq ht (getstring "请输入图号字头:?(如:04-)"))

(command "open" dwf)

)

;自动执行函数

(defun S::STARTUP()

;修改图号,也可在此增加其它编辑功能

(setq h1 (+ h1 1))

(setq ahh (strcat ht (itoa h1)))

(command "change" "w" '(177 -177) '(140 -199) "" "" "" "" "" "" ahh);坐标可根据实际情况调整

(command "qsave")

(th1)

)

;循环打开图形文件

(defun th1()

(setq kh (read-line Kf))

(if (/= kh "") (command "open" (findfile(strcat "zzt" kh "-1.dwg"))));在当前目录下找到并打开柱状图

(if (= kh "") (defun S::STARTUP() (princ)));将S函数置为空函数

)

        4 如何在AutoCAD中运行

        程序编好后,保存为XXX.lsp文件,在AutoCAD工具菜单?gt;程序调入…中将XXX.lsp文件载入,即可在AutoCAD命令行中直接键入th运行。或者也可以把该程序段放入AutoCAD目录下的acad.mnl文件中,这样当AutoCAD启动时,就可自动加载上述程序。需要注意的是,程序使用前,应查看一下AutoCAD工具菜单?gt;系统配置…的Compatibility项中的“Reload AutoLISP between drawings”是否选中,如果是选中的,应取消,才能保证语句正常执行。

        程序执行速度是非常快的,100张柱状图,仅需约30秒即可编辑完成(本人电脑配置为奔Ⅲ866EB、256MB内存),而此前人工修改则需2~3天。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-12-20 12:28:23 | 显示全部楼层
成批编辑AutoCAD图形文件,objectdbx 会更好。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-22 15:13 , Processed in 0.396755 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表