乐筑天下

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

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

[复制链接]

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 20:27:37 | 显示全部楼层 |阅读模式
你好
 
我在网上找到了这个,它很管用。但是输出与工程师/客户所寻找的不同。
 
链测长度打印在“100”、“200”-->“1100”、“1200”等处。
 
我正在寻找链测长度来打印“ch 0+100”,“ch 0+200”-->“ch 1+100”,“ch 1+200”
 
任何帮助都会很好,甚至可以为我指明如何做到这一点的方向。我已经附上了Lisp的工作在这里。
 
 
 
(defun c:CHAINTXT(/)(chaineage\u text))
(defun chaineage_text(/)
(vl load com)
(setq ss(ssget)
计数0
距离100.0
偏移量5
高度2.5
)
(重复(sslength ss)
(setq ent(ssname ss count)
obj(vlax ename->vla object ent)
链测距离
)
(同时)
(setq点1(vlax曲线getPointAtDist obj链测长度))
(setq点2(vlax曲线getPointAtDist obj(+链测长度0.1)))
)
(setq轴承(+(角度点1点2)(/PI 2.0)))
(entmake(附加
((0.LINE)(100.AcDbEntity)(67.0)(410.Model)(8.0)(100.AcDbLine))
(列表(cons 10(极点1方位偏移))
(列表(cons 11(极点1(+方位PI)偏移))
'((210 0.0 0.0 1.0))
)
)
(entmake(附加
“((0。“TEXT”)(100。“AcDbEntity”)(67.0)(410。“Model”)(8.0”)(100。“AcDbText”))
(列表(cons 10(极点1(+轴承PI)(*偏移2.0)))
(列表(cons 40高度))
(列表(cons 1(rtos链测长度2-3)))
(列表(cons 50(+轴承PI)))
“((41.1.0)(51.0.0)(7。“标准”)(71.0)(72.0)(11 0.0 0.0.0)(210 0.0 0.0 1.0)(100。“AcDbText”)(73.0))
)
)
(setq链测长度(+链测距离))
)
(setq计数(1+计数))
)
)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:32:37 | 显示全部楼层
像这样的?
 
  1. (defun c:Test (/ bearing chainage dist ent height obj offset point1
  2.               point2 ss i n
  3.              )
  4. ;; Tharwat 17.12.2014 ;;
  5. (setq dist 100.0
  6.        offset 5
  7.        height 2.5
  8. )
  9. (if (setq ss (ssget '((0 . "LWPOLYLINE,SPLINE"))))
  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.            n 0
  15.      )
  16.      (while
  17.        (and
  18.          (setq point1 (vlax-curve-getPointAtDist obj chainage))
  19.          (setq point2 (vlax-curve-getPointAtDist obj (+ chainage 0.1)))
  20.        )
  21.         (setq bearing (+ (angle point1 point2) (/ pi 2.0)))
  22.         (entmake
  23.           (list '(0 . "LINE")
  24.                 '(8 . "0")
  25.                 (cons 10 (polar point1 bearing offset))
  26.                 (cons 11 (polar point1 (+ bearing pi) offset))
  27.                 '(210 0.0 0.0 1.0)
  28.           )
  29.         )
  30.         (entmake
  31.           (list '(0 . "TEXT")
  32.                 '(8 . "0")
  33.                 (cons 10 (polar point1 (+ bearing pi) (* offset 2.0)))
  34.                 (cons 40 height)
  35.                 (cons 1
  36.                       (strcat "'ch "
  37.                               (if (> chainage 1000.)
  38.                                 (itoa (setq n (1+ n)))
  39.                                 "0"
  40.                               )
  41.                               "+"
  42.                               (rtos chainage 2 3)
  43.                       )
  44.                 )
  45.                 (cons 50 (+ bearing pi))
  46.                 '(41 . 1.0)
  47.                 '(51 . 0.0)
  48.                 '(7 . "Standard")
  49.                 '(71 . 0)
  50.                 '(72 . 0)
  51.                 '(11 0.0 0.0 0.0)
  52.                 '(210 0.0 0.0 1.0)
  53.                 '(73 . 0)
  54.           )
  55.         )
  56.         (setq chainage (+ chainage dist)
  57.         )
  58.      )
  59.    )
  60. )
  61. (princ)
  62. )
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 20:37:58 | 显示全部楼层
谢谢Tharwat,
 
这与我想要的很接近,但每次链测长度大于1000时,我需要“Ch 0+”旁边的“0”来增加,以便打印出来
 
“通道0+500”表示500
 
“通道1+200”用于1200
 
2300的“通道2+300”
 
谢谢你的帮助,这可以引导我得到它。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:40:59 | 显示全部楼层
我修改了上面的程序,尝试一下,然后告诉我。
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 20:42:22 | 显示全部楼层
谢谢Tharwat
 
去那里好的
 
这就是我想要的。我认为,在每次增加1000后,计数将需要重置为=0,因为通道1沿线路每100m链长计数。达到1000后
 
链测长度1000 its Ch 1+000
 
链测长度1100其Ch 2+1100(其中我要查找链测长度1100的“Ch 1+100”)
 
希望有办法做到这一点,否则我可能会要求太多:?
 
再次感谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:48:05 | 显示全部楼层
不够清楚,但请再次尝试修改。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 20:51:52 | 显示全部楼层
嗨,塔瓦,我想是个有礼貌的人?试试ymg的格式化功能。我也借它来做我的电台标签程序
  1. ;;http://www.theswamp.org/index.php?topic=45311.0
  2. ;; rtosta                     by ymg  September 2013                          ;
  3. ;;                                                                            ;
  4. ;; Arguments:   sta Real number to format as a Station                        ;
  5. ;;             unit 1 for Imperials,                                          ;
  6. ;;                  2 for Metrics.                                            ;
  7. ;;             prec Integer for number of decimals                            ;
  8. ;;                                                                            ;
  9. ;; Examples: (rtosta 0 1 0)  -> "0+00"   (rtosta 1328.325 1 2) -> "13+28.33"  ;
  10. ;;           (rtosta 0 2 0)  -> "0+000"  (rtosta 1328.325 2 2) -> "1+328.33"  ;
  11. ;;                                                                            ;
  12. ;; If sta is negative, format is as follow:                                   ;
  13. ;;                                       (rtosta -1328.325 1 2) -> "13-28.33" ;
  14. ;;                                       (rtosta -1328.325 2 2) -> "1-328.33" ;
  15. ;;                                                                            ;
  16. (defun rtosta (sta unit prec / str a b dz)
  17. (setq dz (getvar 'dimzin))
  18. (setvar 'dimzin 0)
  19. (setq str (rtos (abs sta) 2 prec))
  20. (setvar 'dimzin dz)
  21. (while (< (strlen str)
  22.     (if        (= prec 0)
  23.       (+ unit 2)
  24.       (+ prec (+ unit 3))
  25.       ) ;_ end of if
  26.     ) ;_ end of <
  27.    (setq str (strcat "0" str))
  28.    ) ;_ end of while
  29. (setq        a (if (= prec 0)
  30.     (- (strlen str) unit)
  31.     (- (strlen str) prec (+ unit 1))
  32.     ) ;_ end of if
  33. b (substr str 1 (- a 1))
  34. a (substr str a)
  35. ) ;_ end of setq
  36. (strcat b
  37.   (if (minusp sta)
  38.     "-"
  39.     "+"
  40.     ) ;_ end of if
  41.   a
  42.   ) ;_ end of strcat
  43. ) ;_ end of defun
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 20:54:42 | 显示全部楼层
212742ruhyk3r6h3sn466b.jpg
 
理想情况下,它的工作原理类似于将白色文本从行中偏移。红色是原来的Lisp程序,绿色是你帮助我的。
 
如果我能得到这个,这将是一个很大的帮助,我的许多项目的工作
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 20:58:43 | 显示全部楼层
请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 21:00:46 | 显示全部楼层
 
嗨,韩,是的。。。你可能是对的,而我实际上是个机械人
 
 
@OP.如果这个数字大于2000,会怎样?它应该是什么样子?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 09:14 , Processed in 0.567493 second(s), 74 queries .

© 2020-2025 乐筑天下

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