明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4834|回复: 13

[源码] 提取点坐标

[复制链接]
发表于 2015-7-10 15:51 | 显示全部楼层 |阅读模式
    请问我想提取图中的点坐标,但是一个个点这样用鼠标操作太麻烦了,是不是可以用图元来一次提取点啊。  但是提取点必须是按照图中顺序一列一列这样从左至右从下向上提取,提取完一列提取下一列这样。或者有其他更好的方法啊

本帖子中包含更多资源

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

x
发表于 2020-8-12 17:48 | 显示全部楼层
(defun deldup        (ptLst alw / pt1)
    (cond ((<= (length ptLst) 1) ptLst)
          (t
           (setq pt1 (car ptLst))
           (cons pt1
                 (vl-remove-if
                   '(lambda (x) (equal pt1 x alw))
                   (deldup (cdr ptLst) alw)
                 )
           )
          )
    )
  )

上面deldup函数内部怎么调用自己?

发表于 2020-8-13 11:47 | 显示全部楼层
Block 发表于 2020-8-12 17:48
上面deldup函数内部怎么调用自己?

递归。计算阶乘的例子:
(defun fact (n / )
  (if (= n 0)
    1
    (* n (fact (1- n)))
  )
)
发表于 2020-8-18 17:47 | 显示全部楼层
satan421 发表于 2020-8-13 11:47
递归。计算阶乘的例子:
(defun fact (n / )
  (if (= n 0)

很神奇...也不会死循环啊
发表于 2015-7-10 16:32 | 显示全部楼层
上cad图,在cad中问题说明白些,这样有利别人帮你解决问题
发表于 2015-7-10 20:42 | 显示全部楼层
只选择纵线
  1. (vl-load-com)
  2. (defun c:tt (/ ss lst lst1 m n x y f)
  3.   (defun x_ssn (ss / n lst)
  4.     (repeat (setq N (sslength ss))
  5.       (setq LST (cons (ssname SS (setq N (1- N))) LST))
  6.     )
  7.   )
  8.   (defun deldup        (ptLst alw / pt1)
  9.     (cond ((<= (length ptLst) 1) ptLst)
  10.           (t
  11.            (setq pt1 (car ptLst))
  12.            (cons pt1
  13.                  (vl-remove-if
  14.                    '(lambda (x) (equal pt1 x alw))
  15.                    (deldup (cdr ptLst) alw)
  16.                  )
  17.            )
  18.           )
  19.     )
  20.   )
  21.   (defun get_dxf (en num /) (cdr (assoc num (entget en))))
  22.   (setq f (open (getfiled "坐标输出为:" "d:/" "txt" 1) "w"))
  23.   (prompt "\n仅选择纵向线:")
  24.   (setq        ss  (ssget)
  25.         lst (x_ssn ss)
  26.         lst (vl-sort
  27.               lst
  28.               '(lambda (x y) (< (car (get_dxf x 10)) (car (get_dxf y 10))))
  29.             )
  30.   )
  31.   (foreach n lst
  32.     (setq ss (ssget "f" (list (get_dxf n 10) (get_dxf n 11))))
  33.     (setq lst1 (x_ssn ss))
  34.     (setq lst1 (deldup (vl-remove nil
  35.                                   (mapcar '(lambda (x)
  36.                                              (vlax-invoke
  37.                                                (vlax-ename->vla-object n)
  38.                                                'IntersectWith
  39.                                                (vlax-ename->vla-object x)
  40.                                                acExtendNone
  41.                                              )
  42.                                            )
  43.                                           lst1
  44.                                   )
  45.                        )
  46.                        1e-6
  47.                )
  48.           lst1 (vl-sort lst1 '(lambda (x y) (< (cadr x) (cadr y))))
  49.     )
  50.     (foreach m lst1
  51.       (write-line
  52.         (strcat (rtos (car m) 2 3) "," (rtos (cadr m) 2 3))
  53.         f
  54.       )
  55.     )
  56.     (write-line "下一个" f)
  57.   )
  58.   (close f)
  59.   (princ)
  60. )
 楼主| 发表于 2015-7-13 16:57 | 显示全部楼层
x_s_s_1 发表于 2015-7-10 20:42
只选择纵线

是的,就是按竖向线方向提取所有的交点,比如第一列共计13个点提取完提取第二列一次类推这种,直到最后一列提取完毕。。因为不止这一个剖面,还有其他的剖面,所以坐标最好统一,比如像图中那样左下角为坐标原点。。这样每个剖面的基本坐标是一致的,最终提取结束就可以所有剖面的点进行连接了。。
 楼主| 发表于 2015-7-13 16:59 | 显示全部楼层
x_s_s_1 发表于 2015-7-10 20:42
只选择纵线

原来是你啊,非常感谢!!你这个是世界坐标是吧
发表于 2015-7-13 21:20 | 显示全部楼层
waityou5683 发表于 2015-7-13 16:59
原来是你啊,非常感谢!!你这个是世界坐标是吧

是世界坐标系
发表于 2015-7-13 21:21 | 显示全部楼层
你的问题就是这么提的,均以左下角?
发表于 2015-7-15 11:07 | 显示全部楼层
获得交点,按x轴排序吗?
发表于 2015-8-12 00:08 | 显示全部楼层
x_s_s_1 发表于 2015-7-10 20:42
只选择纵线

你好,请问源码中对选择集按照x坐标排列的部分在哪儿啊,我是小白,请多多指教
发表于 2015-8-13 07:49 | 显示全部楼层
vl-sort那里
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 09:08 , Processed in 0.454878 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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