viviancarvalho 发表于 2022-7-6 12:16:00

HVAC图纸

我写了这个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)

CarlB 发表于 2022-7-6 12:21:56

在“if”语句中,似乎是通过用括号括起来对命令进行分组。相反,您需要使用“progn”对它们进行分组。
 
所以试试看:
 

(if (< 500 lth)
(progn
    (command "pline" ar1 "w" "0" "0" t1 "w" "50" "0" t2"")
    (setq sa1(entlast))
    (command "pline" ar2 "w" "0" "0" t3 "w" "50" "0" t4"")
    (setq sa2(entlast))
    (command "pline" ar3 "w" "0" "0" t5 "w" "50" "0" t6"")
    (setq sa3(entlast))
    (command "change" sa1"" "p" "la" "GRILLE" "")
    (command "change" sa2"" "p" "la" "GRILLE" "")
    (command "change" sa3"" "p" "la" "GRILLE" "")
)
(progn
(command "pline" ar4 "w" "0" "0" t7 "w" "50" "0" t8"")
(setq sa4(entlast))
(command "change" sa4"" "p" "la" "GRILLE" "")
))
 
我可以看到一些压缩代码的方法,例如更改3个对象的层:
 
(命令“change”sa1 sa2 sa3““p”“la”“grill”)

viviancarvalho 发表于 2022-7-6 12:24:37

非常感谢你,卡尔。结果很好。

viviancarvalho 发表于 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”)
(普林斯)

viviancarvalho 发表于 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)
(普林斯)

The Buzzard 发表于 2022-7-6 12:33:07

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

viviancarvalho 发表于 2022-7-6 12:35:47

嗡嗡声
我知道你在想什么。但我需要练习这样做。现在我想的是将这些对象与用户选择的线对齐。你能帮我做这个吗。我也在做同样的工作。
 
谢谢和问候。

The Buzzard 发表于 2022-7-6 12:39:49

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

viviancarvalho 发表于 2022-7-6 12:43:51

巴斯,你真是太好了。同时,附件将清除我的线路坐标。
我会等你的帖子。

The Buzzard 发表于 2022-7-6 12:46:05

 
嘿Viv!
 
我希望我以前有这些坐标,但我从没想过要问。
无论如何,我完成这个程序是为了给你自己的程序提供一些想法,或者如果你愿意的话,你可以使用这个。
 
你可能喜欢也可能不喜欢我在这方面投入的一切,这没关系。试试看,让我知道你认为好还是坏。
 
该程序具有以下功能:
 
1.在程序开始时保存用户的绘图设置,并在程序结束时恢复这些设置。
2.内置错误陷阱,所以如果你点击
页: [1] 2
查看完整版本: HVAC图纸