jason tay 发表于 2022-7-6 14:43:58

用ex列出轴承距离

大家好,大师们,有谁能帮助修改这个lisp以添加以下额外功能:
 
1.加载lisp后
装置设置为
-类型:十进制
-精度:3
-角度类型Deg/Min/Sec-精度0d00'00“
-顺时针方向
-北270d0'
 
2.角度(度/分/秒)可设置供选择
-汇总(如现有)
-不汇总
 
 
谢谢你的帮助。
列出轴承距离。LSP

Guest Alan Cull 发表于 2022-7-6 14:50:00

无意冒犯,杰森,但如果是英文的话会更容易理解。
 
这几乎就像老虎偷了我的Lisp程序,把它们转换成瑞典语,然后把它们还给我修改一样糟糕。

jason tay 发表于 2022-7-6 14:56:27

哦,对不起,艾伦,我得把它换成英语。
我将更改它并再次发布。。

jason tay 发表于 2022-7-6 14:59:19

Alan这里我把它改成英文,我试着编辑一下这个lisp,它得到了这个“错误:错误的参数类型:FILE nil”
最后。问题是什么?
 
 

:; use to get bearing and distance of line/s
(DEFUN C:BD ()
(PROGN
(COMMAND "OSNAP" "NONE")
(Princ "List out Bearing Distances \n")
(if (not (tblsearch "layer" "BEARING DISTANCES"))
(command"layer" "m" "BEARING DISTANCES" "c" "3" "" "")
(if (/= (getvar "clayer") "BEARING DISTANCES")
(command"layer" "s" "BEARING DISTANCES" "" ))
)
(SETQ P (SSGET))
(IF P (PROGN
(SETQ SKF (GETREAL "\n1 UNITs on SCREEN = ? UNIT for plotting"))
(SETQ THT (GETDIST "\nSAIZ TULISAN ? "))
(SETQ NODEC (GETINT "\nDistance decimal ? "))
(SETQ YNBRG (STRCASE (GETSTRING Y "\nNeed bearing ? ")))
(SETQ L 0 N (SSLENGTH P) THTV (RTOS THT 2 3) SCMDE (GETVAR "CMDECHO"))
Ū(SETVAR "CMDECHO" 0)
(WHILE (< L N)
(SETQ E (ENTGET (SSNAME P L)))
(IF (= "LINE" (CDR (ASSOC 0 E))) (PROGN
(SETQ BL (CDR (ASSOC 10 E)) EL (CDR (ASSOC 11 E)))
(SETQ BRG (ANGLE BL EL) JAR (DISTANCE BL EL))
(SETQ JARL JAR)
(SETQ ROT (ANGLE BL EL))
(SETQ JARI (RTOS (* SKF JAR) 2 NODEC))
(IF (= YNBRG "N")
(PROGN
(SETQ CTT (POLAR (POLAR BL ROT (/ JAR 2)) (- ROT (* 0.5 PI)) THT))
(SETQ CT (POLAR (POLAR BL ROT (/ JAR 2)) (- ROT (* 0.5 PI)) (* 1.75 THT)))
(IF (< (* 0.5 PI) ROT (* 1.5 PI))
(PROGN
(SETQ ROT (ANGTOS (+ ROT PI)))
(COMMAND "TEXT" "C" CTT THTV ROT JARI))
(PROGN
(SETQ ROT (ANGTOS ROT))
(COMMAND "TEXT" "C" CT THTV ROT JARI))))
(PROGN
(SETQ BRG (- 450 (* 180 (/ BRG PI))))
(IF (<= 360 BRG)(SETQ BRG (- BRG 360)))
(SETQ BR (FIX BRG) MS (* 60 (- BRG BR)) MN (FIX MS))
(SETQ SE (* (FIX (+ (/ (* 60 (- MS MN)) 10) 0.5)) 10))
(IF (< 55 SE) (PROGN (SETQ MN (+ 1 MN))(SETQ SE 0)))
(IF (< 59 MN) (PROGN (SETQ BR (+ 1 BR))(SETQ MN 0)))
(SETQ BR (ITOA BR) MN (ITOA MN) SE (ITOA SE))
(IF (= 1 (STRLEN MN))(SETQ MN (STRCAT "0" MN)))
(IF (= 1 (STRLEN SE))(SETQ SE (STRCAT "0" SE)))
(SETQ BERING (STRCAT BR "%%D" MN (CHR 39) SE (CHR 34) ))
(SETQ BGT (* THT (STRLEN BERING)) JART (* THT (+ 2 (STRLEN JARI))) BR "L")
(IF (< JARL BGT) (PROGN
(IF (< PI ROT)
(PROGN
(SETQ CT (POLAR (POLAR BL ROT (- (/ JAR 2) (/ THT 4))) (+ ROT (* 0.5 PI)) THT))
(SETQ CTJ (POLAR (POLAR BL ROT (+ (/ JAR 2) (* 1.25 THT))) (+ ROT (* 0.5 PI)) THT))
(SETQ ROT (ANGTOS (+ ROT (* 0.5 PI))))
(COMMAND "TEXT" CT THTV ROT BERING)
(COMMAND "TEXT" CTJ THTV ROT JARI))
(PROGN
(SETQ CT (POLAR (POLAR BL ROT (+ (/ THT 4) (/ JAR 2))) (+ ROT (* 0.5 PI)) THT))
(SETQ CTJ (POLAR (POLAR BL ROT (- (/ JAR 2) (* 1.25 THT))) (+ ROT (* 0.5 PI)) THT))
(SETQ ROT (ANGTOS (- ROT (* 0.5 PI))))
Ū(COMMAND "TEXT" "R" CT THTV ROT BERING)
(COMMAND "TEXT" "R" CTJ THTV ROT JARI))
)
(SETQ BR "S")))
(IF (= BR "L") (PROGN
(SETQ CTB (POLAR (POLAR BL ROT (/ JAR 2)) (- ROT (* 0.5 PI)) (* 1.75 THT)))
(SETQ CT (POLAR (POLAR BL ROT (/ JAR 2)) (+ ROT (* 0.5 PI)) (* 0.75 THT)))
(SETQ CTC (POLAR (POLAR BL ROT (/ JAR 2)) (+ ROT (* 0.5 PI)) (* 1.75 THT)))
(SETQ CTD (POLAR (POLAR BL ROT (/ JAR 2)) (- ROT (* 0.5 PI)) (* 0.75 THT)))
(IF (> JARL (+ BGT JART)) (PROGN
(SETQ BERING (STRCAT BERING " " JARI))
(IF (< (* 0.5 PI) ROT (* 1.5 PI))
(PROGN
(SETQ ROT (ANGTOS (- ROT PI)))
(COMMAND "TEXT" "C" CTC THTV ROT BERING))
(PROGN
(SETQ ROT (ANGTOS ROT))
(COMMAND "TEXT" "C" CT THTV ROT BERING))))
(PROGN
(IF (< (* 0.5 PI) ROT (* 1.5 PI))
(PROGN
(SETQ ROT (ANGTOS (- ROT PI)))
(COMMAND "TEXT" "C" CTD THTV ROT JARI)
(COMMAND "TEXT" "C" CTC THTV ROT BERING))
(PROGN
(SETQ ROT (ANGTOS ROT))
(COMMAND "TEXT" "C" CT THTV ROT BERING)
(COMMAND "TEXT" "C" CTB THTV ROT JARI))))))
)))))
(SETQ L (1+ L))
)))
(TERPRI)
(SETVAR "CMDECHO" SCMDE))
(SETQ WS (READ-CHAR WSE))
(SETQ WS (READ-CHAR WSE))
(SETQ WS (READ-CHAR WSE))
(CLOSE WSE))

jason tay 发表于 2022-7-6 15:03:32

艾伦我不知道谁是这个Lisp程序的作者,因为我从我的上级那里得到的。

Guest Alan Cull 发表于 2022-7-6 15:05:57

好的,杰森,
 
有几件事。开始缩进代码。对于每个右括号,缩进一个空格。对于每个左括号,删除一个缩进空格。我马上过去做。(我现在把老虎叼起来了。)。
 
删除此行:
 
 
此外,我怀疑你可能在末尾缺少了一个左括号。

Guest Alan Cull 发表于 2022-7-6 15:10:28

对,杰森,我有机会经历了。试试这个,它只是为了显示缩进,我没有检查你的代码:
 
:; use to get bearing and distance of line/s
(DEFUN C:BD ()
(PROGN
(COMMAND "OSNAP" "NONE")
(Princ "List out Bearing Distances \n")
(if (not (tblsearch "layer" "BEARING DISTANCES"))
(command"layer" "m" "BEARING DISTANCES" "c" "3" "" "")
(if (/= (getvar "clayer") "BEARING DISTANCES")
   (command"layer" "s" "BEARING DISTANCES" "" )
))
(SETQ P (SSGET))
(IF P
(PROGN
   (SETQ SKF (GETREAL "\n1 UNITs on SCREEN = ? UNIT for plotting"))
   (SETQ THT (GETDIST "\nSAIZ TULISAN ? "))
   (SETQ NODEC (GETINT "\nDistance decimal ? "))
   (SETQ YNBRG (STRCASE (GETSTRING Y "\nNeed bearing ? ")))
   (SETQ L 0 N (SSLENGTH P) THTV (RTOS THT 2 3) SCMDE (GETVAR "CMDECHO"))
   (SETVAR "CMDECHO" 0)
   (WHILE (< L N)
    (SETQ E (ENTGET (SSNAME P L))
   )
   (IF (= "LINE" (CDR (ASSOC 0 E)))
    (PROGN
   (SETQ BL (CDR (ASSOC 10 E)) EL (CDR (ASSOC 11 E)))
   (SETQ BRG (ANGLE BL EL) JAR (DISTANCE BL EL))
   (SETQ JARL JAR)
   (SETQ ROT (ANGLE BL EL))
   (SETQ JARI (RTOS (* SKF JAR) 2 NODEC))
   (IF (= YNBRG "N")
      (PROGN
       (SETQ CTT (POLAR (POLAR BL ROT (/ JAR 2)) (- ROT (* 0.5 PI)) THT))
       (SETQ CT (POLAR (POLAR BL ROT (/ JAR 2)) (- ROT (* 0.5 PI)) (* 1.75 THT)))
       (IF (< (* 0.5 PI) ROT (* 1.5 PI))
      (PROGN
         (SETQ ROT (ANGTOS (+ ROT PI)))
         (COMMAND "TEXT" "C" CTT THTV ROT JARI)
      )
      (PROGN
         (SETQ ROT (ANGTOS ROT))
         (COMMAND "TEXT" "C" CT THTV ROT JARI)
      )))
      (PROGN
       (SETQ BRG (- 450 (* 180 (/ BRG PI))))
       (IF (<= 360 BRG)(SETQ BRG (- BRG 360)))
       (SETQ BR (FIX BRG) MS (* 60 (- BRG BR)) MN (FIX MS))
       (SETQ SE (* (FIX (+ (/ (* 60 (- MS MN)) 10) 0.5)) 10))
       (IF (< 55 SE) (PROGN (SETQ MN (+ 1 MN))(SETQ SE 0)))
       (IF (< 59 MN) (PROGN (SETQ BR (+ 1 BR))(SETQ MN 0)))
       (SETQ BR (ITOA BR) MN (ITOA MN) SE (ITOA SE))
       (IF (= 1 (STRLEN MN))(SETQ MN (STRCAT "0" MN)))
       (IF (= 1 (STRLEN SE))(SETQ SE (STRCAT "0" SE)))
       (SETQ BERING (STRCAT BR "%%D" MN (CHR 39) SE (CHR 34)))
       (SETQ BGT (* THT (STRLEN BERING)) JART (* THT (+ 2 (STRLEN JARI))) BR "L")
       (IF (< JARL BGT)
      (PROGN
         (IF (< PI ROT)
          (PROGN
         (SETQ CT (POLAR (POLAR BL ROT (- (/ JAR 2) (/ THT 4))) (+ ROT (* 0.5 PI)) THT))
         (SETQ CTJ (POLAR (POLAR BL ROT (+ (/ JAR 2) (* 1.25 THT))) (+ ROT (* 0.5 PI)) THT))
         (SETQ ROT (ANGTOS (+ ROT (* 0.5 PI))))
         (COMMAND "TEXT" CT THTV ROT BERING)
         (COMMAND "TEXT" CTJ THTV ROT JARI)
          )
          (PROGN
         (SETQ CT (POLAR (POLAR BL ROT (+ (/ THT 4) (/ JAR 2))) (+ ROT (* 0.5 PI)) THT))
         (SETQ CTJ (POLAR (POLAR BL ROT (- (/ JAR 2) (* 1.25 THT))) (+ ROT (* 0.5 PI)) THT))
         (SETQ ROT (ANGTOS (- ROT (* 0.5 PI))))
         (COMMAND "TEXT" "R" CT THTV ROT BERING)
         (COMMAND "TEXT" "R" CTJ THTV ROT JARI)
         ))
         (SETQ BR "S")
       ))
       (IF (= BR "L")
      (PROGN
      (SETQ CTB (POLAR (POLAR BL ROT (/ JAR 2)) (- ROT (* 0.5 PI)) (* 1.75 THT)))
      (SETQ CT (POLAR (POLAR BL ROT (/ JAR 2)) (+ ROT (* 0.5 PI)) (* 0.75 THT)))
      (SETQ CTC (POLAR (POLAR BL ROT (/ JAR 2)) (+ ROT (* 0.5 PI)) (* 1.75 THT)))
      (SETQ CTD (POLAR (POLAR BL ROT (/ JAR 2)) (- ROT (* 0.5 PI)) (* 0.75 THT)))
      (IF (> JARL (+ BGT JART))
         (PROGN
          (SETQ BERING (STRCAT BERING " " JARI))
          (IF (< (* 0.5 PI) ROT (* 1.5 PI))
         (PROGN
            (SETQ ROT (ANGTOS (- ROT PI)))
            (COMMAND "TEXT" "C" CTC THTV ROT BERING)
         )
         (PROGN
            (SETQ ROT (ANGTOS ROT))
            (COMMAND "TEXT" "C" CT THTV ROT BERING)
         )))
         (PROGN
          (IF (< (* 0.5 PI) ROT (* 1.5 PI))
         (PROGN
            (SETQ ROT (ANGTOS (- ROT PI)))
            (COMMAND "TEXT" "C" CTD THTV ROT JARI)
            (COMMAND "TEXT" "C" CTC THTV ROT BERING)
         )
         (PROGN
            (SETQ ROT (ANGTOS ROT))
            (COMMAND "TEXT" "C" CT THTV ROT BERING)
            (COMMAND "TEXT" "C" CTB THTV ROT JARI)
))))))))))
(SETQ L (1+ L))
))
(TERPRI)
(SETVAR "CMDECHO" SCMDE))
(SETQ WS (READ-CHAR WSE))
(SETQ WS (READ-CHAR WSE))
(SETQ WS (READ-CHAR WSE))
(CLOSE WSE)
)

 
现在,有几件事,我在那里找到了几个随机的“U”,并删除了它们。
 
括号的平衡是正确的,但正确的缩进只会使控制该区域更容易。
 
把我之前发的那句话去掉。
 
我无法理解最后5行代码。它们指的是从名为“WSE”的文件或其他文件中读取文本行上的一个字符,但您并没有对它们做任何操作,只是每次将下一个字符分配给同一个变量。然后关闭一个尚未打开的文件。我建议删除最后5行,甚至可能是最后6行。
 
正如我所说,我还没有检查你的代码。希望这对开始有所帮助,然后我们可以根据您的要求进一步了解进展情况。

jason tay 发表于 2022-7-6 15:15:43

尊敬的Alan:,
我删除了最后5行代码并尝试加载代码,但
这出现了;错误:输入列表格式不正确
实际上对它有什么影响?

CarlB 发表于 2022-7-6 15:19:25

不要删除最后一行“)”,否则会导致括号不平衡,从而产生错误消息。艾伦指的是上面的几行。

jason tay 发表于 2022-7-6 15:26:09

卡尔布,
当我试图打印并检查时,仍然无法修复:哎呀:,
对我来说是一段很长的路要走。
这是学习lisp表单的好方法吗?像我现在尝试的那样修改它?
页: [1] 2
查看完整版本: 用ex列出轴承距离