最大X和负X
可以从多段线中找到最大x和负x吗? 如果我一天没有学到新的东西(或两件事),我觉得我好像浪费了我清醒的时间,那么告诉我什么是“max x”和“负x”,你通过获得这些信息将实现什么?这些多段线坐标是您试图通过一些lisp代码检索的吗?
这可能与多段线顶点有关吗? 我想在lisp中用max et min xy进行重角。 我们似乎被困住了。让我们给这个线程一个“凹凸”,看看会发生什么。 这可能需要在LISP论坛上,不是吗?我不清楚你是如何从多段线输入信息的。我可以告诉你,这里的“min”应该是最小值(而不是负),与max对应的是最大值。在所示的两种情况下,这些值似乎是相反的。也许还需要更多的解释。
对我来说很合适。负数小于正数。
我知道在我使用的一些CAD程序中,它们将返回不规则几何体将适合的边界框x、y(和z)。但我不知道检索这些信息的代码。
顺便说一句,如果没有你的照片,我绝对不知道你在追求什么。 我想我找到了我想要的,但代码是在1998年创建的。
(defun C:BoundPoly (ss Cwd / Lst ssl ename entl cnt elast la pt1 pt2 vlist
cen dia vlist1 vlist2 p11 p12 p21 p22 ename1 ename2 PolySSss1 en flag OS )
(if (= (type ss) 'ENAME)
(progn
(setq ss1 (ssadd))
(ssadd ss ss1)
(setq ss ss1)
))
(setq OS (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq PolySS nil)
(if ss
(progn
(LA_mk_c_lyr "0" "")
(setq
ssl (sslength ss)
PolySS (ssadd)
cnt 0
)
(repeat ssl
(setq
ename (ssname ss cnt)
entl (entget ename)
en (LI_item 0 entl)
cnt (1+ cnt)
)
(cond
((= en "CIRCLE")
(setq
dia (* 2.0 (LI_item 40 entl))
Cen (LI_item 10 entl)
)
(command "._Donut" dia dia Cen "")
(ssadd (entlast) PolySS)
)
((member en (list "LINE" "POLYLINE"))
(if (= en "LINE")
(setq flag 0 vlist (list (LI_item 10 entl) (LI_item 11 entl)))
(setq flag (LI_item 70 entl)vlist (PL_plist ename))
)
(if (zerop (logand flag 1)) ; Open polyline or line
(progn
(LA_mk_c_lyr "0" "")
(command "._Mline" "_Justification" "_Zero" "_Scale" Cwd)
(foreach pt vlist (command pt))
(command "")
(setq elast (MI_xentlast))
(command "._Explode" (entlast))
(setq
ss1 (MI_after elast)
ss1 (PL_PlJoin ss1 nil)
)
(if (and ss1 (= (sslength ss1) 2))
(progn
(command "._Change" ss1 "" "_Properties" "_Layer" "0" "")
(setq
vlist1 ( PL_plist (ssname ss1 0) )
vlist2 ( PL_plist (ssname ss1 1) )
p11 (nth 0 vlist1)
p12 (nth (1- (length vlist1) ) vlist1)
p21 (nth 0 vlist2)
p22 (nth (1- (length vlist2) ) vlist2)
)
(command "._Line" p11 p21 "")
(setq ename1 (entlast))
(command "._Line" p12 p22 "")
(setq ename2 (entlast))
(command
"._Pedit" (ssname ss1 0) "_Join" (ssname ss1 1) ename1 ename2 "" "_X"
"._Pedit" (entlast) "_Close" "_X"
)
(ssadd (entlast) PolySS)
))
)
(progn
(command "._Copy" ename "" (list 0.0 0.0 0.0) "")
(ssadd (entlast) PolySS)
))
)
)
)
))
(setvar "OSMODE" OS)
PolySS
) 不起作用 对于直段LW多段线:
(defun c:bbpoly ( / e l )
(if (setq e (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))
(progn
(setq l (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) (entget (ssname e 0))))
l (mapcar '(lambda ( x ) (apply 'mapcar (cons x l))) '(min max))
)
(entmake
(list
'(000 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(090 . 4)
'(070 . 1)
(cons 10 (car l))
(list 10 (caadr l) (cadar l))
(cons 10 (cadr l))
(list 10 (caar l) (cadadr l))
)
)
)
)
(princ)
) 对于多条直线分段LWD多段线:
(defun c:bbpoly ( / i l s )
(if (setq s (ssget '((0 . "LWPOLYLINE"))))
(progn
(repeat (setq i (sslength s))
(setq l
(cons
(mapcar 'cdr
(vl-remove-if-not
(function
(lambda ( x ) (= 10 (car x)))
)
(entget (ssname s (setq i (1- i))))
)
)
l
)
)
)
(setq l (apply 'append l)
l (mapcar '(lambda ( x ) (apply 'mapcar (cons x l))) '(min max))
)
(entmake
(list
'(000 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(090 . 4)
'(070 . 1)
(cons 10 (car l))
(list 10 (caadr l) (cadar l))
(cons 10 (cadr l))
(list 10 (caar l) (cadadr l))
)
)
)
)
(princ)
)
页:
[1]
2