乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 101|回复: 15

[编程交流] 用于标注尺寸的Lisp

[复制链接]

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 17:16:34 | 显示全部楼层 |阅读模式
你能给我一个lisp,当你做一条线,一个弧或一个圆,尺寸已经纳入其中。尺寸线应位于该线上方或下方7mm处。谢谢
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:21:31 | 显示全部楼层
以下是一个用于线路:
 
  1. (defun c:DLine (/ line_pt1 line_pt2)
  2. (if (and (setq line_pt1 (getpoint ">>>...Pick First Point...>>>:"))
  3.    (setq line_pt2 (getpoint line_pt1 ">>>...Pick next point...>>>: "))
  4.      )
  5.    (progn
  6.      (vl-cmdf "._line" line_pt1 line_pt2 "")
  7.      (while line_pt2
  8. (command "._dimaligned"
  9.          line_pt1
  10.          line_pt2
  11.          (polar        line_pt2
  12.                 (+ (angle line_pt1 line_pt2) (/ pi 2))
  13.                 7               
  14.          )
  15. )
  16. (setq line_pt1 line_pt2
  17.       line_pt2 '()
  18. )
  19. (if (and line_pt1
  20.          (setq line_pt2 (getpoint line_pt1 ">>>...Pick next point...>>>: "))
  21.     )
  22.   (vl-cmdf "._line" line_pt1 line_pt2 "")
  23. )
  24.      )
  25.    )
  26. )
  27. (princ)
  28. )
  29. (princ)
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 17:24:58 | 显示全部楼层
嗨,威兹曼,
谢谢你的lisp文件。我要找的是Lisp程序。但我很抱歉,我没有给你一个详细的解释Lisp程序,适合我的需要。实际上,我需要一个lisp,可以标注一种钢筋弯曲长度。我把它画成不同的比例(1/30,1/20),但大多是1/50的比例。尺寸线的7 mm距离是按给定比例打印时与钢筋的实际距离。因此,对于1/50比例,距离应为350 mm,1/30为210 mm,1/20为140 mm。我希望你能抽出时间再给我发一封Lisp程序的信。非常感谢。
 
P、 你能把尺寸层和钢筋分开吗。
绘画图纸
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:28:41 | 显示全部楼层
这适用于直线,我看看以后是否可以为圆弧腾出时间。
[code](defun c:DLine(/line\u pt1 line\u pt2 DLine\u scale DLine\u curlay DLine\u scale\u dist*error*)(defun*error*(msg)(setvar'clayer DLine\u curlay)(setvar'cmdecho 1));\uend\u defun(Setvar“cmdecho 0)(setq dline\u curlay(getvar“clayer”))(命令“Layer”“on”“DIMS”“unlock”“DIMS”“thaw”“DIMS”“m”“DIMS”“c”“6”“DIMS”“);\uend_命令;_end_命令;;Cab的用户输入功能(while(progn(setq dline\u scale(cond((getint“\n输入绘图比例[20/30/50]:”)))));\uend_cond);_end\u setq(if(not(vl position dline\u scale)(20 30 50))(not(提示“\n仅从20 30和50中选择,请重新输入”);\uend_not);_end_if);_end_progn);_结束时(cond((=dline\u scale 20)(setq dline\u scale\u dist 140))((=dline\u scale 30)(setq dline\u scale\u dist 210))((=dline\u scale 50)(setq dline\u scale\u dist 350));\uend\u cond(if(and(setq line\u pt1(getpoint“\n>>>…拾取第一个点…>>>:”);\uend_getpoint);_end\u setq(setq line\u pt2(getpoint line\u pt1“\n>>>…拾取下一个点…>>>:”);\uend_getpoint);_end_setq);_end_和(progn(setvar‘clayer’dline\u curlay)(vl cmdf)“_line”line“line\u pt1 line\u pt2”“)(而line\u pt2(setvar‘clayer”DIMS”)(命令“_dimlined”“non”line\u pt2“non”(极线pt2(+(角度线pt1 line\u pt2)(/pi 2))dline\u scale\u dist);_end_polar);_end_命令(setvar“clayer dline\u curlay)(setq line\u pt1 line\u pt2 line\u pt2’());_end\u setq(if(和line\u pt1(setq line\u pt2(getpoint line\u pt1“\n>>>…拾取下一个点…>>>:”);\uend_getpoint);_end_setq);_end_和(vl cmdf)._line“line\u pt1 line\u pt2”);_end_if);_end_while);_end_progn);_如果(*error*“”)(princ));_end\u defun(提示“\n>>>…dline.lsp现在已加载。键入dline以运行。。。
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 17:33:36 | 显示全部楼层
谢谢Wizman,它工作得很好。lisp是否可能在拾取多段线(请参见附件)时执行相同的标注模式?
绘画图纸
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:37:17 | 显示全部楼层
更新编号3
 
[code];|******************************************************************为多段线(具有多段)尺寸标注创建的程序日期:2008年10月19日创建人:WIZMAN**************;(定义c:mdim(/ent\u layer mdim\u curdimscal mdim\u curlay mdim\u curluprec mdim\u curosmode mdim\u enttemp mdim\u enttemp2 mdim\u pline\u ent mdim\u pline\u ent vla mdim\u pline\u pts mdim\u pt1 mdim\u x mdim\u x1 mdim\u y mdim\u y1 x*错误*第二个点DERIV\u在ENTU点ENTU CLOSED ENTU ENTGET ent\u layer ent\u TEMP\u OPEN LINE U pt1 LINE\U pt2 mdim\U时钟测试MDIM\u计数器MDIM\u CURDIMSCAL MDIM\u CURLAY MDIM\u CURLUPREC MDIM\u CUROSMODE MDIM\u DAN MDIM\u ENTTEMP MDIM\u ENTTEMP2 MDIM\u PLINE\u ENT\u VLA MDIM\u PLINE\u PTS MDIM\u PT1 MDIM\u PT2 MDIM\u SCALE MDIM\u SCALE MDIM\u DIST MDIM\u X MDIM\u X1 MDIM\u Y MDIM\u Y1中点u AT_CURVE PARAM\u AT_POINT RON1 RON2 X)(vl load com)(定义*错误*(消息)(setvar'clayer mdim\u curlay)(setvar'dimscale mdim\u curdimscal)(setvar'luprec mdim\u curluprec)(命令“.\u undo”“\u end”)(setvar'cmdecho 1)(setvar'osmode mdim\u curosmode));\uend\u defun(defun mdim\u revpoly(selected\u pline)(setq mdim\u pt1(vlax curve getendpoint(vlax ename->vla object selected\u pline));\uend_vlax-curve-getendpoint);_end\u setq(setq mdim\u y(cadr mdim\u pt1))(setq mdim\u x(car mdim\u pt1))(setq mdim\u x1(+mdim\u x 100))(setq mdim\u y1(+mdim\u y 100))(setq mdim\u pt2(list mdim\u x mdim\u y1))(setvar'clayer ent\u layer)(命令“line”“NON”mdim\u pt2“NON”mdim\u pt1”“)(setq mdim\u enttemp(entlast))(命令“pedit”mdim\u enttemp“y”“j”selected\u pline“”)(setq mdim\u enttemp2(entlast))(命令“break”mdim\u enttemp2“NON”mdim\u pt1“NON”mdim\u pt1);_命令结束;_命令结束;_命令结束(entupd mdim\u enttemp2)(命令“erase”mdim\u enttemp2”“)(setq mdim\u pline\u ent(entlast))(setq mdim\u pline\u pts(mapcar’(lambda(x)(trans x 0 1))(mapcar’cdr(vl remove if not’(lambda(x)(=10(car x)))(entget mdim\u pline\u ent);\uend_entget);_end_vl-remove-if-not);_end_mapcar);_end_mapcar);_end_setq(defun顺时针-p(p1 p2 p3)(<(sin(-(角度p1 p3)(角度p1 p2)))-1e-14));_end\u defun(setq mdim\u pline\u ent\u vla(vlax ename->vla object mdim\u pline\u ent);(命令“_regen”);_end_setq);_end\u defun(setvar'cmdecho 0)(命令“.u undo”“\u end”)(命令“.u undo”“\u begin”)(setq mdim\u curlay(getvar'clayer))(setq mdim\u curdimscal(getvar'dimscale))(setq mdim\u curluprec(getvar'luprec))(setq mdim\u curosmode(getvar'osmode))(命令“Layer”“m”“DIMS”“unlock”“DIMS”“解冻”“DIMS”“on”“DIMS”“c”“6”“DIMS”“);\uend_命令;_end_命令;_end_命令;_end_命令;;Cab的用户输入功能(while(progn(setq mdim_scale(cond((getint“\n输入绘图比例[20/30/50]:”)))));_end_cond);_end\u setq(if(not(vl位置mdim\u比例)(20 30 50))(not(提示“\n仅从20 30和50中选择,请重新输入”);\uend_not);_end_if);_end_progn);_结束时(cond((=mdim\u scale 20)(setq mdim\u scale\u dist 140))((=mdim\u scale 30)(setq mdim\u scale\u dist 210))((=mdim\u scale 50)(setq mdim\u scale\u dist 350));\uend\u cond(setvar'dimscale mdim\u scale)(while(not(setqmdim\u pline\u ent(ssget:E:S“((0。“LWPOLYLINE”))));_end_setq);_end\u not(princ“\n missed….PICK AGAIN”);\u结束时;;;(命令“_break”(ssname mdim\u pline\u ent 0)(vlax curve getendpoint(vlax ename->vla object(ssname mdim\u pline\u ent 0));;;(vlax curve getendpoint(vlax ename->vla object(ssname mdim\u pline\u ent 0()))(setq ent\u layer(cdr(assoc 8(entget(ssname mdim\u pline\u ent 0())))(setq mdim\u pline\u pts(mapcar’(lambda(x)(trans x 0 1))(mapcar‘cdr(vl remove if not’(lambda(x)(=10(car x)))(entget(ssname mdim\u pline\u ent 0));_end_entget);_end_vl-remove-if-not);_end_mapcar);_end_mapcar);_end_setq(if(and(=(setq ent_closed(cdr(assoc 70(entget(ssname mdim\u pline\u ent 0())))))1)(非(setq mdim\u时钟测试(顺时针-p(car mdim\u pline\u pts)(cadr mdim\u pline\u pts)(caddr mdim\u pline\u pts));\uend_顺时针-p);_end_Setq);_end_not);_end_和(progn(setq ent_entget(entget(ssname mdim\u pline\u ent 0))(entmod(subst(cons 70 0)(assoc 70 ent\u entget)ent\u entget))(setq ent\u temp\u open t));\uend_progn);_end\u if(if(非mdim\u clocktest;\uend\u Setq);\uend\u not(mdim\u revpoly(ssname mdim\u pline\u ent 0))(setq mdim\u pline\u ent\u vla(vlax ename->vla object(ssname mdim\u pline\u ent 0));\uend\u setq;\uend_setq);_end_if(setvar'osmode 0)(setq mdim\u计数器0)(while(<mdim\u计数器(fix(vlax curve getendparam mdim\u pline\u ent\u vla));_end_fix);_end_<(setq line_pt1(vlax curve getpointatparam mdim\u pline\u ent\u vla mdim\u counter));_end\u setq(setq line\u pt2(vlax curve getpointatparam mdim\u pline\u ent\u vla(1+mdim\u计数器));\uend_vlax-curve-getpointatparam);_end\u setq(命令“.u layer”“s”“DIMS”“”)(if(=(vla getbulge mdim\u pline\u ent\u vla mdim\u counter)0.0)(progn(princ“\nstraight”)(命令“.u dimlined”“non”line\u pt1“non”line\u pt2“non”(极线pt2(+(角度线pt1 line\u pt2)(/pi 2))mdim\u scale\u dist);\uend_polar);_end_命令);_end\u progn(progn(princ“\ncurve”)(setq middpoint\u at\u curve(vlax curve getpointatdist mdim\u pline\u ent\u vla(+(*((vlax curve getdistatparam mdim\u pline\u ent\u vla(1+mdim\u counter));\uvlax曲线末端getdistatparam(vlax曲线getdistatparam mdim_pline_ent_vla mdim_counter)vlax曲线终点getdistatparam);_结束-0.5);_*(vlax curve getdistatparam mdim\u pline\u ent\u vla mdim\u counter)的末尾;_结束+;\uvlax曲线终点getpointatdist);_setq结束(setq param_at_point(vlax curve getparamatpoint mdim_pline\u ent\u vla Middpoint_at_curve);_vlax曲线终点(getparamatpoint);_setq结束(setq deriv_at_点(vlax曲线getfirstderiv mdim_pline_ent_vla param_at_点);_vlax曲线结束(getfirstderiv);_setq结束(setq第二个_点(mapcar’+midpoint_at_curve deriv_at_point))(命令“_dimangular”“”(osnap(vlax curve getpointatparam mdim_pline\u ent\u vla param_at_point;(1+mdim_计数器));_end_vlax-curve-getpointatparam“_cen”);_end_osnap line_pt1 line_pt2“非”(极性中点位于曲线(+(角度中点位于曲线第二个点)(/pi 2))mdim_scale\u dist);_end_polar);_end_命令(setq mdim_dan(vlax ename->vla object(entlast));(setvar’luprec 0)(vla put TextOverride mdim\u dan(rtos(-(Setq ron1)(vlax curve get
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:41:20 | 显示全部楼层
updated code above.........:-)
 


-wiz
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:47:37 | 显示全部楼层
here's the latest version...'-)
 
-wiz
mdim.lsp
181635s6exck6il6m2o2mh.jpg
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 17:50:37 | 显示全部楼层
Hi,
I downloaded the mdim.lsp  file but I can't make it work.When you pick on the polyline, an option for editing a polyline will just pop out. I tried it on both model space and paper space but just the same. I'm using Autocad 2007 and I don't know if it has an effect on that. As I see on your attached drawing it's a powerfull tool with regards to my line of work because it reduces my time putting dimensions on all the rebar outlines that I'm making of. I hope you still find time to go through this file.Thanks you.
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:54:55 | 显示全部楼层
i'll try take a look at it later today... try making a new an open pline with minimum of 3 segments first, then run mdim on that pline. let me know whats the result.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 16:32 , Processed in 0.452882 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表