想请指点一下,定了4个点,想它始终由p1点为起点顺时排序
我用框选定了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)
;;;对顶点表排序
(setqptlist (vl-sort ptlist (function
(lambda (e1 e2)
(< (+ (car e1) (cadr e1)) (+ (car e2) (cadr e2))) ))))
)
还有想问一下entmake 可以定2点直接创建矩形吗?
(defun c:tt ()
(setq p1 (getpoint "\n第一点:"))
(setq p2 (getcorner p1 "\n对角点:"))
(setq ll (apply 'mapcar (list 'min p1 p2))
ur (apply 'mapcar (list 'max p1 p2))
)
(setq p1 (list (car ll) (cadr ur) (caddr ll))
p2 ur
p3 (list (car ur) (cadr ll) (caddr ll))
p4 ll)
(list p1 p2 p3 p4)
) 本帖最后由 kwok 于 2013-2-7 20:13 编辑
Gu_xl 发表于 2013-2-7 19:48 static/image/common/back.gif
谢谢,不过p1点始终于是在左上角,
可以让开始框选的第一点做为p1点吗,如你的代码的getpoint"第一点,不管从左上或是坐右下角开始,它都是作为做p1.
想达到效果是,p1和p2点不变,让p3和p4根据p1和p2来顺时或逆时排序.
kwok 发表于 2013-2-7 19:57 static/image/common/back.gif
谢谢,不过p1点始终于是在左上角,
可以让开始框选的第一点做为p1点吗,如你的代码的getpoint"第一点,不管从 ...
(defun c:tt (/ P1 A P2 LL UR P3 P4 PL)
(setq p1 (getpoint "\n第一点:")
ap1
)
(setq p2 (getcorner p1 "\n对角点:"))
(setq ll (apply 'mapcar (list 'min p1 p2))
ur (apply 'mapcar (list 'max p1 p2))
)
(setq p1 (list (car ll) (cadr ur) (caddr ll))
p2 ur
p3 (list (car ur) (cadr ll) (caddr ll))
p4 ll
)
(setq pl (list p1 p2 p3 p4))
(while (not (equal a (car pl) 1e-6))
(setq pl (reverse (cons (car pl) (reverse (cdr pl)))))
)
) 围观之~支持G版~ 学习一下思路和技术 谢谢G版的帮助,
不过效果还不是我想的,
我想达到的是不管框选的第一点从什么位置开始框选,它同时也是p1点,然后再根据p1排序其它点,你这个冒似把p1定在左上角.
这个p1点有可能是在左下角,也有可能在右下角或是右上角,它是跟框选第一点在一起的,例如有可能在框选是从右上角到左下角,那p1点就在右上角;,也有可能从右下角到左上角框选,那p1就在右下角.
;; 自定义函数下载: http://bbs.mjtd.com/thread-95673-1-1.html
;; 伪源码需要e派工具箱(XCAD)的支持
(defun c:tt ()
(if (and (setq p1 (getpoint "\n基点<退出>: "))
(setq p2 (getcorner p1 "\n对角点<退出>: "))
)
(progn
(xyp-MkLaCo "TEST1" 1)
(setq s1(xyp-rectang p1 p2)
ptn(xyp-get-Vertexs s1 0)
ptn1 (xyp-Ptn2CCW ptn)
ptn(if (equal (car ptn) (car ptn1))
ptn
(reverse (cdr (reverse (cons (last ptn1) ptn1))))
)
i1
)
(xyp-MkLaCo "TEST2" 2)
(foreach pt ptn
(xyp-Text 5 pt (itoa i))
(setq i (1+ i))
)
)
)
(princ)
)
楼上效果是我所想,可惜是伪源码,没得学习. (defun c:tt (/ plst)
(if (and (setq p1 (getpoint "\n基点<退出>: "))
(setq p2 (getcorner p1 "\n对角点<退出>: "))
)
(progn
(command "rectang" p1 p2 )
(setq s(entget(entlast)))
(setq zf (tt (entlast)))
(foreach x s(if (=(car x)10)(setq plst(cons (cdr x)plst))))
(setq plst(reverse plst))
(if (not zf)(setq plst (cons (car plst)(reverse (cdr plst)))))
(setq n 1)
(mapcar '(lambda(x)(command "text" x "50" "" (itoa n))(setq n(1+ n)))plst)
)
)
(princ)
)
(defun tt(e / flag)
(setq Obj (vlax-ename->vla-object e))
(vla-offset (setq Obj(vlax-ename->vla-object (entlast))) 0.0001)
(setq oobj (vlax-ename->vla-object (entlast)))
(if (> (vla-get-length obj) (vla-get-length oobj)) (setq flag 1))
(vla-delete OObj)
flag
)
页:
[1]
2