乐筑天下

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

[编程交流] 关于VisualLISP调试/vie

[复制链接]

10

主题

39

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 22:29:31 | 显示全部楼层 |阅读模式
大家好,
 
我想知道这是否可能(或者可能太简单了,我没有看到):
 
我有一些LISP代码,上面有一个WHILE循环,在这个循环过程中,一个接一个地在图形中创建了许多对象(比如说圆)。然而,当我一步一步地运行程序来检查它时,我必须等到程序再次进入while循环后,对象才会显示在屏幕上。
 
有没有什么方法可以在我遍历创建对象的代码行时一个一个地显示这些对象?
 
我希望我说得有道理
 
干杯
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 22:40:49 | 显示全部楼层
您可能需要发布代码,以便我们为您检查
回复

使用道具 举报

10

主题

39

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 22:51:50 | 显示全部楼层
看看我上周末做的这个例子,它现在运行得很好,但如果在一步一步地运行程序时,我可以看到在FOREACH循环中创建的每个偏移对象,而不必等到它返回到WHILE,因为这时屏幕上突然出现了一堆对象,很难识别它们,这会有很大帮助。
 
  1. ;Alfredo Rodriguez, 18 May 2014
  2. ;This will offset an object multiple times
  3. ;It will offset to the inside/outside, up/down, left/right depending on the drawing direction
  4. ;So it's better to always set a maximum number of offsets or else it could offset indefinitely
  5. ;For this reason, if use default is chosen, it will offset the object 20 times, or you can
  6. ;choose how many times to offset. If object is offset to the wrong side, enter a negative distance (ej: -3 instead of 3)
  7. ;I'm not a lisp professional, so I can't guaranty any results obtained with this code, so use with care.
  8. (defun c:cntoffset (/ ename dist vobj obj objlist objlist2 how_many count maxcount)
  9. (vl-load-com)
  10.        (null (initget 7))
  11.        (while (setq ent (ssget))
  12.            (setq dist (getdist "\nEnter offset distance: "))
  13.            (setq how_many (sslength ent))
  14.            (setq count 0)
  15.       
  16.             (or
  17.            (setq maxcount (getdist "\nEnter number of offsets (or press Enter to use default): "))
  18.            (setq maxcount 20)
  19.            )
  20.            
  21.            (while (/= count how_many)
  22.                (setq ename (ssname ent count))
  23.                (setq obj (list (vlax-ename->vla-object ename)))
  24.                  (setq objlist (append obj objlist))
  25.                (setq count (+ count 1))
  26.            )
  27.            (setq count 0)
  28.            (while (and (/= count maxcount) (/= objlist nil))
  29.                (setq count (+ count 1))
  30.                (foreach vobj objlist
  31.                    (if (vlax-method-applicable-p vobj "Offset")
  32.                        (if (vl-catch-all-error-p
  33.                            (setq objlist2 (vl-catch-all-apply 'vlax-invoke
  34.                            (list vobj 'Offset (- dist)))))
  35.                            (setq objlist2 nil)
  36.                        )
  37.                    (prompt "\n*** Can not offset that object, try again. ***")
  38.                    )
  39.                    (setq objlist (append (cdr objlist) objlist2))
  40.                )
  41.       
  42.            )
  43.              (setq objlist nil)
  44.              (setq objlist2 nil)
  45.        )
  46.    (princ)
  47. )

 
任何帮助都将不胜感激
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:57:35 | 显示全部楼层
单向
  1. (defun c:demo (/ N PT R X)
  2. (setq        n  5
  3. pt '(0.0 0.0)
  4. r  5.
  5. )
  6. (while (> n 0)
  7.    (entmake
  8.      (list
  9. '(0 . "CIRCLE")
  10. (cons 10 pt)
  11. (cons 40 r)
  12.      )
  13.    )
  14.    (setq pt (mapcar '(lambda (x) (+ x 3)) pt))
  15.    (alert "\nJust for testing!!!")
  16.    (setq n (1- n))
  17. )
  18. (princ)
  19. )

 
HTH公司
亨里克
回复

使用道具 举报

10

主题

39

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 23:06:27 | 显示全部楼层
你好
谢谢hmsilva,它确实可以处理您提供的代码,但我尝试将这一行放在代码的不同位置,但无法以相同的方式工作。有什么想法吗?我正在你回答之前发布的代码中尝试。
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:07:54 | 显示全部楼层
 
不客气,克莱特罗!
尝试
(未经测试)
  1. ;Alfredo Rodriguez, 18 May 2014
  2. ;This will offset an object multiple times
  3. ;It will offset to the inside/outside, up/down, left/right depending on the drawing direction
  4. ;So it's better to always set a maximum number of offsets or else it could offset indefinitely
  5. ;For this reason, if use default is chosen, it will offset the object 20 times, or you can
  6. ;choose how many times to offset. If object is offset to the wrong side, enter a negative distance (ej: -3 instead of 3)
  7. ;I'm not a lisp professional, so I can't guaranty any results obtained with this code, so use with care.
  8. (defun c:cntoffset (/ ename dist vobj obj objlist objlist2 how_many count maxcount)
  9. (vl-load-com)
  10.        (null (initget 7))
  11.        (while (setq ent (ssget))
  12.            (setq dist (getdist "\nEnter offset distance: "))
  13.            (setq how_many (sslength ent))
  14.            (setq count 0)
  15.       
  16.             (or
  17.            (setq maxcount (getdist "\nEnter number of offsets (or press Enter to use default): "))
  18.            (setq maxcount 20)
  19.            )
  20.            
  21.            (while (/= count how_many)
  22.                (setq ename (ssname ent count))
  23.                (setq obj (list (vlax-ename->vla-object ename)))
  24.                  (setq objlist (append obj objlist))
  25.                (setq count (+ count 1))
  26.            )
  27.            (setq count 0)
  28.            (while (and (/= count maxcount) (/= objlist nil))
  29.                (setq count (+ count 1))
  30.                (foreach vobj objlist
  31.                    (if (vlax-method-applicable-p vobj "Offset")
  32.               (progn
  33.                     (alert "\nJust for testing!!!")
  34.                        (if (vl-catch-all-error-p
  35.                            (setq objlist2 (vl-catch-all-apply 'vlax-invoke
  36.                            (list vobj 'Offset (- dist)))))
  37.                            (setq objlist2 nil)
  38.                        )
  39.                    (prompt "\n*** Can not offset that object, try again. ***")
  40.                    )
  41.               )
  42.                    (setq objlist (append (cdr objlist) objlist2))
  43.                )
  44.       
  45.            )
  46.              (setq objlist nil)
  47.              (setq objlist2 nil)
  48.        )
  49.    (princ)
  50. )

 
HTH公司
亨里克
回复

使用道具 举报

10

主题

39

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 23:16:43 | 显示全部楼层
成功了!!
 
不确定这是怎么回事,但确实如此。
 
非常感谢您的帮助!!:拇指支撑:
 
祝你今天愉快
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:22:59 | 显示全部楼层
不客气,克莱特罗
很高兴我能帮忙
 
亨里克
回复

使用道具 举报

10

主题

39

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 23:32:19 | 显示全部楼层
只是一个更新,以防对任何人有所帮助,在创建对象后插入这一行似乎也可行:
  1. (vla-update (vlax-ename->vla-object (entlast)))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:11 , Processed in 0.354956 second(s), 70 queries .

© 2020-2025 乐筑天下

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