明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3761|回复: 14

想请指点一下,定了4个点,想它始终由p1点为起点顺时排序

  [复制链接]
发表于 2013-2-7 19:15:26 | 显示全部楼层 |阅读模式
我用框选定了p1和p3,然后设了p2和p4,想让它们从p1,p2,p3,p4排位序
不管框选改了p1的位置,都是顺时什排位.例如我框选时是从p2点开始,这里p2就变p1了后面也跟着变.
想达到效果是,p1和p2点不变,让p3和p4根据p1和p2来顺时或逆时排序.

下面是代码
(defun c:tt6();;;框选
  (setq pt1 (getpoint "\n框选范围:")
        pt3 (getcorner pt1)
        pt2 (list (car pt1)(cadr pt3))
        pt4 (list (car pt3)(cadr pt1))
  )
;;;;;;;;;;;下面是是搜坛里的排序,建了个空表,想让他们排序,不起作用;;请指正一下,谢谢.
(setq ptlist (ssadd));;建空表
  (ssadd pt1 ptlist);将若干个元素增加到集
  (ssadd pt3 ptlist)
  (ssadd pt2 ptlist)
  (ssadd pt4 ptlist)
;;;对顶点表排序
  (setq  ptlist (vl-sort ptlist (function
                    (lambda (e1 e2)
                      (< (+ (car e1) (cadr e1)) (+ (car e2) (cadr e2))) ))))
)



还有想问一下entmake 可以定2点直接创建矩形吗?



本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-2-7 19:48:25 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq p1 (getpoint "\n第一点:"))
  3.   (setq p2 (getcorner p1 "\n对角点:"))
  4.   (setq ll (apply 'mapcar (list 'min p1 p2))
  5.         ur (apply 'mapcar (list 'max p1 p2))
  6.         )
  7.   (setq p1 (list (car ll) (cadr ur) (caddr ll))
  8.         p2 ur
  9.         p3 (list (car ur) (cadr ll) (caddr ll))
  10.         p4 ll)
  11.   (list p1 p2 p3 p4)
  12.   )

评分

参与人数 1明经币 +1 收起 理由
kwok + 1 谢谢指点

查看全部评分

 楼主| 发表于 2013-2-7 19:57:36 | 显示全部楼层
本帖最后由 kwok 于 2013-2-7 20:13 编辑
Gu_xl 发表于 2013-2-7 19:48

谢谢,不过p1点始终于是在左上角,
可以让开始框选的第一点做为p1点吗,如你的代码的getpoint"第一点,不管从左上或是坐右下角开始,它都是作为做p1.
想达到效果是,p1和p2点不变,让p3和p4根据p1和p2来顺时或逆时排序.
发表于 2013-2-7 20:15:39 | 显示全部楼层
kwok 发表于 2013-2-7 19:57
谢谢,不过p1点始终于是在左上角,
可以让开始框选的第一点做为p1点吗,如你的代码的getpoint"第一点,不管从 ...

  1. (defun c:tt (/ P1 A P2 LL UR P3 P4 PL)

  2.   (setq        p1 (getpoint "\n第一点:")
  3.         a  p1
  4.   )

  5.   (setq p2 (getcorner p1 "\n对角点:"))

  6.   (setq        ll (apply 'mapcar (list 'min p1 p2))

  7.         ur (apply 'mapcar (list 'max p1 p2))

  8.   )

  9.   (setq        p1 (list (car ll) (cadr ur) (caddr ll))

  10.         p2 ur

  11.         p3 (list (car ur) (cadr ll) (caddr ll))

  12.         p4 ll
  13.   )

  14.   (setq pl (list p1 p2 p3 p4))
  15.   (while (not (equal a (car pl) 1e-6))
  16.     (setq pl (reverse (cons (car pl) (reverse (cdr pl)))))
  17.   )
  18. )
发表于 2013-2-7 20:20:38 | 显示全部楼层
围观之~支持G版~
发表于 2013-2-7 21:04:24 | 显示全部楼层
学习一下思路和技术
 楼主| 发表于 2013-2-7 22:08:49 | 显示全部楼层
谢谢G版的帮助,
不过效果还不是我想的,
我想达到的是不管框选的第一点从什么位置开始框选,它同时也是p1点,然后再根据p1排序其它点,你这个冒似把p1定在左上角.
这个p1点有可能是在左下角,也有可能在右下角或是右上角,它是跟框选第一点在一起的,例如有可能在框选是从右上角到左下角,那p1点就在右上角;,也有可能从右下角到左上角框选,那p1就在右下角.
发表于 2013-2-7 23:24:07 | 显示全部楼层


  1. ;; 自定义函数下载: [url]http://bbs.mjtd.com/thread-95673-1-1.html[/url]
  2. ;; 伪源码需要e派工具箱(XCAD)的支持
  3. (defun c:tt ()
  4.   (if (and (setq p1 (getpoint "\n基点<退出>: "))
  5.            (setq p2 (getcorner p1 "\n对角点<退出>: "))
  6.       )
  7.     (progn
  8.       (xyp-MkLaCo "TEST1" 1)
  9.       (setq s1  (xyp-rectang p1 p2)
  10.             ptn  (xyp-get-Vertexs s1 0)
  11.             ptn1 (xyp-Ptn2CCW ptn)
  12.             ptn  (if (equal (car ptn) (car ptn1))
  13.                    ptn
  14.                    (reverse (cdr (reverse (cons (last ptn1) ptn1))))
  15.                  )
  16.             i  1
  17.       )
  18.       (xyp-MkLaCo "TEST2" 2)
  19.       (foreach pt ptn
  20.         (xyp-Text 5 pt (itoa i))
  21.         (setq i (1+ i))
  22.       )
  23.     )
  24.   )
  25.   (princ)
  26. )


本帖子中包含更多资源

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

x
 楼主| 发表于 2013-2-8 00:03:34 | 显示全部楼层
楼上效果是我所想,可惜是伪源码,没得学习.

点评

这么简单的程序,何不试着自己写写?  发表于 2013-2-8 01:22
发表于 2013-2-8 01:23:28 | 显示全部楼层
  1. (defun c:tt (/ plst)
  2.   (if (and (setq p1 (getpoint "\n基点<退出>: "))
  3.            (setq p2 (getcorner p1 "\n对角点<退出>: "))
  4.       )
  5.     (progn
  6.       (command "rectang" p1 p2 )
  7.       (setq s(entget(entlast)))
  8.       (setq zf (tt (entlast)))
  9.       (foreach x s(if (=(car x)10)(setq plst(cons (cdr x)plst))))
  10.       (setq plst(reverse plst))
  11.       (if (not zf)(setq plst (cons (car plst)(reverse (cdr plst)))))
  12.       (setq n 1)
  13.       (mapcar '(lambda(x)(command "text" x "50" "" (itoa n))(setq n(1+ n)))plst)
  14.       )
  15.     )  
  16.   (princ)
  17.   )
  18. (defun tt(e / flag)
  19.     (setq Obj (vlax-ename->vla-object e))
  20.     (vla-offset (setq Obj(vlax-ename->vla-object (entlast))) 0.0001)
  21.     (setq oobj (vlax-ename->vla-object (entlast)))
  22.     (if (> (vla-get-length obj) (vla-get-length oobj)) (setq flag 1))
  23.     (vla-delete OObj)
  24.   flag
  25. )


点评

不知不要画矩形只定出p1,p2点也可以达到这效果不?  发表于 2013-2-8 13:01
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-22 18:30 , Processed in 0.448568 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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