乐筑天下

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

[编程交流] 找不到线的中点

[复制链接]

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:48:23 | 显示全部楼层 |阅读模式
大家好,
今天,我尝试了李Mac的一些编码风格——通过组合cond和not函数。我想我理解他这样做的原因——在代码中切换和找到断点很容易。在我的例子中是这样的:
  1. Midpoint of the line not found.

问题是我不明白它出了什么问题,所以我运行了VLIDE并观察了一些变量:
  1. LOG Watch
  2. ...............
  3. MIDPT = (2377.57 -1262.93 0.0)
  4. ENDPT2 = (3345.54 -1666.0 0.0)
  5. ENDPT1 = (1409.6 -859.868 0.0)
  6. LINE = ((1409.6 -859.868 0.0) (3345.54 -1666.0 0.0))
  7. ENTITYTYPE = "LWPOLYLINE"
  8. ENT = (<Entity name: 7ff6d2304ea0> (1812.88 -1048.75 0.0))
  9. CENSSBOX = (2556.4 1934.71 0.0)
  10. SSBOX = ((1891.74 1157.88 0.0) (3221.06 2711.53 0.0))
  11. ...............

基本上,我试图将SS从“Censbox”移动到“MIDPT”点变量。我知道我有两种不同的方法来找到这些点。
事实上,我单独测试了变量-使用POINT命令我成功地绘制了它们的正确位置-但结合在一起用于move命令密码告诉我要迷路。
这里是顺便说一句:
  1. ; Moves selection from its center to the midpoint of the picked LINE or PLINE's segment
  2. (defun c:test ( / pdm ss ssbox censsbox ent entitytype line endpt1 endpt2 midpt )
  3. (vl-load-com)
  4. (setq pdm (getvar 'PDMODE))
  5. (setvar 'PDMODE 35)
  6. (while
  7.         (cond
  8.                 ( (not (and (princ "\nSelect objects to move") (setq ss (ssget "_:L"))))
  9.                         (princ "\nNothing selected.")
  10.                 )
  11.                 ( (not (setq ssbox (LM:ssboundingbox ss)))
  12.                         (princ "\nUnable to calculate bounding box for selection.")
  13.                 )
  14.                 ( (not (setq censsbox (apply 'mapcar (cons '(lambda ( a b ) (/ (+ a b) 2.0)) ssbox)) ))
  15.                         (princ "\nUnable to find bounding box's centroid.")
  16.                 )
  17.                 ( (not (setq ent (entsel "\nPick a line or a polyline's segment")))
  18.                         (princ "\nMissed.. Try again!")
  19.                 )
  20.                 ( (not (setq entitytype (cdr (assoc 0 (entget (car ent))))) )
  21.                         (princ "\nEntitytype not found.")
  22.                 )
  23.                 (
  24.                         (progn
  25.                                 (setq line (get_ends ent))
  26.                                 (setq endpt1 (car  line))
  27.                                 (setq endpt2 (cadr  line))
  28.                                 (setq midpt (mid endpt1 endpt2))
  29.                         )
  30.                         (princ "\nMidpoint of the line not found.")
  31.                 )
  32.                 (
  33.                         (progn
  34.                                 (vl-cmdf "_.move" ss ""
  35.                                         "_non" censsbox
  36.                                         "_non" midpt
  37.                                 )
  38.                                 (princ (strcat "\nThis time you picked "" entitytype "" entity! " ))
  39.                         )
  40.                 )
  41.         );cond
  42.         (setvar 'PDMODE pdm)
  43. );while
  44. (princ)
  45. )
  46. ; (command "_.POINT" endpt1 )
  47. ; (command "_.POINT" endpt2 )
  48. ; (command "_.POINT" censsbox )
  49. ; (command "_.POINT" midpt )
  50. (defun mid (p1 p2)
  51. (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0)) p1 p2)
  52. )
  53. ; Stefan BMR
  54. (defun get_ends (e / o p p1 p2 b)
  55. (setq o  (car e)
  56.         b  (eq (cdr (assoc 0 (entget o))) "LWPOLYLINE")
  57.         p  (vlax-curve-getparamatpoint
  58.                 o
  59.                 (vlax-curve-getclosestpointto o (trans (cadr e) 1 0))
  60.         )
  61.         p1 (if b
  62.                 (fix p)
  63.                 (vlax-curve-getstartparam o)
  64.         )
  65.         p2 (if b
  66.                 (1+ p1)
  67.                 (vlax-curve-getendparam o)
  68.         )
  69. )
  70. (if (> (- p2 p) (- p p1))
  71.         (list
  72.                 (trans (vlax-curve-getpointatparam o p1) 0 1)
  73.                 (trans (vlax-curve-getpointatparam o p2) 0 1)
  74.         )
  75.         (list
  76.                 (trans (vlax-curve-getpointatparam o p2) 0 1)
  77.                 (trans (vlax-curve-getpointatparam o p1) 0 1)
  78.         )
  79. )
  80. )
  81. (defun LM:listmid ( lst )
  82. ((lambda ( n ) (mapcar '(lambda ( x ) (/ x n)) (apply 'mapcar (cons '+ lst)))) (length lst))
  83. )
  84. ;; Selection Set Bounding Box  -  Lee Mac
  85. ;; Returns a list of the lower-left and upper-right WCS coordinates of a
  86. ;; rectangular frame bounding all objects in a supplied selection set.
  87. ;; s - [sel] Selection set for which to return bounding box
  88. (defun LM:ssboundingbox ( s / a b i m n o )
  89. (repeat (setq i (sslength s))
  90.         (if
  91.                 (and
  92.                         (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
  93.                         (vlax-method-applicable-p o 'getboundingbox)
  94.                         (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
  95.                 )
  96.                 (setq m (cons (vlax-safearray->list a) m)
  97.                         n (cons (vlax-safearray->list b) n)
  98.                 )
  99.         )
  100. )
  101. (if (and m n)
  102.         (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
  103. )
  104. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:52:34 | 显示全部楼层
提示:(setq midpt(mid endpt1 endpt2))将返回一个非nil值,以验证cond test表达式。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:56:23 | 显示全部楼层
嗨,李,
我真的不理解这个问题,在“Log Watch”上我清楚地看到“midpt”变量返回(2377.57-1262.93 0.0)。
我假设这是一个点坐标。
 
编辑:
我发现了问题。。。
  1.                         (
  2.                         (not
  3.                                 (progn
  4.                                         (setq line (get_ends ent))
  5.                                         (setq endpt1 (car  line))
  6.                                         (setq endpt2 (cadr  line))
  7.                                         (setq midpt (mid endpt1 endpt2))
  8.                                 )
  9.                         )
  10.                         (princ "\nMidpoint of the line not found.")
  11.                 )

我需要仔细研究cond的工作原理。
我在entsel部分的第二个问题上卡住了,我要试一下。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:00:17 | 显示全部楼层
如果(cond)测试序列中的任何测试具有非零返回,(cond)停止评估其余的条件测试。即,如果设置了midpt,则永远不会执行move命令
 
 
-大卫
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 18:02:14 | 显示全部楼层
谢谢David,
所以整个过程都是这样的吗
  1. (cond
  2. ( (not (Stuff to do #1))) ; evaluate arguments from user and continue if TRUE next to #2
  3.         (princ "\nStuff to do #1 are not done, do them to continiue")
  4. )
  5. ( (not (Stuff to do #2))) ; evaluate arguments from user and continue if TRUE next to #3
  6.         (princ "\nStuff to do #2 are not done, do them to continiue")
  7. )
  8. ( (not (Stuff to do #3))) ; evaluate arguments from user and continue if TRUE next for the code to compute
  9.         (princ "\nStuff to do #3 are not done, do them to continiue")
  10. )
  11. ( (not (We got everything we need from Stuff #1, #2 and #3, now the code does its job... )) ; every argument has been evaluated, the code proceeds with the results
  12.         (princ "\nEverything is provided for the code, but it failed!")
  13. )
  14. );cond

 
以下是固定代码(这是一种做法):
  1. ; Moves selection from its center to the midpoint of the picked LINE or PLINE's segment
  2. (defun c:test ( / pdm ss ssbox censsbox ent entitytype line endpt1 endpt2 midpt )
  3. (vl-load-com)
  4. (setq pdm (getvar 'PDMODE))
  5. (setvar 'PDMODE 35)
  6. (while
  7.         (cond
  8.                 ( (not (and (princ "\nSelect objects to move") (setq ss (ssget "_:L"))))
  9.                         (princ "\nNothing selected.")
  10.                 )
  11.                 ( (not (setq ssbox (LM:ssboundingbox ss)))
  12.                         (princ "\nUnable to calculate bounding box for selection.")
  13.                 )
  14.                 ( (not (setq censsbox (apply 'mapcar (cons '(lambda ( a b ) (/ (+ a b) 2.0)) ssbox)) ))
  15.                         (princ "\nUnable to find bounding box's centroid.")
  16.                 )
  17.                 ( (not (while (not (setq ent (entsel "\nPick a line or a polyline's segment"))) ent (princ "\nMissed.. Try again!")) )
  18.                 )
  19.                 ( (not (setq entitytype (cdr (assoc 0 (entget (car ent))))) )
  20.                         (princ "\nEntitytype not found.")
  21.                 )
  22.                 (
  23.                         (not
  24.                                 (progn
  25.                                         (setq line (get_ends ent))
  26.                                         (setq endpt1 (car  line))
  27.                                         (setq endpt2 (cadr  line))
  28.                                         (setq midpt (mid endpt1 endpt2))
  29.                                 )
  30.                         )
  31.                         (princ "\nMidpoint of the line not found.")
  32.                 )
  33.                 (
  34.                         (progn
  35.                                 (vl-cmdf "_.move" ss ""
  36.                                         "_non" censsbox
  37.                                         "_non" midpt
  38.                                 )
  39.                                 (princ (strcat "\nThis time you picked "" entitytype "" entity! " ))
  40.                         )
  41.                 )
  42.         );cond
  43.         (setvar 'PDMODE pdm)
  44. );while
  45. (princ)
  46. )
  47. ; (command "_.POINT" endpt1 )
  48. ; (command "_.POINT" endpt2 )
  49. ; (command "_.POINT" censsbox )
  50. ; (command "_.POINT" midpt )
  51. (defun mid (p1 p2)
  52. (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0)) p1 p2)
  53. )
  54. ; Stefan BMR
  55. (defun get_ends (e / o p p1 p2 b)
  56. (setq o  (car e)
  57.         b  (eq (cdr (assoc 0 (entget o))) "LWPOLYLINE")
  58.         p  (vlax-curve-getparamatpoint
  59.                 o
  60.                 (vlax-curve-getclosestpointto o (trans (cadr e) 1 0))
  61.         )
  62.         p1 (if b
  63.                 (fix p)
  64.                 (vlax-curve-getstartparam o)
  65.         )
  66.         p2 (if b
  67.                 (1+ p1)
  68.                 (vlax-curve-getendparam o)
  69.         )
  70. )
  71. (if (> (- p2 p) (- p p1))
  72.         (list
  73.                 (trans (vlax-curve-getpointatparam o p1) 0 1)
  74.                 (trans (vlax-curve-getpointatparam o p2) 0 1)
  75.         )
  76.         (list
  77.                 (trans (vlax-curve-getpointatparam o p2) 0 1)
  78.                 (trans (vlax-curve-getpointatparam o p1) 0 1)
  79.         )
  80. )
  81. )
  82. (defun LM:listmid ( lst )
  83. ((lambda ( n ) (mapcar '(lambda ( x ) (/ x n)) (apply 'mapcar (cons '+ lst)))) (length lst))
  84. )
  85. ;; Selection Set Bounding Box  -  Lee Mac
  86. ;; Returns a list of the lower-left and upper-right WCS coordinates of a
  87. ;; rectangular frame bounding all objects in a supplied selection set.
  88. ;; s - [sel] Selection set for which to return bounding box
  89. (defun LM:ssboundingbox ( s / a b i m n o )
  90. (repeat (setq i (sslength s))
  91.         (if
  92.                 (and
  93.                         (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
  94.                         (vlax-method-applicable-p o 'getboundingbox)
  95.                         (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
  96.                 )
  97.                 (setq m (cons (vlax-safearray->list a) m)
  98.                         n (cons (vlax-safearray->list b) n)
  99.                 )
  100.         )
  101. )
  102. (if (and m n)
  103.         (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
  104. )
  105. )

编辑:
做了一些实验来解决一些小问题,我再次更改了这一部分:
  1.                         ( (while (not (setq ent (entsel "\nPick a line or a polyline's segment"))) ent )
  2.                 )

用cond的每个语句进行这样的实验非常方便,而不会让代码立即失败!
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:05:00 | 显示全部楼层
我更喜欢测试
  1. (and (do step 1)
  2.     (do step 2)
  3.     (do step 3)
  4. )

 
如果任何步骤未能返回非零值,则此操作将停止。我不喜欢在其他测试中创建包含的拾取集
 
  1. (while (not ss)
  2.          (setq ss (ssget)))

 
如果您没有选择任何内容,为什么要运行该程序?否则你必须重新开始例行程序。我的0.02美元
 
-大卫
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 18:08:40 | 显示全部楼层
我同意,大卫
 
我只是想尝试一下,看看这种编写代码的方式有什么不同。。。
所以你说的是这样的:
  1. (if
  2. (and ; Evaluate arguments from user within the "and" function
  3.         (if
  4.                 (not (Stuff to do #1 ))
  5.                 (princ "\nTheres something wrong in #1 try again!")
  6.                 (Stuff to do #1 )
  7.         )
  8.         (if
  9.                 (not (Stuff to do #2 ))
  10.                 (princ "\nTheres something wrong in #2 try again!")
  11.                 (Stuff to do #2 )
  12.         )
  13.         (if
  14.                 (not (Stuff to do #3 ))
  15.                 (princ "\nTheres something wrong in #3 try again!")
  16.                 (Stuff to do #3 )
  17.         )
  18. ); All arguments are evaluated, the code proceeds
  19. (while somethingisdone ; example: a selection was made and the same must be copied or moved within the while loop
  20.         (progn
  21.                 (while
  22.                         (not (setq pickline (entsel "\nPick a line")))
  23.                         pickline
  24.                         (cond
  25.                                 (   (= 7 (getvar 'errno))
  26.                                         (princ "\nYou must select a line.")
  27.                                 )
  28.                                 (   (null pickline)
  29.                                         (princ "\nYou missed, try again.")
  30.                                 )
  31.                         )
  32.                 ); to exit this loop and continue a line must be picked
  33.                 (We got everything we need from Stuff #1, #2 and #3, now the code does its job... )
  34.         ); the code did its job, exiting with my favourite ESC key, and don't forget the error handling if needed!
  35. )
  36. );if                                       

我做了一个有点复杂的例子,我不确定and函数中的那些“断点”是否会起作用。
 
无论如何,我正在努力向论坛中最好的人学习——每次我觉得我在做80%的代码,剩下的20%我必须得到你们的帮助,因为无论我多么努力,我似乎都不可能找到错误。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:10:50 | 显示全部楼层
这更多的是个人喜好。
 
我的碰巧是:
 
[列表]
  • (initget)->(get)所有用户输入
  • (ssget)带过滤器
  • 做你正在做的事情
    [/列表]
     
    至于错误检查和报告,发生的绝大多数错误
    在开发过程中,要么破坏整个例程,要么做一些非常重要的事情
    显然,这是不可能错过的。
     
    对我来说,另一个优先事项是可读性。我有几十年的习惯。如果有必要的话
    有一天编辑它们,它的格式我可以快速阅读和破译。
     
    (and)测试允许您同时进行多个测试。
     
    例如,ie:
     
    编辑仅为c色的第nnn\u个数字属性
     
    1. [b][color=BLACK]([/color][/b]defun c:ean [b][color=FUCHSIA]([/color][/b]/ n et ns ss i en an ad x et nv c[b][color=FUCHSIA])[/color][/b]
    2. [b][color=FUCHSIA]([/color][/b]initget 7[b][color=FUCHSIA])[/color][/b]
    3. [b][color=FUCHSIA]([/color][/b]setq n [b][color=NAVY]([/color][/b]getint [color=#2f4f4f]"\nATTRIBute Number To Edit:  "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    4. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not c[b][color=MAROON])[/color][/b]
    5.             [b][color=MAROON]([/color][/b]> c 255[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    6.         [b][color=NAVY]([/color][/b]initget 4[b][color=NAVY])[/color][/b]
    7.         [b][color=NAVY]([/color][/b]setq c [b][color=MAROON]([/color][/b]getint [color=#2f4f4f]"\nATTRIBute Color Number:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    8. [b][color=FUCHSIA]([/color][/b]initget 1 [color=#2f4f4f]"Replace Prefix Suffix"[/color][b][color=FUCHSIA])[/color][/b]
    9. [b][color=FUCHSIA]([/color][/b]setq et [b][color=NAVY]([/color][/b]getkword [color=#2f4f4f]"\nEdit Type - Replace Prefix Suffix:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    10. [b][color=FUCHSIA]([/color][/b]cond [b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b]= et [color=#2f4f4f]"Replace"[/color][b][color=MAROON])[/color][/b]
    11.         [b][color=MAROON]([/color][/b]setq ns [b][color=GREEN]([/color][/b]getstring t [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"\nString To Add As ATTRIBute "[/color] [b][color=RED]([/color][/b]itoa n[b][color=RED])[/color][/b] [color=#2f4f4f]":   "[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    12.        [b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b]= et [color=#2f4f4f]"Prefix"[/color][b][color=MAROON])[/color][/b]
    13.         [b][color=MAROON]([/color][/b]setq ns [b][color=GREEN]([/color][/b]getstring t [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"\nPrefix To Add As ATTRIBute "[/color] [b][color=RED]([/color][/b]itoa n[b][color=RED])[/color][/b] [color=#2f4f4f]":   "[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    14.        [b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b]= et [color=#2f4f4f]"Suffix"[/color][b][color=MAROON])[/color][/b]
    15.         [b][color=MAROON]([/color][/b]setq ns [b][color=GREEN]([/color][/b]getstring t [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"\nPrefix To Add As ATTRIBute "[/color] [b][color=RED]([/color][/b]itoa n[b][color=RED])[/color][/b] [color=#2f4f4f]":   "[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    16. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not ss[b][color=NAVY])[/color][/b]
    17.         [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b]
    18.                               [b][color=BLUE]([/color][/b]cons 66 1[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    19. [b][color=FUCHSIA]([/color][/b]setq i 0[b][color=FUCHSIA])[/color][/b]
    20. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    21.         [b][color=NAVY]([/color][/b]setq an [b][color=MAROON]([/color][/b]entnext en[b][color=MAROON])[/color][/b]
    22.               ad [b][color=MAROON]([/color][/b]entget an[b][color=MAROON])[/color][/b]
    23.                x 1[b][color=NAVY])[/color][/b]
    24.         [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]= [color=#2f4f4f]"ATTRIB"[/color] [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 0 ad[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    25.                [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]= x n[b][color=GREEN])[/color][/b]
    26.                     [b][color=GREEN]([/color][/b]= c [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 62 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
    27.                     [b][color=GREEN]([/color][/b]setq nv [b][color=BLUE]([/color][/b]cond [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]= et [color=#2f4f4f]"Replace"[/color][b][color=PURPLE])[/color][/b] ns[b][color=RED])[/color][/b]
    28.                                    [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]= et [color=#2f4f4f]"Prefix"[/color][b][color=PURPLE])[/color][/b]  [b][color=PURPLE]([/color][/b]strcat ns [b][color=TEAL]([/color][/b]cdr [b][color=OLIVE]([/color][/b]assoc 1 ad[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
    29.                                    [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]= et [color=#2f4f4f]"Suffix"[/color][b][color=PURPLE])[/color][/b]  [b][color=PURPLE]([/color][/b]strcat [b][color=TEAL]([/color][/b]cdr [b][color=OLIVE]([/color][/b]assoc 1 ad[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] ns[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
    30.                     [b][color=GREEN]([/color][/b]setq ad [b][color=BLUE]([/color][/b]subst [b][color=RED]([/color][/b]cons 1 nv[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 1 ad[b][color=RED])[/color][/b] ad[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
    31.                     [b][color=GREEN]([/color][/b]entmod ad[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    32.                 [b][color=MAROON]([/color][/b]setq x [b][color=GREEN]([/color][/b]1+ x[b][color=GREEN])[/color][/b]
    33.                      an [b][color=GREEN]([/color][/b]entnext an[b][color=GREEN])[/color][/b]
    34.                      ad [b][color=GREEN]([/color][/b]entget an[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    35.         [b][color=NAVY]([/color][/b]entupd en[b][color=NAVY])[/color][/b]
    36.         [b][color=NAVY]([/color][/b]setq i [b][color=MAROON]([/color][/b]1+ i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    37. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

     
    没有“正确”的方法,只有有效或无效的方法。这就是
    正确配置以处理AutoCAD环境(本地化变量,
    重置系统变量)
     
    HTH-David
     
    -大卫
  • 回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    325
    发表于 2022-7-5 18:16:24 | 显示全部楼层
    是的,我知道。但有时,如果错误不那么明显,则需要切换这些断点。
    除非您是VLIDE用户,并且具有其调试功能的优势。
     
    大卫,
    我一直想知道如何实现这样的语法颜色可读性。
    我已经搜索过了,但我在任何地方都找不到如何通过在语法上应用颜色来增加语法,就像在你的示例中一样。
    回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-5 18:19:34 | 显示全部楼层
    我不使用vlide接口(它直到2000年才出现)
     
    在旧版本中,如果*error*设置为零并且遇到错误,则整个例程将被回调
     
    1. [b][color=BLACK]([/color][/b]defun c:test [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]
    2. [b][color=FUCHSIA]([/color][/b]setq *error* nil[b][color=FUCHSIA])[/color][/b]
    3. [b][color=FUCHSIA]([/color][/b]setq a
    4.    [b][color=NAVY]([/color][/b]setq b
    5.      [b][color=MAROON]([/color][/b]setq c
    6.        [b][color=GREEN]([/color][/b]setq d [b][color=BLUE]([/color][/b]/ 1.0 0[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    7. [b][color=BLACK])[/color][/b]

     
    返回
     
    1. Command: test
    2. error: divide by zero
    3. (/ 1.0 0)
    4. (SETQ D (/ 1.0 0))
    5. (SETQ C (SETQ D (/ 1.0 0)))
    6. (SETQ B (SETQ C (SETQ D (/ 1.0 0))))
    7. (SETQ A (SETQ B (SETQ C (SETQ D (/ 1.0 0)))))
    8. (C:TEST)
    9. *Cancel*

     
    vs 2000及以后:
    1. Command: test
    2. ; error: divide by zero

     
    这就是我从不接受新版本的主要原因之一。
     
    至于着色,大多数原始autolisp括号检查器都是颜色匹配程序。他们是独立的。exe文件。
     
    当Autodesk放弃Compuserve作为其官方论坛并开始自己的基于互联网的论坛时,它只使用html格式。一些独立团体也是如此。
     
    我只是做了一个lisp例程,转换了。lsp文件。htm文件并添加了颜色匹配。使用CADtutor,在消息正文中使用bbc编码。所以我简单地将例程更改为以bbc代码格式输出。
     
    http://www.bbcode.org/reference.php
     
    我主要在这里使用它,因为我觉得它是一个更好的教学工具。我确实使用Ally 3.0程序进行生产工作,在开发例程时进行错误检查和分析。
     
    -大卫
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-12 23:45 , Processed in 0.476012 second(s), 83 queries .

    © 2020-2025 乐筑天下

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