明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 177|回复: 7

求助帮忙看看为啥运行不起

[复制链接]
发表于 昨天 20:55 | 显示全部楼层 |阅读模式
本帖最后由 duhan6401 于 2024-10-21 22:10 编辑

我自己写了一个小程序,但是里面的循环一直不能正常运行下去,看哪个地方有问题了。附件里面的txt文件是要读取的数据,CAD是多段线,主要内容是想根据txt里面的第二列桩号数据,依次从对应的进口和出口处打断后偏移

  • (defun c:hlkx (  /  )
  •   ;l jzwjkzh jzwckzh oldstartpt oldendpt newstartpt newendpt jzwmcwz  jzwmcwzpt0);;;根据桩号画外轮廓线
  •   (vl-load-com)
  •   (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") '(70 . 0) '(6 . "CENTER") (cons 2 "建筑物轮廓线") (cons 62 3)))
  •   (setq f (getfiled"选择文件""""txt"2));定义数据文件路径
  •   (setq ff (open f "r"));读取模式打开文件
  •   (setq s (read-line ff));读取第一行
  •   (while s ;这行非空
  •     (setq ss (cons s ss));循环写入列表
  •     (setq s (read-line ff));循环读取下一行
  •   )
  •   (close ff);关闭文件
  •   (setq jzwjcksj (reverse ss));读取到的字符表逆序
  •   (setq jzwjcksj
  •     (mapcar
  •       '(lambda (x)
  •          (read (strcat "(" (vl-string-translate "," " " x) ")"))
  •        )
  •       jzwjcksj
  •     )
  •   )
  •   (setq en (car(entsel "\n选择渠道轴线:")))
  •   (setq ptlst  (vl-remove-if-not   '(lambda (x)    (member (car x) '(100 0 8 90 42 10)) )(entget en)  )   )
  •   (setq i 0  )
  •   (repeat  (length jzwjcksj) ;循环次数
  •     (setq jzwjkzh (cadr (nth i jzwjcksj)));取得第一个列表元素
  •     (setq jzwckzh (cadr (nth (+ 1 i) jzwjcksj)))
  •     (setq jzwmcwz (vl-princ-to-string(car (nth (+ 1 i) jzwjcksj))));建筑物名称
  •      (setq oldstartpt (vlax-curve-getStartPoint en ))
  •     (setq oldendpt (vlax-curve-getendPoint en ))
  •     (setq newstartpt (vlax-curve-getPointAtDist en  jzwjkzh))
  •     (setq newendpt (vlax-curve-getPointAtDist en  jzwckzh))
  •     (setq jzwmcwzpt0 (vlax-curve-getPointAtDist en (* 0.5 ( +  jzwjkzh jzwckzh))))
  •     (setq l (/  (nth 5 (nth (+ 1 i) jzwjcksj)) 2 )  )
  •     (if (< l 2 )(setq l 2))
  •     (setq jzwmcwzpt (polar jzwmcwzpt0 (+ ( angle jzwmcwzpt0  (mapcar'+(vlax-curve-getfirstDeriv en (vlax-curve-getParamAtPoint en jzwmcwzpt0)) jzwmcwzpt0))(* pi 0.5)) (+ 0.3 l)))
  •     (entmake (append (list (cons 0 "TEXT");;;类型
  •                        (cons 7 "HZ1");;;样式
  •                        (cons 1 jzwmcwz );;;内容
  •                        (cons 8 "建筑物桩号及名称") ;;;图层
  •                        (cons 40 (* 1000 0.04));;;文字高度
  •                        (cons 41 0.6);;;宽度比例
  •                        (cons 11 jzwmcwzpt) ;;;文字插入点坐标
  •                        (cons 10 jzwmcwzpt)
  •                        (cons 72 1)
  •                        (cons 73 1)
  •                        (cons  50 ( angle jzwmcwzpt0  (mapcar'+(vlax-curve-getfirstDeriv en (vlax-curve-getParamAtPoint en jzwmcwzpt0)) jzwmcwzpt0)))
  •                      )
  •              )
  •     )
  •     (vl-cmdf "break" en "f" oldstartpt newstartpt )
  •     (vl-cmdf "break" en "f" oldendpt newendpt )
  •     (command "LAYER" "s" "建筑物轮廓线" "")
  •     (command "offset" "e" "y" "l" "c" "t" "")
  •     (command "offset" l  en  "b" "");l为偏移距离,隧洞半径,渡槽一半
  •     (entmake ptlst )
  •     (setq en (entlast))
  •     (setq i (+ i 2))
  •   )
  • )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 昨天 22:08 | 显示全部楼层
楼主应该详细讲解程序的功能.
文本有7列,看不懂要干嘛.
程序下面这一行的"bl"未赋值
(cons 40 (* bl 0.04));;;文字高度
 楼主| 发表于 昨天 22:15 | 显示全部楼层
tigcat 发表于 2024-10-21 22:08
楼主应该详细讲解程序的功能.
文本有7列,看不懂要干嘛.
程序下面这一行的"bl"未赋值

文本中的第二列是桩号,第六列是是要偏移的宽度,是这个插件中用到的数字,第一行第二列桩号为起点第二行第二列桩号为终点,将轴线从这两个点断开后以第六列的数字作为宽度进行偏移,再重新生成一个新的轴线后,以第三行第二列桩号为起点,第四行第二列桩号为终点,将轴线再从这两个点断开后以第四行第六列的数字作为宽度进行偏移,这样一直循环到终点
发表于 9 小时前 | 显示全部楼层
本帖最后由 飞雪神光 于 2024-10-22 09:30 编辑

  1. (command "offset" l  en  "b" "")

这一句 我在07和21上都没有看到  "b" 的命令流

还有最后i是+2递增的 repeat次数就要除以2

这个是不使用command命令的 速度要快一点

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 6 小时前 | 显示全部楼层
本帖最后由 飞雪神光 于 2024-10-22 11:51 编辑

还是有点瑕疵
 楼主| 发表于 2 小时前 | 显示全部楼层
飞雪神光 发表于 2024-10-22 08:42
这一句 我在07和21上都没有看到  "b" 的命令流

还有最后i是+2递增的 repeat次数就要除以2

这个命令流是浩辰里面的
 楼主| 发表于 2 小时前 | 显示全部楼层
本帖最后由 duhan6401 于 2024-10-22 16:24 编辑

是哪个地方有问题循环不下去呢?给点指点呢.你编译的这个文件在浩辰里面加载不上。加载了就要崩溃。
发表于 1 小时前 | 显示全部楼层
1.未设置局部变量 尤其是变量ss
2.i是+2递增的 所以repeat次数要除以2 这也是循环不下去的主要原因
3. (setq l (/ (nth 5 (nth (+ 1 i) jzwjcksj)) 2.)) ;除数应该是实数
4.在 "家晚隧洞" "马草渡槽" 之间本来应该是 "余家隧洞" 但大概率会变成 "乐宜分水"
  1. 也就是 (read (strcat "(" (vl-string-translate "," " " "余家隧洞 46748.8 436.543 余家隧洞出口 432.585 2.8 FALSE ") ")"))->(乐宜分水 46748.8 436.543 余家隧洞出口 432.585 2.8 FALSE)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-22 18:34 , Processed in 0.164443 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表