明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 30682|回复: 69

[【不死猫】] [原创] Lisp 也玩宏录制

    [复制链接]
发表于 2009-5-5 17:53 | 显示全部楼层 |阅读模式
本帖最后由 nonsmall 于 2013-5-13 11:37 编辑

宏记录是能为用户提供“用户前台操作,后台生成代码,模拟用户操作”的功能。

该程序将帮助初学者快速学会Lisp图元生成和修改,图层 图块 参照的处理等功能

作者:nonsmall 20090505

大家能猜到原理,我就不多说了

程序如下:

使用命令SS开始记录(任意绘制命令和修改命令)

再次使用SS停止记录并生成源代码.

 

本帖子中包含更多资源

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

x

点评

把命令改一下吧,ss这个命令,把别的插件的命令给覆盖了  发表于 2013-12-7 19:19

评分

参与人数 7威望 +1 明经币 +5 金钱 +81 贡献 +5 激情 +5 收起 理由
chlh_jd + 1 + 10 这个可以让VLISP迈进一大步
先进者 + 1 + 6
仲文玉 + 1 很给力!
lohas1118 + 5 赞一个!
jsj_306 + 20 精品文章
china小球 + 20
mccad + 1 + 2 + 20 + 5 + 5 【精华】好程序

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-5-7 22:11 | 显示全部楼层
对,应该学一下2010版的录制宏功能,把选取的点坐标可以做后期编辑。
回复 支持 0 反对 2

使用道具 举报

发表于 2023-12-18 14:50 | 显示全部楼层
加载生成的LSP的时候显示:错误: 输入的点对中含有多余的 cdrs
发表于 2020-1-3 15:11 | 显示全部楼层
真没想到还有这玩意,以后编程都智能化,程序化了,直接程序编程了
发表于 2009-5-6 09:13 | 显示全部楼层
厉害
发表于 2009-5-6 13:22 | 显示全部楼层
在点前面加上: "_non"
 楼主| 发表于 2009-5-6 16:22 | 显示全部楼层

萝卜:那种方式关捕捉是否很常用?

测试结果代码:

;此Lisp程序由nonsmall开发工具全自动生成
(defun c:test( / osmode_bak clayer_bak cecolor_bak pt1 pt2 pt_cen r)

----系统变量备份----
(setvar "cmdecho" 0);_关闭命令提示
(setq osmode_bak (getvar "osmode"));_记录捕捉
(setvar "osmode" 0);_关闭捕捉
(setq clayer_bak (getvar "clayer"));_记录当前图层
(setq cecolor_bak (getvar "cecolor"));_记录当前颜色
(setq celtype_bak (getvar "celtype"));_记录当前线型

;----绘制部分开始----
    ;-绘制圆-
    (setq pt_cen '(4581.33 2141.23 0.0));定义中心点
    (setq r 1066.34);定义半径
    (setvar "clayer" "图层2");_修改图层为 "图层2" 层
    (setvar "cecolor" "3");_修改颜色为 3 号色
    (command ".Circle" pt_cen r);_绘制圆
   
    ;-绘制圆弧-
    (setq pt1 '(3142.65 1275.16 0.0));_定义起始点
    (setq pt2 '(3915.46 1572.18 0.0));_定义终止点
    (setq pt_cen '(3579.99 1291.14 0.0));_定义中心点
    (setvar "clayer" "图层1");_修改图层为 "图层1" 层
    (setvar "cecolor" "1");_修改颜色为 1 号色
    (command ".Arc" pt1 "c" pt_cen pt2);_绘制圆弧
   
    ;-绘制直线-
    (setq pt1 '(2198.66 1877.15 0.0));_定义起始点
    (setq pt2 '(2737.33 2777.47 0.0));_定义终止点
    (setvar "clayer" "图层1");_修改图层为 "图层1" 层
    (setvar "cecolor" "2");_修改颜色为 2 号色
    (setvar "celtype" "ByLayer");_修改线型为 "ByLayer"
    (command ".Line" pt1 pt2 "");_绘制直线
   
;----绘制部分结束----

;----系统变量还原----
(setvar "osmode" osmode_bak);_还原捕捉
(setvar "clayer" clayer_bak);_还原图层
(setvar "cecolor" cecolor_bak);_还原颜色
(setvar "celtype" celtype_bak);_还原线型
(setvar "cmdecho" 1);_打开命令提示
(princ);_关闭程序返回值
);_程序结束

发表于 2009-5-6 20:13 | 显示全部楼层

再将坐标精度加大一点...搞个entmake版的!平时有可能用的到~~

发表于 2009-5-6 21:10 | 显示全部楼层

代码在那里啊,我怎么么有看见啊

 楼主| 发表于 2009-5-7 09:07 | 显示全部楼层

entmake 版的写起来比这个轻松多了

还有Vlisp版也考虑

这工具没什么难度,纯体力活。

 楼主| 发表于 2009-5-7 13:25 | 显示全部楼层
fsxm发表于2009-5-6 20:13:00再将坐标精度加大一点...搞个entmake版的!平时有可能用的到~~

;此Lisp程序由nonsmall制作的宏记录器自动生成
(defun c:test( / )

;----系统变量备份----
(setvar "cmdecho" 0);_关闭命令提示
(setq osmode_bak (getvar "osmode"));_记录捕捉
(setvar "osmode" 0);_关闭捕捉
(setq clayer_bak (getvar "clayer"));_记录当前图层
(setq cecolor_bak (getvar "cecolor"));_记录当前颜色
(setq celtype_bak (getvar "celtype"));_记录当前线型
(setq textstyle_bak (getvar "textstyle"));_记录当前文字样式

;----操作记录开始----
(entmake '((0 . "LINE") (5 . "167") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 -2935.84 257.892 0.0) (11 -2748.33 83.5754 0.0) (210 0.0 0.0 1.0)) );生成图元
(setq ob167(entlast));生成图元

(entmake '((0 . "CIRCLE") (5 . "168") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 -2711.87 359.359 0.0) (40 . 191.732) (210 0.0 0.0 1.0)) );生成图元
(setq ob168(entlast));生成图元

(entmake '((0 . "LWPOLYLINE") (5 . "169") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -2680.61 10.7268) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -2513.94 10.7268) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -2513.94 -108.953) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -2680.61 -108.953) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0)) );生成图元
(setq ob169(entlast));生成图元

(entmake '((0 . "DIMENSION") (5 . "16A") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbDimension") (2 . "*D3") (10 -2774.37 65.3633 0.0) (11 -2839.48 67.4466 0.0) (12 0.0 0.0 0.0) (70 . 32) (1 . "") (71 . 5) (72 . 1) (41 . 1.0) (42 . 130.216) (52 . 0.0) (53 . 0.0) (54 . 0.0) (51 . 0.0) (210 0.0 0.0 1.0) (3 . "ISO-25") (100 . "AcDbAlignedDimension") (13 -2904.59 67.965 0.0) (14 -2774.37 67.965 0.0) (15 0.0 0.0 0.0) (16 0.0 0.0 0.0) (40 . 0.0) (50 . 0.0) (100 . "AcDbRotatedDimension")) );生成图元
(setq ob16A(entlast));生成图元

(entmake '((0 . "ARC") (5 . "177") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 -2785.89 277.597 0.0) (40 . 59.1329) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 5.58709) (51 . 2.26789)) );生成图元
(setq ob177(entlast));生成图元

(entmake '((0 . "SPLINE") (5 . "178") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbSpline") (210 0.0 0.0 1.0) (70 . 8) (71 . 3) (72 . 10) (73 . 6) (74 . 4) (42 . 1.0e-010) (43 . 1.0e-010) (44 . 1.0e-010) (40 . 0.0) (40 . 0.0) (40 . 0.0) (40 . 0.0) (40 . 241.961) (40 . 361.761) (40 . 488.775) (40 . 488.775) (40 . 488.775) (40 . 488.775) (10 -2917.61 159.026 0.0) (10 -2957.28 55.1598 0.0) (10 -3016.6 -100.132 0.0) (10 -2737.26 -99.6296 0.0) (10 -2835.7 -28.4864 0.0) (10 -2886.36 8.12507 0.0) (11 -2917.61 159.026 0.0) (11 -2917.61 -82.9357 0.0) (11 -2797.81 -82.9357 0.0) (11 -2886.36 8.12507 0.0)) );生成图元
(setq ob178(entlast));生成图元

(setq entg (entget ob167));获取图元组码
;修改图元属性
(setq entg (entmod (subst '(11 -2748.33 -28.2992 0.0) '(11 -2748.33 83.5754 0.0) entg)))
(entmod entg);更新图元

(setq entg (entget ob169));获取图元组码
;修改图元属性
(setq entg (entmod (subst '(10 -2680.61 125.203) '(10 -2680.61 10.7268) entg)))
(entmod entg);更新图元

(setq entg (entget ob177));获取图元组码
;修改图元属性
(setq entg (entmod (subst '(10 -3020.11 43.1474 0.0) '(10 -2785.89 277.597 0.0) entg)))
(setq entg (entmod (subst '(40 . 341.755) '(40 . 59.1329) entg)))
(setq entg (entmod (subst '(50 . 0.959106) '(50 . 5.58709) entg)))
(setq entg (entmod (subst '(51 . 0.612686) '(51 . 2.26789) entg)))
(entmod entg);更新图元

(setq entg (entget ob168));获取图元组码
;修改图元属性
(setq entg (entmod (subst '(10 -2667.59 -88.1392 0.0) '(10 -2711.87 359.359 0.0) entg)))
(entmod entg);更新图元

;----操作记录结束----

;----系统变量还原----
(setvar "osmode" osmode_bak);_还原捕捉
(setvar "clayer" clayer_bak);_还原图层
(setvar "cecolor" cecolor_bak);_还原颜色
(setvar "celtype" celtype_bak);_还原线型
(setvar "textstyle" textstyle_bak);_还原文字样式
(setvar "cmdecho" 1);_打开命令提示
(princ);_关闭程序返回值
);_程序结束

本帖子中包含更多资源

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

x
发表于 2009-5-7 22:03 | 显示全部楼层

似乎加入一段错误中断处理就完美了

另外

是不是把所有的点改成getpoint更实用些

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 06:58 , Processed in 0.579100 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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