明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2489|回复: 10

[已解答] 如何已知点表做各点连线(有连线规则)

[复制链接]
发表于 2015-8-7 15:47:59 | 显示全部楼层 |阅读模式
在已知点表的情况下,如何做各点的规则连线呢?我现在连思路都没有,请帮忙看看。点表的数量为随机,但是肯定能够组成一个相对规则的形状。

本帖子中包含更多资源

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

x
发表于 2015-8-7 16:05:25 | 显示全部楼层
对点表进行排序即可!
水平方向的排序:
;;点自上而下,自左而右排序
      (setq pts (vl-sort pts '(lambda (a b) (if (equal (cadr a)(cadr b) 1e-3)(< (car a) (car b)) (> (cadr a)(cadr b))))))

      ;;点自左而右 自上而下排序
      (setq pts (vl-sort pts '(lambda (a b) (if (equal (car a)(car b) 1e-3)(> (cadr a) (cadr b)) (< (car a)(car b))))))
非水平方向的可先将点转换到水平方向,再排序,方法同上!
发表于 2015-8-7 16:28:25 | 显示全部楼层
;;加载XLRX_API后使用:
  1. (defun c:tt (/ SS N PTS PTS1 L Y PTS2 X diff)
  2.   (initget 4)
  3.   (setq diff (getreal "\n输入容差值<0.001>"))
  4.   (if (null diff) (setq diff 0.001))
  5.   (if (setq ss (ssget '((0 . "point"))))
  6.     (progn
  7.       (repeat (setq n (sslength ss))
  8.         (setq pts
  9.                (cons (cdr (assoc 10 (entget (ssname ss (setq n (1- n))))))
  10.                      pts
  11.                )
  12.         )
  13.       )
  14.       (setq m         (XLRX-Mat-SetCoordSystem
  15.                    (setq o (getpoint "\n基点:"))
  16.                    (setq v (mapcar '- (getpoint o "\n方向:") o))
  17.                    (XLRX-Vec-perpVec v)
  18.                  )
  19.             invm (XLRX-Mat-Inverse m)
  20.       )
  21.       (setq pts (XLRX-Points-TransFormBy pts invm))
  22.       ;;点自上而下,自左而右排序
  23.       (setq pts1 (vl-sort pts
  24.                           '(lambda (a b)
  25.                              (if (equal (cadr a) (cadr b) diff)
  26.                                (< (car a) (car b))
  27.                                (> (cadr a) (cadr b))
  28.                              )
  29.                            )
  30.                  )
  31.       )
  32.       (while pts1
  33.         (setq l           (list (car pts1))
  34.               pts1 (cdr pts1)
  35.               y           (cadar pts1)
  36.         )
  37.         (while (and pts1 (equal y (cadar pts1) diff))
  38.           (setq        l    (cons (car pts1) l)
  39.                 pts1 (cdr pts1)
  40.           )
  41.         )
  42.         (xlrx-make "lwpolyline" (XLRX-Points-TransFormBy l m))
  43.       )

  44.       ;;点自左而右 自上而下排序
  45.       (setq pts2 (vl-sort pts
  46.                           '(lambda (a b)
  47.                              (if (equal (car a) (car b) diff)
  48.                                (> (cadr a) (cadr b))
  49.                                (< (car a) (car b))
  50.                              )
  51.                            )
  52.                  )
  53.       )
  54.       (while pts2
  55.         (setq l           (list (car pts2))
  56.               pts2 (cdr pts2)
  57.               x           (caar pts2)
  58.         )
  59.         (while (and pts2 (equal x (caar pts2) diff))
  60.           (setq        l    (cons (car pts2) l)
  61.                 pts2 (cdr pts2)
  62.           )
  63.         )
  64.         (xlrx-make "lwpolyline" (XLRX-Points-TransFormBy l m))
  65.       )
  66.     )
  67.   )
  68. )

 楼主| 发表于 2015-8-7 17:57:34 | 显示全部楼层
谢谢G版,我加到程序里试试看,热心的G版,32个赞
 楼主| 发表于 2015-8-7 18:11:01 | 显示全部楼层
经测试,已解决,可否解释下容差的作用呢?
发表于 2015-8-7 19:51:19 来自手机 | 显示全部楼层
kele99kele 发表于 2015-8-7 18:11
经测试,已解决,可否解释下容差的作用呢?

容差是指在同一水平线或垂直线的偏差
 楼主| 发表于 2015-8-7 21:35:58 | 显示全部楼层
Gu_xl 发表于 2015-8-7 19:51
容差是指在同一水平线或垂直线的偏差

谢谢G版,看来我理解的没错
 楼主| 发表于 2015-8-7 21:59:15 | 显示全部楼层
仔细研究了程序,G版的思路简单明了,转轴——排序——x向连线——y向连线,今天回来晚,看了G版的代码后茅塞顿开。
发表于 2015-8-7 22:56:36 | 显示全部楼层
G版写过一个投影到圆上进行连线的程序,在特殊情况下可能会有用

点评

这个好像只适用于单排排序,如果有多排的话都投影到圆上是分不出先后关系的,不过还是谢谢热心介绍。  发表于 2015-8-8 01:10
有地址么?不好搜索啊  发表于 2015-8-7 23:20
发表于 2015-8-7 23:54:56 | 显示全部楼层

点评

谢谢啦,我去研究下  发表于 2015-8-8 00:47
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 03:22 , Processed in 0.188691 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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