找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3401|回复: 15

[已解决] 求一次性输入多条多线的等分点坐标

[复制链接]
发表于 2014-1-11 21:04:11 | 显示全部楼层 |阅读模式
悬赏100D豆已解决
本帖最后由 清风明月10 于 2014-1-11 21:05 编辑

请高手帮助写一个代码。
我希望一次性取得这些多线的等分点坐标,等分距为固定的0.1m。输入到CSV格式文件中,每条多线编号,例如L1、L2、L3....Ln。输出格式为:线的编号占一列,X占一列,Y占一列。用晓东函数库或学院派函数库均可。
那些多段线是不能打断的,只是提取等分点坐标。
下面是DWG文件,内中有数条多线,以测试代码。
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:求多条等分线等分的代码.rar 
下载次数:10  文件大小:60.19 KB 
下载权限: 不限 以上  [免费赚D豆]





最佳答案

查看完整内容

我感觉楼主有能力自己完成这个,每条线按给定间距进行getpointatdist 有了一条线的处理办法,一次选几根和几十根没本质区别 如何在曲线上将定数等分的点或者定距等分的点找出来 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=108865&fromuid=202795
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2014-1-11 21:04:12 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-1-11 22:32 编辑

我感觉楼主有能力自己完成这个,每条线按给定间距进行getpointatdist

有了一条线的处理办法,一次选几根和几十根没本质区别

如何在曲线上将定数等分的点或者定距等分的点找出来
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=108865&fromuid=202795

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-1-11 21:13:10 | 显示全部楼层
最好直接把图截取贴上来,看图直观,免得还下载。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-12 17:26:36 | 显示全部楼层
单根线的等距点,末尾点不足等距时进行了补充,楼主没有说明这个情况
  1. (defun Polyline:DivPnts        (e / dis lst pts tf)
  2.   (setq        dis  (cadr (xdrx_getarea e))
  3.         dis1 (XD::Math:Round dis 0.1)
  4.         tf   (equal dis dis1 1e-6)
  5.         lst  (XD::Geom:NumDiv dis 0. (fix (/ dis 0.1)))
  6.   )
  7.   (setq        pts (mapcar '(lambda (x)
  8.                        (xdrx_curve_getpointatdist e x)
  9.                      )
  10.                     lst
  11.             )
  12.   )
  13.   (if (not tf)
  14.     (reverse (cons (xdrx_curve_getendpoint e) (reverse pts)))
  15.     pts
  16.   )
  17. )

点评

代码里面有一个“0.”,是不是少了一个“1”字?  详情 回复 发表于 2014-1-13 09:04
谢谢  发表于 2014-1-13 08:59

评分

参与人数 1D豆 +5 收起 理由
清风明月10 + 5 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-1-13 09:04:18 | 显示全部楼层
本帖最后由 清风明月10 于 2014-1-13 09:05 编辑
st788796 发表于 2014-1-12 17:26
单根线的等距点,末尾点不足等距时进行了补充,楼主没有说明这个情况

代码里面有一个“0.”,是不是少了一个“1”字?
再者,建议老师写一个完整可操作的,这只是自定义函数,别人不好用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-13 09:44:45 | 显示全部楼层
本帖最后由 st788796 于 2014-1-13 09:54 编辑
清风明月10 发表于 2014-1-13 09:04
代码里面有一个“0.”,是不是少了一个“1”字?
再者,建议老师写一个完整可操作的,这只是自定义函数 ...

还需要麻烦呀!?
贴个输出的样例吧, 如果末尾端点不足等距时如果处理

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-1-13 10:10:44 | 显示全部楼层
一楼有试验的样本啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-13 10:27:59 | 显示全部楼层
清风明月10 发表于 2014-1-13 10:10
一楼有试验的样本啊

输出文件啥样子,截个图贴上来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-1-13 17:50:44 | 显示全部楼层
D:\Backup\我的文档\QQ截图20121026175049.jpg QQ截图20121026175049.jpg

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-13 21:27:09 | 显示全部楼层
  1. (defun Polyline:DivByDist (e dis / Len lst pts n tf)
  2.   (setq        Len (cadr (xdrx_getarea e))
  3.         n   (/ Len dis)
  4.         lst (XD::Geom:NumDiv Len 0. (fix n))
  5.         tf  (eq n (fix n))
  6.         pts (mapcar '(lambda (x)
  7.                        (XD::Pnt:CutZ (xdrx_curve_getpointatdist e x))
  8.                      )
  9.                     lst
  10.             )
  11.   )
  12.   (if tf
  13.     pts
  14.     (reverse (cons (XD::Pnt:CutZ (xdrx_curve_getendpoint e))
  15.                    (reverse pts)
  16.              )
  17.     )
  18.   )
  19. )
  20. (defun c:tt (/ ss dis i pts fl)
  21.   (if (and (setq ss (ssget '((0 . "*Polyline"))))
  22.            (setq dis (getdist "\n等分距离: "))
  23.       )
  24.     (progn
  25.       (setq i        0
  26.             pts        (mapcar
  27.                   '(lambda (x)
  28.                      (setq i (1+ i))
  29.                      (mapcar
  30.                        '(lambda        (a)
  31.                           (xdrx_string_join
  32.                             (cons (strcat "L" (itoa i))
  33.                                   (mapcar '(lambda (b) (rtos b 2 3)) a)
  34.                             )
  35.                             "\t"
  36.                           )
  37.                         )
  38.                        (Polyline:DivByDist x dis)
  39.                      )
  40.                    )
  41.                   (xdrx_pickset->ents ss)
  42.                 )
  43.       )
  44.       (setq fl (open "d:\\test.csv" "w"))
  45.       (write-line "多线编号\tX坐标\tY坐标" fl)
  46.       (mapcar '(lambda (x)
  47.                  (write-line (xdrx_string_join x "\t") fl)
  48.                )
  49.               (apply 'append pts)
  50.       )
  51.       (close fl)
  52.       (princ "\nD:\\test.csv is Ok!")
  53.     )
  54.   )
  55.   (princ)
  56. )

点评

他们 说CSV有行数限制,这种说法对吗?就是说CSV到底可以放多少行?我的数据有几十万行  发表于 2014-1-14 08:35

评分

参与人数 1D豆 +5 收起 理由
清风明月10 + 5 有始有终奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-14 09:21:09 | 显示全部楼层
本帖最后由 st788796 于 2014-1-14 09:23 编辑

什么是CSV?
CSV(逗号分隔值)格式是最常见的数据库和电子表格导入和导出格式。

什么是Excel?
微软Excel是由微软开发的用于电子表格处理的应用程序,XLS文件是Excel的文件存储格式。我们通常说Excel格式指的就是XLS格式。

CSV格式比Excel格式具备的优势:
  • 1)CSV是纯文本文件,支持追加模式写入,节省内存。Excel是结构复杂的二进制文件,只支持一次性写入,较费内存。
  • 2)CSV的文件行数没有限制,在实际项目中我们已输出过上千万行的CSV文件;32位系统下Excel单个Sheet最多支持65535行。
  • 3)CSV是纯文本文件,可以使用任何文本编辑器进行编辑,因此可以在Linux终端下对其进行修改。Excel是二进制文件,目前已知的编辑工具有Office,OpenOffice,WPS,都为GUI工具,不支持在终端下编辑。


excel  2003  =2^16 = 65 536  
excel  2007  = 2^20 = 1048576

0.jpg
其实没有csv最大行数的限制,只是说excel打开的话,只能显示如上数据,多了就不显示。

EXCEL 2003 最大列数是    256列(IV列)最大行数为65536行
EXCEL 2007 最大列数是16384列              最大行数为1048576行

csv文件,你可以使用记事本或者editplus或者notepad++打开,数据还是有的。csv文件就是一批字符串加上换行符做成的。










Љ

评分

参与人数 1D豆 +5 收起 理由
清风明月10 + 5 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2015-3-10 11:40:53 | 显示全部楼层
将线段按照你的需要等分后,然后通过多线段将刚才等分的各点连起来,使用list命令—回车,即可显示等分点坐标。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2015-3-27 19:34:42 | 显示全部楼层
来看一看,学习一下,,,#在这里快速回复#
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2015-10-17 09:49:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 18:03 , Processed in 0.461000 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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