乐筑天下

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

[编程交流] HVAC图纸

[复制链接]

8

主题

71

帖子

66

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-6 12:16:00 | 显示全部楼层 |阅读模式
我写了这个lisp来绘制所需尺寸的格栅(与空调相关),条件是如果指定的长度小于500mm,它将绘制一个箭头,如果超过500,它将绘制3个箭头。
我在这方面也很成功,但有一个小问题。从点c1到c4绘制的轴环线应具有与相邻线相同的特性。我甚至发现这是由于(setq sa1(entlast))在“if”中出现。甚至所有的箭头都应该在“格栅”层。我知道原因。但不知道如何解决它。
我可以从lisp大师那里得到一些帮助吗。我也想知道我怎样才能使它更有效。
(附jpg供参考)
 
;该lisp可以绘制所需大小的弧垂并将其转换为块
(定义c:sg(/pt1 lth pt2 pt3 pt4 pt5 pt6 pt7 pt8 osm ct c1 c2
c3 c4 ar1 ar2 ar3 ar4 sa1 sa2 sa3 sa4 bd fl t1 t2 t3
t4 t5 t6 t7 t8)
(setvar“cmdecho”0)
(setq pt1(getpoint“\n指定起点:”)
lth(getdist“\n指定格栅的长度:”)
pt2(极性pt1 1.570796 lth)
pt3(极性pt2 3.141592 75)
pt4(极性pt3 4.712387 lth)
pt5(极性pt1 4.712387 25)
pt6(极性pt5 0.0 25)
pt7(极性pt6 1.570796(+lth 50))
pt8(极性pt7 3.141592 25)
osm(getvar“osmode”))
(setvar“osmode”0)
(命令“layer”“n”“grill”“c”“30”“grill”“))
(命令“矩形”pt4 pt2)
(setq bd(entlast))
(命令“矩形”pt5 pt7)
(setq fl(entlast))
(命令“change”bd““p”la“grill”)
(命令“change”fl““p”“la”“grill”)
(setq c1(极性pt1 3.141592 200)
c2(极性pt2 3.141592 300)
c3(极性c2 4.712387(+lth 100))
c4(极性c1 1.570796 lth)
(命令行“pt1 c1 c3”)
(命令行“pt2 c2”)
(命令行“c1 c4”)
(setq ar1(极pt1 1.570796(/lth 6))
ar2(极性ar1 1.570796(/lth 3))
ar3(极性ar2 1.570796(/lth 3))
t1(极性ar1 0.0 250)
t2(极性t1 0.0 150)
t3(极性ar2 0.0 250)
t4(极性t3 0.0 150)
t5(极坐标ar3 0.0 250)
t6(极性t5 0.0 150)
ar4(极性pt1 1.570796(/lth 2))
t7(极轴ar4 0.0 250)
t8(极性t7 0.0 150))
(如果(
(
(命令“pline”ar1“w”“0”“0”t1“w”“50”“0”t2“”)
(setq sa1(entlast))
(命令“pline”ar2“w”“0”“0”t3“w”“50”“0”t4”)
(setq sa2(entlast))
(命令“pline”ar3“w”“0”“0”t5“w”“50”“0”t6”)
(setq sa3(entlast))
(命令“change”sa1““p”“la”“grill”)
(命令“change”sa2““p”“la”“grill”)
(命令“change”sa3““p”“la”“grill”)
)
(
(命令“pline”ar4“w”“0”“0”t7“w”“50”“0”t8”)
(setq sa4(entlast))
(命令“change”sa4““p”“la”“grill”)
))
(setvar“osmode”osm)
131602ay4aygegym3lg1le.jpg
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 12:21:56 | 显示全部楼层
在“if”语句中,似乎是通过用括号括起来对命令进行分组。相反,您需要使用“progn”对它们进行分组。
 
所以试试看:
 
  1. (if (< 500 lth)
  2.   (progn
  3.     (command "pline" ar1 "w" "0" "0" t1 "w" "50" "0" t2"")
  4.     (setq sa1(entlast))
  5.     (command "pline" ar2 "w" "0" "0" t3 "w" "50" "0" t4"")
  6.     (setq sa2(entlast))
  7.     (command "pline" ar3 "w" "0" "0" t5 "w" "50" "0" t6"")
  8.     (setq sa3(entlast))
  9.     (command "change" sa1"" "p" "la" "GRILLE" "")
  10.     (command "change" sa2"" "p" "la" "GRILLE" "")
  11.     (command "change" sa3"" "p" "la" "GRILLE" "")
  12. )
  13. (progn
  14. (command "pline" ar4 "w" "0" "0" t7 "w" "50" "0" t8"")
  15. (setq sa4(entlast))
  16. (command "change" sa4"" "p" "la" "GRILLE" "")
  17. ))

 
我可以看到一些压缩代码的方法,例如更改3个对象的层:
 
(命令“change”sa1 sa2 sa3““p”“la”“grill”)
回复

使用道具 举报

8

主题

71

帖子

66

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-6 12:24:37 | 显示全部楼层
非常感谢你,卡尔。结果很好。
回复

使用道具 举报

8

主题

71

帖子

66

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-6 12:27:23 | 显示全部楼层
卡尔在你的帮助下,我以前完成了工作。现在,我在前面的lisp中添加了更多内容。当你第一次运行它时,它工作正常,但当我第二次使用它时,它的“lth”值相同。相同块的原因已经存在。
我真正想要的是在具有相同块名的dwg中多次使用相同的lisp。如果块已经存在,那么再次插入相同的块,或者我不介意重新定义块。
 
还有一件事是块名(setq-bn)是“400.0000SAG”,当“lth”是400时,它可以是“400 SAG”吗。
你能再帮我一次吗
 
 
;该lisp可以绘制所需大小的弧垂并将其转换为块
(定义c:sag(/pt1 lth pt2 pt3 pt4 pt5 pt6 pt7 pt8 osm ct c1 c2
c3 c4 ar1 ar2 ar3 ar4 sa1 sa2 sa3 sa4 bd fl t1 t2 t3
t4 t5 t6 t7 t8)
(setvar“cmdecho”0)
(setq pt1(getpoint“\n指定起点:”)
lth(getdist“\n指定格栅的长度:”)
pt2(极地pt1 1.570796 lth)
pt3(极性pt2 3.141592 75)
pt4(极性pt3 4.712387 lth)
pt5(极性pt1 4.712387 25)
pt6(极性pt5 0.0 25)
pt7(极性pt6 1.570796(+lth 50))
pt8(极性pt7 3.141592 25)
osm(getvar“osmode”))
(setvar“osmode”0)
(命令“layer”“n”“grill”“c”“30”“grill”“))
(命令“矩形”pt4 pt2)
(setq bd(entlast))
(命令“矩形”pt5 pt7)
(setq fl(entlast))
(命令“change”bd fl““p”la“grill”)
(setq c1(极性pt1 3.141592 200)
c2(极性pt2 3.141592 300)
c3(极性c2 4.712387(+lth 100))
c4(极性c1 1.570796 lth)
 
(命令行“pt1 c1 c3”)
(命令行“pt2 c2”)
(命令行“c1 c4”)
(setq ar1(极pt1 1.570796(/lth 6))
ar2(极性ar1 1.570796(/lth 3))
ar3(极性ar2 1.570796(/lth 3))
t1(极性ar1 0.0 250)
t2(极性t1 0.0 150)
t3(极性ar2 0.0 250)
t4(极性t3 0.0 150)
t5(极坐标ar3 0.0 250)
t6(极性t5 0.0 150)
ar4(极性pt1 1.570796(/lth 2))
t7(极轴ar4 0.0 250)
t8(极性t7 0.0 150))
(如果(
(程序
(命令“pline”ar1“w”“0”“0”t1“w”“50”“0”t2“”)
(setq sa1(entlast))
(命令“pline”ar2“w”“0”“0”t3“w”“50”“0”t4”)
(setq sa2(entlast))
(命令“pline”ar3“w”“0”“0”t5“w”“50”“0”t6”)
(setq sa3(entlast))
(命令“change”sa1 sa2 sa3““p”“la”“grill”)
)
(程序
(命令“pline”ar4“w”“0”“0”t7“w”“50”“0”t8”)
(setq sa4(entlast))
(命令“change”sa4““p”“la”“grill”)
))
(setq bin(极性pt1 1.570796(/lth 2)))
(setq bn(strcat(rtos lth)“SAG”))
(如果(
(progn(命令“select”bd fl sa1 sa2 sa3“”)
(progn(命令“select”bd fl sa4“”))
(命令“block”bn bin“previous”“))
(setvar“osmode”osm)
(命令“insert”bn bin“1”“1”“0”)
(普林斯)
回复

使用道具 举报

8

主题

71

帖子

66

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-6 12:31:00 | 显示全部楼层
嘿,巴兹和卡尔,在你们两个的帮助下,我终于拿到了。
Buzz你的第一篇帖子成功了(if(null(tblsearch“block”bn))。
谢谢你。
现在它完美地完成了我想要的。
如果我能做得更好,请告诉我。
 
;该lisp可以绘制所需大小的弧垂并将其转换为块
(defun c:弧垂(/)
(setvar“cmdecho”0)
(setq pt1(getpoint“\n指定起点:”)
lth(getdist“\n指定格栅的长度:”)
pt2(极性pt1 1.570796 lth)
pt3(极性pt2 3.141592 75)
pt4(极性pt3 4.712387 lth)
pt5(极性pt1 4.712387 25)
pt6(极性pt5 0.0 25)
pt7(极性pt6 1.570796(+lth 50))
pt8(极性pt7 3.141592 25)
osm(getvar“osmode”))
(setvar“osmode”0)
(如果(空(tblsearch“layer”“grill”))
(命令“layer”“n”“grill”“c”“30”“grill”“))
(普林斯)
(命令“矩形”pt4 pt2)
(setq bd(entlast))
(命令“矩形”pt5 pt7)
(setq fl(entlast))
(命令“change”bd fl““p”la“grill”)
(setq c1(极性pt1 3.141592 200)
c2(极性pt2 3.141592 300)
c3(极性c2 4.712387(+lth 100))
c4(极性c1 1.570796 lth)
(命令行“pt1 c1 c3”)
(命令行“pt2 c2”)
(命令行“c1 c4”)
(setq ar1(极pt1 1.570796(/lth 6))
ar2(极性ar1 1.570796(/lth 3))
ar3(极性ar2 1.570796(/lth 3))
t1(极性ar1 0.0 250)
t2(极性t1 0.0 150)
t3(极性ar2 0.0 250)
t4(极性t3 0.0 150)
t5(极坐标ar3 0.0 250)
t6(极性t5 0.0 150)
ar4(极性pt1 1.570796(/lth 2))
t7(极轴ar4 0.0 250)
t8(极性t7 0.0 150))
(如果(
(程序
(命令“pline”ar1“w”“0”“0”t1“w”“50”“0”t2“”)
(setq sa1(entlast))
(命令“pline”ar2“w”“0”“0”t3“w”“50”“0”t4”)
(setq sa2(entlast))
(命令“pline”ar3“w”“0”“0”t5“w”“50”“0”t6”)
(setq sa3(entlast))
(命令“change”sa1 sa2 sa3““p”“la”“grill”)
)
(程序
(命令“pline”ar4“w”“0”“0”t7“w”“50”“0”t8”)
(setq sa4(entlast))
(命令“change”sa4““p”“la”“grill”)
))
(setq bin(极性pt1 1.570796(/lth 2)))
(setq bn(strcat(rtos lth 2 0)“SAG”))
(如果(
(progn(命令“select”bd fl sa1 sa2 sa3“”)
(progn(命令“select”bd fl sa4“”))
(if(null(tblsearch“block”bn))
(progn(命令“block”bn bin“previous”“))
(命令“insert”bn bin“1”“1”“0”))
(progn(命令“erase”“PREVICE”“))
(命令“insert”bn bin“1”“1”“0”))
(setvar“osmode”osm)
(普林斯)
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 12:33:07 | 显示全部楼层
Viv,
 
很抱歉删除我的帖子,但我看到了一些小怪癖。我用DXF数据从程序中创建块定义来编写这个程序。这也可能有帮助,若你们想把你们的格栅设置在一个特定的角度,你们可以在程序操作的一个会话中完成这一切。
 
我很可能稍后会发帖子给你一些关于我的意思的想法。我只是想确保我张贴这个没有任何错误。
 
无论如何,现在我很高兴它对你有效。我试着给你一个更好的方法。
回复

使用道具 举报

8

主题

71

帖子

66

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-6 12:35:47 | 显示全部楼层
嗡嗡声
我知道你在想什么。但我需要练习这样做。现在我想的是将这些对象与用户选择的线对齐。你能帮我做这个吗。我也在做同样的工作。
 
谢谢和问候。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 12:39:49 | 显示全部楼层
 
 
我现在正在这样设置它,我也将让程序以显示对象的方式绘制它,以及以不同流动路径的相反方向绘制。
 
正如我还提到的,我将为所有这些添加一个旋转功能,并让程序记住最后的输入。这将使该计划变得真正敏锐。
 
我需要研究你的线坐标,熟悉使用的变量。我没有论坛上的一些人那么快,所以我需要花一点时间。
 
我确实计划把它贴在这里供你们复习。我会评论它,让你决定你想从中使用什么。我也在考虑使用dcl文件,但现在我会暂缓,因为我自己不会走得更远。
 
留心这个计划,我不确定什么时候能完成。
回复

使用道具 举报

8

主题

71

帖子

66

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-6 12:43:51 | 显示全部楼层
巴斯,你真是太好了。同时,附件将清除我的线路坐标。
我会等你的帖子。
131604gdbkzamhaibjf5bv.jpg
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 12:46:05 | 显示全部楼层
 
嘿Viv!
 
我希望我以前有这些坐标,但我从没想过要问。
无论如何,我完成这个程序是为了给你自己的程序提供一些想法,或者如果你愿意的话,你可以使用这个。
 
你可能喜欢也可能不喜欢我在这方面投入的一切,这没关系。试试看,让我知道你认为好还是坏。
 
该程序具有以下功能:
 
1.在程序开始时保存用户的绘图设置,并在程序结束时恢复这些设置。
2.内置错误陷阱,所以如果你点击
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 06:31 , Processed in 0.526930 second(s), 75 queries .

© 2020-2025 乐筑天下

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