显示标签为“二次开发”的博文。显示所有博文
显示标签为“二次开发”的博文。显示所有博文

2009年6月19日星期五

尺寸标注系统

尺寸标注是AutoCAD设计过程中一个费时费力的工作。我用LISP和VB开发的这个尺寸标注系统,耗时半年,终于完成了。该系统主要分三个部分:DA、DB、DC。
DA:快速批量标注,可用于大的零件,生成标注目标(各种孔)的坐标尺寸和加工方法说明;
DB:用于比较小的零件,可标注出外形尺寸、生成简单侧视图、生成标注目标的坐标尺寸和加工方法;
DC:智能辅助标注,完成引出标注、圆角(倒角)标注、坐标引出标注等。

DA的演示:


DB的演示:


DC的演示:


更详细的说明和更清晰的演示可以从这里下载
帖子的其余部分

2009年2月21日星期六

用USB加密锁加密lisp程序

近日我用LISP编写的一个批量标注的软件终于完成了,目前正在做最后的测试,并考虑加密的问题。
经过再三比较并与朋友商量,我决定采用USB加密锁来对软件进行加密。加密锁也买来了,接下来的问题是:
这种锁只能对EXE或DLL类型的可执行文件加密。我的思路是:
(1)将程序中的一部分功能用VB程序来实现;
(2)VB程序编译成DLL格式;
(3)在LISP程序中调用该DLL文件。


下面这篇文章,就是为了达到上面的目的而从网上找来参考的。
文章标题:LISP调用DLL文件生成随机数

;;;这是用LISP调用DLL文件生成随机数的程序示例。

;|
在VB6中创建一个ActiveX DLL工程,在其中将类模块修改为RND,将工程名修改为RNDAPP。
在其中添加下面的代码:

Public Function GetRND() As Double
Dim i As Double
i = RND
GetRND = i
End Function

将其编译成DLL文件(“RNDAPP.dll”)。
在WINDOWS下注册这个DLL文件。
先将这个文件拷入C盘根目录下(注:也可放入相应文件夹下但文件夹名称中不能有空格)。
再在运行中加入运行如下命令:Regsvr32 c:\RNDAPP.dll
;;|;

;;;然后编LISP程序。

(vl-load-com)
(defun c:testrnd( / rndobj rndnum)
(setq rndobj (vlax-get-or-create-object "RNDAPP.RND"))
(setq rndnum (vlax-invoke-method rndobj "GetRND"))
(princ rndnum )
(princ)
)
;;;这里的rndnum就是想要的随机数。

;|;;
这里是测试结果:
命令: testrnd
0.592458
命令:
命令: testrnd
0.4687

2009年1月18日星期日

DCL对话框开关控件(toggle)的赋值技巧

灵活利用LISP的EVAL函数,在对对话框的开关控件(toggle)赋值时可以大大简化程序设计。尤其是如果结合用LISP程序生成DCL文件技术,我们就可以生成选项不定的开关控件并对其进行控制(这一点,留待以后在叙述)。如下图所示的多选开关对话框,在程序中利用(SETQ str "abcdefghxyz")语句,并结合(SET_TILE (EVAL letter) "1")语句,完成了初始赋值。只要改变字符串str(当然也可以用表),就可以得到不同的效果。


对应的DCL文件如下,如果该DCL文件用lisp程序生成,则label、key甚至label的数量都可以根据需要动态改变。

letter : dialog {

label= "Letter";

fixed_height = true;

: boxed_column {

letter = " ";

: row {

fixed_width = true;

: toggle { label= "A"; key= "letter_a"; width = 5; }

: toggle { label= "B"; key= "letter_b"; width = 5; }

: toggle { label= "C"; key= "letter_c"; width = 5; }

: toggle { label= "D"; key= "letter_d"; width = 5; }

: toggle { label= "E"; key= "letter_e"; width = 5; }

: toggle { label= "F"; key= "letter_f"; width = 5; }

: toggle { label= "G"; key= "letter_g"; width = 5; }

: toggle { label= "H"; key= "letter_h"; width = 5; }

: toggle { label= "I"; key= "letter_i"; width = 5; }

: toggle { label= "J"; key= "letter_j"; width = 5; }

: toggle { label= "K"; key= "letter_k"; width = 5; }

: toggle { label= "L"; key= "letter_l"; width = 5; }

: toggle { label= "M"; key= "letter_m"; width = 5; }

: toggle { label= "N"; key= "letter_n"; width = 5; }

}

: row {

fixed_width = true;

: toggle { label= "O"; key= "letter_o"; width = 5; }

: toggle { label= "P"; key= "letter_p"; width = 5; }

: toggle { label= "Q"; key= "letter_q"; width = 5; }

: toggle { label= "R"; key= "letter_r"; width = 5; }

: toggle { label= "S"; key= "letter_s"; width = 5; }

: toggle { label= "T"; key= "letter_t"; width = 5; }

: toggle { label= "U"; key= "letter_u"; width = 5; }

: toggle { label= "V"; key= "letter_v"; width = 5; }

: toggle { label= "W"; key= "letter_w"; width = 5; }

: toggle { label= "X"; key= "letter_x"; width = 5; }

: toggle { label= "Y"; key= "letter_y"; width = 5; }

: toggle { label= "Z"; key= "letter_z"; width = 5; }

}

}

ok_cancel;

}



;Lisp程序:

(DEFUN c:test (/ str char label)

(SETQ str "abcdefghxyz") ;

(SETQ DCL_ID (LOAD_DIALOG "test"))

(NEW_DIALOG "letter" dcl_id)

(WHILE (/= str "")

(SETQ char (STRCASE (SUBSTR str 1 1) T)

str (SUBSTR str 2)

letter (STRCAT "letter_" char)

)

(SET_TILE (EVAL letter) "1")

)

(ACTION_TILE "access" "(done_dialog 1)")

(START_DIALOG)

)

2009年1月4日星期日

DCL编辑器

这几天为了把一个程序的对话框做的好看一点,搞得我苦不堪言。今天为了查找一点资料,偶然在明经上发现了一个飞诗寻雪编写的DCL编辑器,虽然还没来得及使用,但看介绍似乎相当不错。 姑且放在这里,等忙过这一阵好好研究研究。<DCL编辑器>

2009年1月1日星期四

清屏的一个小技巧

这几天在设计一个应用了DCL对话框的程序,碰到了一个让人非常恼火的问题:对话框操作完成以后,点击OK按钮,这时屏幕上的对话框本应立即关闭,可事实上却总是滞留很长一段时间,一直要到后续处理进行了一段时间之后才能完全清屏,如下图。

检查程序设计应该没有什么问题,试了很多方法也不能彻底解决,如用REDRAW命令不起作用,用REGER命令会影响程序执行的流畅性,我甚至试了用ZOOM-S-1X,也不行。
后来冷静下来分析,我发现在后续程序执行过程中,只要在对话框区域内有新的实体生成,就会局部清屏——我灵机一动,用下面两行程序试了一下,果然成功:
(VL-CMDF "RECTANG" (GETVAR "VSMAX")(GETVAR "VSMIN"))
(VL-CMDF "UNDO" 1)

2008年12月31日星期三

求一个选择集中X、Y的最大最小值

  • 程序名称:TYMAXMIN<下载>
  • 程序功能:求一个选择集中X、Y的最大最小值
  • 格式:(TYMAXMIN ss)
    入口参数ss是一个选择集
  • 返回:(x-min x-max y-min y-max)
  • 说明: 本程序是我在编写另外一个程序时用到的子程序,花费了我两三个晚上的时间。
    程序对选择集中的直线、圆弧、圆、单行文本、多义线和块进行处理,求出X、Y的最大和最小值。选择集中的块可以放大、缩小或旋转,但不得嵌套。

2008年12月24日星期三

关于用户坐标系的几个命令

1. 改变坐标原点
2. 旋转坐标系
3. 还原到原始坐标系
4. 快速切换到用户坐标系

  • <下载地址>

  • 改变坐标原点

  • 命令名: TYUO

  • 说明:通过点选两条相交的直线,将其交点设为坐标原点;或者点选圆,将圆心设为坐标原点。
  • 演示:

  • 旋转坐标系

    • 命令名:TYUX
    • 使用说明:通过点选直线,即可将所选直线设定为新的X坐标轴。
    • 演示


    还原到原始坐标系
    命令:U0

    快速切换到用户坐标系

    命令名:U1

    • 使用说明:快速切换到用1命名的用户坐标系(见旋转坐标系的演示)

    2008年12月20日星期六

    生成云线

  • 程序名称:TYYunXian(下载)
  • 命令:TYYX

  • 说明:AutoCAD早期版本没有生成云线的命令,所以我就自己编写了一个。后来AutoCAD虽然有了这个功能,但一方面出于敝帚自珍的心理,另方面AutoCAD自带的云线功能也确实稍有不便,所以就一直用了下来。

  • 使用方法:只要连续给出节点位置就可以了,最后用空格键封闭云线并结束命令。

  • 演示

  • 2008年12月19日星期五

    多义线焊接:TYPLJ

  • 程序名称:TYPolyLineJoin (下载)

  • 命令:TYPLJ
  • 使用说明:选择欲连接成多义线的一组对象中的一条直线或圆弧,回车,搞定。

  • 操作演示


  • 2008年12月14日星期日

    AutoCAD命令行读书器TYReader

  • 程序名称:TYReader(下载)
  • 命令:TYR

  • 使用说明:这是我自己感到比较满意的一个小工具。可以在命令行看书、学外语,用空格键和鼠标左键换行,在阅览的同时,可以用鼠标的中键和右键操控屏幕(放大、缩小或拖动),用Q键更换文件,W键更改文件行号,随便点击其他任意键即可退出。
  • 演示
  • 2008年12月13日星期六

    在AutoCAD命令行写日记

  • 程序名称:TYDIAry.FAS(下载)
  • 命令:TYDIA
  • 功能:可以在AutoCAD命令行中写日记
  • 使用方法:加载程序,在命令行中键入TYDIA并回车后,会出现提示符DIA->,这时就可以方便的写日记了。一行写完,敲回车键开始下一行,连敲两次回车则退回到AutoCAD命令状态。
    如果在TYDIAry.FAS放置目录中有日记文件MYDIA.TXT、MYDIA.LOG或MYDIA.WRI,则所写内容自动加入到该日记文件中,否则退出时会弹出一对话框要求选择日记文件。
  • 日记文件的浏览和修改:可在WINDOWS状态下用文本文件编辑器浏览和修改,也可在AutoCAD环境下用工具软件
    TYBRowser浏览或用TYEditer修改。
  • 演示

  • 2008年12月12日星期五

    AutoCAD环境下的文本更改工具--TYEditer

    1. 程序名称:TYEditer.FAS(下载)

    2. 命令:TYE

    3. 功能:不必退出AutoCAD环境即可修改文本文件(如日记)。我本想采用AutoCAD的多文本编辑器DDEDIT来编辑文本文件,但经过测试发现,含有某些特殊字符的文件经DDEDIT编辑后,有时会出现错误。暂时先用NOTEPAD来编辑了。

    4. 使用方法:加载程序,在命令行中键入命令TYE并回车后,会弹出一文件选择窗口,选中欲编辑的文件后,再弹出NOTEPAD窗口用于文件编辑。

    5. 演示



    AutoCAD环境下的文本工具--TYBRowser

    1. 程序名称:TYBRowser.FAS(下载)
    2. 命令:TYBR
    3. 功能:在AutoCAD环境下阅览文本文件(如日记)
    4. 使用方法:加载程序,在命令行中键入命令TYBR并回车后,会弹出一文件选择窗口,选中欲浏览的文件后,再弹出一窗口用于文件阅览
    5. 演示



    2008年12月6日星期六

    图层控制命令

  • 打开点选(框选)图层(TYON)
  • 关闭点选(框选)图层(TYOFF)
  • 打开所有图层(TYA)

  • 按照我的习惯,在进行模具设计时,不同的对象是采用不同的图层(我知道有些设计师是不太喜欢分图层的),这样就使得图层的切换非常、非常的频繁。AUTOCAD2007之前,图层的切换是通过一个图层管理器,其效果么,我感到使用起来很不方便。于是在图层控制方面我花费了许多心思,编制了大量程序,现在基本做到了得心应手。例如,用命令"5",可打开下部装配图的所有图层,包括下模板、下模垫板、下模座和下模镶块,同时关闭其他所有图层;而命令"51",仅仅打开下模板这一层,其余各图层关闭,诸如此类。今天,我先整理了图层控制命令中比较通用的三个,即:通过选择实体来打开图层(TYON)、关闭图层(TYOFF),以及打开所有图层(TYA)。

    1. TYON

    1.1 程序名称:TYlayON

    1.2 命令名: TYON

    1.3 下载地址 <TYLAYON.FAS>
    文件下载后最好放在目录C:\TYLISP下(推荐),或放在其他任何AUTOCAD支持路径下,加载后即可执行。

    1.4 程序功能:
    (a) 在命令行键入命令TYON,回车,点选实体,则仅打开所点选的实体所在的图层,其他图层全部关闭;

    (b)在命令行键入命令TYON,回车之后,如果不接着点选实体而是再敲一次回车键,那么接下来可以框选实体或连续点选多个实体,则可以保留打开所选实体所在的图层,而其他图层关闭。

    1.5 演示


    2. TYOFF

    2.1 程序名称:TYlayOFF

    2.2 命令名: TYOFF

    2.3 下载地址 <TYLAYOFF.FAS>
    文件下载后最好放在目录C:\TYLISP下(推荐),或放在其他任何AUTOCAD支持路径下,加载后即可执行。

    2.4 程序功能:

    (a) 在命令行键入命令TYOFF,回车,点选实体,则点选实体所在的图层关闭;

    (b)在命令行键入命令TYOFF,回车之后,如果不接着点选实体而是再敲一次回车键,那么接下来可以框选实体或连续点选多个实体,则所选实体所在的图层将会关闭。




    3. TYA

    3.1 程序名称:TYlayAll

    3.2 命令名: TYA

    3.3 下载地址 <TYLAYALL.FAS>
    文件下载后最好放在目录C:\TYLISP下(推荐),或放在其他任何AUTOCAD支持路径下,加载后即可执行。

    3.4 程序功能:这是本人最常使用的一个命令,其功能是打开所有图层。

    Lisp程序加密工具----程序转换

  • 程序名称:TYJIAMI.FAS<下载地址>
  • 命令名: TYJM
  • 程序功能:在设计开发LISP程序时,为了便于调试和日后阅读,变量名应尽量表达一定的含义,在程序中也要加上一些说明。而在程序发布的时候,为了防止别人破解,应去掉注释,并把变量名改成无特定意义的字符串。
  • 在AutoCAD命令行键入命令后,弹出如下对话框,选择欲进行转换的文件,如图中选择了C:\TODAY目录下的TYJIAMI.LSP。

  • 点击OPEN后,即可自动生成一个完成了转换的文件。
  • 文件名是在原来的文件名前面添加了"NEW-",如TYJIAMI.LSP转化后生成NEW-TYJIAMI.LSP,新文件存放的位置和原来的文件相同。
  • 同时,在AutoCAD命令行中会列出转换前程序中的函数名,转换后它们将分别用TY1、TY2、TY3.....代替。
  • 转换前后,命令名不变,即转换前是TYJM,转换后仍然是TYJM。

    下面是转换前TYJIAMI.LSP的片断:

    ;;加密程序;
    ;;1--去掉程序中的注释--OK
    ;;2--将程序中的变量名转换成无意义字串--OK
    ;;3--加入注册码
    ;;4--转换成PFS文件
    ;;5--加入相关文件,如DCL文件,生成XL文件
    ;;;
    (DEFUN c:tyjm (/)
    ;;置换表中指定位置的元素
    (DEFUN sub_replace (a n l / i l1)
    (SETQ l1 '()
    i 0
    )
    (WHILE (<>

    下面是转换后NEW-TYJIAMI.LSP里对应的片段:
    ( DEFUN c:tyjm ( / )
    ( DEFUN sub_replace ( TY1 TY2 TY3 / i TY4 )
    ( SETQ TY4 ' ( )
    i 0
    )
    ( WHILE ( <>


    两者的区别显而易见。


  • 多功能特性更改命令DDMODIFY的移植

    在AutoCAD早期版本中有一个多功能特性更改命令DDMODIFY,每点选一个不同类型的实体以后,都会在屏幕上弹出一个特性更改窗口,使用非常快捷、方便。不知为什么升级到2002版本后,AutoDESK公司取消了这一功能,而代之以properties,可properties窗口太过繁杂,使用不便之外,用完之后还不会自动关闭。值得庆幸的是,DDMODIFY是一个外部命令:我从AutoCAD2000中找到了DDMODIFY.LSP和DDMODIFY.DCL两个文件,可是加载以后,当点选某些类型的实体进行更改的时候,常常引起AUTOCAD崩溃、退出。通过一次又一次的调试,我终于找到并排除了原程序中几处引起AUTOCAD崩溃、退出的错误。我把它从AUTOCAD2002,一直用到2004、2005、2007,效果良好。为了与原始的DDMODIFY区分,我把更改后的程序命名为TYMODIFY.
    1. 程序名称:TYMOdify.FAS , tymodify.dcl

    2. 命令名: TYMO

    3. 下载与安装:请到我的网盘里下载TYMODIFY.FAS文件和动态对话框文件TYMODIFY.DCL

    下载地址:<tymodify.fas> , <tymodify.dcl>

    这两个文件下载后,最好放在目录C:\TYLISP下(推荐),或放在其他任何AUTOCAD支持路径下,加载后即可执行。

    4. 演示



    Template Designed by Douglas Bowman - Updated to New Blogger by: Blogger Team
    Modified for 3-Column Layout by Hoctro