乐筑天下

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

[编程交流] Lisp问题。对Lis来说非常陌生

[复制链接]

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 21:03:00 | 显示全部楼层
是的,我是一个有礼貌的人,非常感谢大家的帮助。
 
如果大于2000,则读数为“ch 2+000”,如果大于3000,则读数为“2+100”,“ch 3+000”和“ch 3+100”
 
我从一个电子专业的背景中学习了一点编程,还有一些是如何在民用领域工作的。也不知道lisp会怎么做。
 
你为帮助我添加的if语句很好,但如果我能将计数恢复到“0”,并希望在每次计数超过999时增加Ch#+。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 21:08:59 | 显示全部楼层
我认为这一个应该是你所要求的,试试看,让我知道。
 
  1. (defun c:Test (/ bearing chainage dist ent height obj offset point1
  2.               point2 ss i
  3.              )
  4. ;;        Tharwat 17.Dec.2014                ;;
  5. (setq dist 100.0
  6.        offset 5
  7.        height 2.5
  8. )
  9. (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  10.    (repeat (setq i (sslength ss))
  11.      (setq ent      (ssname ss (setq i (1- i)))
  12.            obj      (vlax-ename->vla-object ent)
  13.            chainage dist
  14.      )
  15.      (while
  16.        (and
  17.          (setq point1 (vlax-curve-getPointAtDist obj chainage))
  18.          (setq point2 (vlax-curve-getPointAtDist obj (+ chainage 0.1)))
  19.        )
  20.         (setq bearing (+ (angle point1 point2) (/ pi 2.0)))
  21.         (entmake
  22.           (list '(0 . "LINE")
  23.                 '(8 . "0")
  24.                 (cons 10 (polar point1 bearing offset))
  25.                 (cons 11 (polar point1 (+ bearing pi) offset))
  26.                 '(210 0.0 0.0 1.0)
  27.           )
  28.         )
  29.         (entmake
  30.           (list
  31.             '(0 . "TEXT")
  32.             '(8 . "0")
  33.             (cons 10 (polar point1 (+ bearing pi) (* offset 2.0)))
  34.             (cons 40 height)
  35.             (cons
  36.               1
  37.               (strcat "'ch "
  38.                       (if (>= chainage 1000.)
  39.                         (strcat (substr (rtos chainage 2 3) 1 1)
  40.                                 "+"
  41.                                 (substr (rtos chainage 2 3) 2)
  42.                         )
  43.                         (strcat "0"
  44.                                 "+"
  45.                                 (rtos chainage 2 3)
  46.                         )
  47.                       )
  48.               )
  49.             )
  50.             (cons 50 (+ bearing pi))
  51.             '(41 . 1.0)
  52.             '(51 . 0.0)
  53.             '(7 . "Standard")
  54.             '(71 . 0)
  55.             '(72 . 0)
  56.             '(11 0.0 0.0 0.0)
  57.             '(210 0.0 0.0 1.0)
  58.             '(73 . 0)
  59.           )
  60.         )
  61.         (setq chainage (+ chainage dist)
  62.         )
  63.      )
  64.    )
  65. )
  66. (princ)
  67. )
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 21:13:33 | 显示全部楼层
太棒了Tharwat。
 
很抱歉拖了这么久。这是我第一次找这样的东西。希望能在将来帮助别人。
 
再次感谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 21:15:49 | 显示全部楼层
 
太好了,听到这个我很高兴
 
随时欢迎你。
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 21:19:12 | 显示全部楼层
我有一个障碍,当给定直线上的距离大于“10000”时,它打印例如13200,它打印“ch 1+3200”,而不是“ch 13+200”
 
我会努力解决这个问题。正如我所说,我正在努力自学。我知道这是一个公式问题,如果我有困难,我会回来的
 
再次感谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 21:23:09 | 显示全部楼层
 
抱歉给你带来了困惑。
 
玩一下这个修改过的程序,让我知道。
 
  1. (defun c:Test (/ _output:value bearing chainage dist ent height obj
  2.               offset point1 point2 ss i
  3.              )
  4. ;;        Tharwat 17.Dec.2014                ;;
  5. (setq dist 100.0
  6.        offset 5
  7.        height 2.5
  8. )
  9. (defun _output:value (v / s)
  10.    (if (eq v 1000.)
  11.      (strcat (substr (rtos v 2 3) 1 1)
  12.              "+"
  13.              (substr (rtos v 2 3) 2)
  14.      )
  15.      (strcat (substr (setq s (rtos v 2 3)) 1 (- (strlen s) 3))
  16.              "+"
  17.              (substr (rtos v 2 3) (- (strlen s) 2))
  18.      )
  19.    )
  20. )
  21. (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  22.    (repeat (setq i (sslength ss))
  23.      (setq ent      (ssname ss (setq i (1- i)))
  24.            obj      (vlax-ename->vla-object ent)
  25.            chainage dist
  26.      )
  27.      (while
  28.        (and
  29.          (setq point1 (vlax-curve-getPointAtDist obj chainage))
  30.          (setq point2 (vlax-curve-getPointAtDist obj (+ chainage 0.1)))
  31.        )
  32.         (setq bearing (+ (angle point1 point2) (/ pi 2.0)))
  33.         (entmake
  34.           (list '(0 . "LINE")
  35.                 '(8 . "0")
  36.                 (cons 10 (polar point1 bearing offset))
  37.                 (cons 11 (polar point1 (+ bearing pi) offset))
  38.                 '(210 0.0 0.0 1.0)
  39.           )
  40.         )
  41.         (entmake
  42.           (list
  43.             '(0 . "TEXT")
  44.             '(8 . "0")
  45.             (cons 10 (polar point1 (+ bearing pi) (* offset 2.0)))
  46.             (cons 40 height)
  47.             (cons
  48.               1
  49.               (strcat "'ch "
  50.                       (cond ((< chainage 1000.)
  51.                              (strcat
  52.                                "0"
  53.                                "+"
  54.                                (rtos chainage 2 3)
  55.                              )
  56.                             )
  57.                             (t (_output:value chainage))
  58.                       )
  59.               )
  60.             )
  61.             (cons 50 (+ bearing pi))
  62.             '(41 . 1.0)
  63.             '(51 . 0.0)
  64.             '(7 . "Standard")
  65.             '(71 . 0)
  66.             '(72 . 0)
  67.             '(11 0.0 0.0 0.0)
  68.             '(210 0.0 0.0 1.0)
  69.             '(73 . 0)
  70.           )
  71.         )
  72.         (setq chainage (+ chainage dist)
  73.         )
  74.      )
  75.    )
  76. )
  77. (princ)
  78. )
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 21:27:01 | 显示全部楼层
 
............................
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 21:30:59 | 显示全部楼层
嗨,德怀弗,你明白超级主持人的意思吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 09:23 , Processed in 0.897811 second(s), 66 queries .

© 2020-2025 乐筑天下

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