找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3748|回复: 27

[求助] 根据z值连接多段线的代码

[复制链接]

已领礼包: 720个

财富等级: 财运亨通

发表于 2014-9-12 13:37:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
我写了一个简单的根据z值连接多段线的代码,思路:先根据选择的两条线的z值判断来确定是否连接,如果z值相同就实现连接并拟合连接后的线,如果z值不等,就重新选择,可是代码实现的是:z值相等连接并拟合成同一条线,z值不等时,两条线只连接,不拟合,也不是一条线 是三段不同的线。望各位老师给予帮助。
这段代码还有一个缺点就是,能不能根据两条线的相邻顶点进行连接,如果多段线的起始方向不合理,连接就不合理了。
学生在此感谢各位老师给予指导,谢谢。
一下是代码:
(Defun C:cjlj (/ Ss1 ss2 Pt1 Pt2 p1 p2)
(vl-load-com)
  (Setvar "Cmdecho" 0)
    (Setq Pt1 (Getvar "Vsmin"))
    (Setq Pt2 (Getvar "Vsmax"))
    (Setq Ss1 (Entsel "\n 选择1线:"))
    (Setq Ss2 (Entsel "\n 选择2线:"))
    (Setq p1 (vlax-curve-getendpoint (car ss1)))
    (Setq p2 (vlax-curve-getstartpoint (car ss2)))
    (setq Z1(car(assoc 38 (entget (car ss1)))))
    (setq Z2(car(assoc 38 (entget (car ss2)))))
(if (= z1 z2)
(progn
(Vl-Cmdf "line" p1 p2 "")
(Vl-Cmdf ".Pedit" Ss1 "Yes" "J" "C" Pt1 Pt2 "" "" )
(Vl-Cmdf ".Pedit" Ss1 "Yes" "s" Pt1 Pt2 "" "")
)
)
(Setvar "Cmdecho" 1)
(Princ)
)
我是个初学者 各位老师 见笑了  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 720个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 720个

财富等级: 财运亨通

 楼主| 发表于 2014-9-12 14:06:45 | 显示全部楼层

                               
登录/注册后可看大图


如图 就是将z值相等的线连接起来,并拟合  如果z值不同时 请重新选择,如果能通过判断线的z值  批量连接最好 谢谢老师
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-12 17:29:10 | 显示全部楼层
  1. (defun c:tt (/ ss lst)
  2.   (defun Pnts:NearestPts (pts / ptl pl)
  3.     (while (> (length pts) 1)
  4.       (setq pl
  5.              (car (vl-sort
  6.                     (mapcar '(lambda (x)
  7.                                (list (distance (car pts) x) (car pts) x)
  8.                              )
  9.                             (cdr pts)
  10.                     )
  11.                     '(lambda (x1 x2)
  12.                        (< (car x1) (car x2))
  13.                      )
  14.                   )
  15.              )
  16.       )
  17.       (if ptl
  18.         (if (< (car pl) (car ptl))
  19.           (setq ptl pl)
  20.         )
  21.         (setq ptl pl)
  22.       )
  23.       (setq pts (cdr pts))
  24.     )
  25.     (cdr ptl)
  26.   )
  27.   (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  28.     (progn
  29.       (setq lst        (mapcar        '(lambda (x)
  30.                            (list (xdrx_getpropertyvalue x "Elevation")
  31.                                  x
  32.                            )
  33.                          )
  34.                         (xdrx_pickset->ents ss)
  35.                 )
  36.             lst        (mapcar        'cdr
  37.                         (vl-remove-if
  38.                           '(lambda (a) (/= (length a) 3))
  39.                           (XD::List:GroupByIndex lst 1e-3)
  40.                         )
  41.                 )
  42.       )
  43.       (mapcar '(lambda (x / ptl)
  44.                  (setq
  45.                    ptl (Pnts:NearestPts
  46.                          (append (mapcar 'xdrx_curve_getstartpoint x)
  47.                                  (mapcar 'xdrx_curve_getendpoint x)
  48.                          )
  49.                        )
  50.                  )
  51.                  (setq pl (apply 'xdrx_polyline_make ptl))
  52.                  (xdrx_curve_join (car x) pl)
  53.                  (xdrx_curve_join (car x) (cadr x))
  54.                )
  55.               lst
  56.       )
  57.     )
  58.   )
  59.   (princ)
  60. )

点评

应该加点标注。数括号数得累死人  详情 回复 发表于 2014-9-16 09:39
我在一楼的那段代码 连接后 拟合 z值是不变的,线的属性也在,线的图层也不变。利用你这个批量连接 拟合后 线的属性不在了,z值归0,各条线都跑到0图层上了  详情 回复 发表于 2014-9-14 11:06
谢谢元老回复 可是不是源代码,里面有好多函数 没见过 谢谢 研究一下你的思路 谢谢了  详情 回复 发表于 2014-9-12 22:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 720个

财富等级: 财运亨通

 楼主| 发表于 2014-9-12 22:03:24 | 显示全部楼层

谢谢元老回复  可是不是源代码,里面有好多函数 没见过  谢谢  研究一下你的思路  谢谢了

点评

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-9-12 22:29:26 | 显示全部楼层
杜流浪人 发表于 2014-9-12 22:03
谢谢元老回复  可是不是源代码,里面有好多函数 没见过  谢谢  研究一下你的思路  谢谢了

需要加载晓东API

点评

谢谢 我知道 其中有好多函数 不知道什么意思 呵呵 最基本的lisp还没搞懂呢 还搞不了xd函数那么高深的  详情 回复 发表于 2014-9-12 23:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 720个

财富等级: 财运亨通

 楼主| 发表于 2014-9-12 23:04:49 | 显示全部楼层
lucas3 发表于 2014-9-12 22:29
需要加载晓东API

谢谢  我知道  其中有好多函数 不知道什么意思  呵呵   最基本的lisp还没搞懂呢  还搞不了xd函数那么高深的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-13 09:23:50 | 显示全部楼层
1 框选 Pline,
2 构造 (Z值 实体) 表,
3 对表按 Z 值分组(XD::List:GroupByIndex),
4 对分组后的表剔除不是两个Pline的子表
5 遍历构造的表
     构造两个实体的起点、终点点表,四个点
     在点表中找最近点 (Pnts:NearestPts)
     最近的两个点绘制 pline (可以判断是非重合)
     对新生成 pline 和原来两个 pline 进行Join(也可以 Pedit 连接)

点评

谢谢 元老了 线连接了 没有拟合这一个,我加载了晓东api 功能太强了 以后也慢慢学习这个算了 呵呵  详情 回复 发表于 2014-9-13 11:42
谢谢 元老的思路解析 谢谢 你那个代码 有一个自定义函数 这个自定义函数 没看出来从哪里结束 呵呵 学生愚钝 见谅  详情 回复 发表于 2014-9-13 10:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 720个

财富等级: 财运亨通

 楼主| 发表于 2014-9-13 10:38:12 | 显示全部楼层
st788796 发表于 2014-9-13 09:23
1 框选 Pline,
2 构造 (Z值 实体) 表,
3 对表按 Z 值分组(XD:ist:GroupByIndex),

谢谢 元老的思路解析  谢谢  你那个代码  有一个自定义函数  这个自定义函数  没看出来从哪里结束 呵呵  学生愚钝  见谅
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 720个

财富等级: 财运亨通

 楼主| 发表于 2014-9-13 11:42:06 | 显示全部楼层
st788796 发表于 2014-9-13 09:23
1 框选 Pline,
2 构造 (Z值 实体) 表,
3 对表按 Z 值分组(XD:ist:GroupByIndex),

谢谢 元老了   线连接了  没有拟合这一个,我加载了晓东api   功能太强了  以后也慢慢学习这个算了 呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-13 11:58:05 来自手机 | 显示全部楼层
杜流浪人 发表于 2014-9-13 11:42
谢谢 元老了   线连接了  没有拟合这一个,我加载了晓东api   功能太强了  以后也慢慢学习这个算了 呵呵  ...

拟合用pedit f,其它方法还没有查到

点评

谢谢元老 请问 如果把两个z值相同的线 把他们的点表合并成一个表,再利用点表生成一条线 能用到那几个函数 谢谢  详情 回复 发表于 2014-9-13 15:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 720个

财富等级: 财运亨通

 楼主| 发表于 2014-9-13 15:41:58 | 显示全部楼层
st788796 发表于 2014-9-13 11:58
拟合用pedit f,其它方法还没有查到

谢谢元老   请问 如果把两个z值相同的线  把他们的点表合并成一个表,再利用点表生成一条线  能用到那几个函数  谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-13 16:09:11 来自手机 | 显示全部楼层
杜流浪人 发表于 2014-9-13 15:41
谢谢元老   请问 如果把两个z值相同的线  把他们的点表合并成一个表,再利用点表生成一条线  能用到那几 ...

取得顶点表 (xdrx_getproperty e "Vertices")
制造 (apply 'xdrx_polyline_make  pts)
注意首尾点连接及去掉重复点

点评

;;连接等高线后再点击连接后的等高线即可拟合 (Defun C:plj (/ ss1 ss2 Pt1 Pt2 p1 p2 p11 p22 pa pb) (vl-load-com) (Setvar "Cmdecho" 0) (Setq Pt1 (Getvar "Vsmin")) (Setq Pt2 (Getvar "Vsmax")  详情 回复 发表于 2014-9-14 17:22
老师你好,我现在利用你的那段代码 完成了各条线的连接及连接成为各个一体,也完成了拟合,但是拟合有点bug,可是利用jion连接拟合后各个线的z值归0了,这个不是我想要的  详情 回复 发表于 2014-9-14 11:04
非常感谢长老的一直回答与指导 感谢老师了  详情 回复 发表于 2014-9-13 17:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 720个

财富等级: 财运亨通

 楼主| 发表于 2014-9-13 17:04:21 | 显示全部楼层
st788796 发表于 2014-9-13 16:09
取得顶点表 (xdrx_getproperty e "Vertices")
制造 (apply 'xdrx_polyline_make  pts)
注意首尾点连接 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 21:46 , Processed in 0.483822 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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