sirsebast 发表于 2022-7-6 06:08:29

最大X和负X

可以从多段线中找到最大x和负x吗?

ReMark 发表于 2022-7-6 06:16:00

如果我一天没有学到新的东西(或两件事),我觉得我好像浪费了我清醒的时间,那么告诉我什么是“max x”和“负x”,你通过获得这些信息将实现什么?
 
这些多段线坐标是您试图通过一些lisp代码检索的吗?
 
这可能与多段线顶点有关吗?

sirsebast 发表于 2022-7-6 06:21:44

我想在lisp中用max et min xy进行重角。

ReMark 发表于 2022-7-6 06:31:17

我们似乎被困住了。让我们给这个线程一个“凹凸”,看看会发生什么。

neophoible 发表于 2022-7-6 06:35:12

这可能需要在LISP论坛上,不是吗?我不清楚你是如何从多段线输入信息的。我可以告诉你,这里的“min”应该是最小值(而不是负),与max对应的是最大值。在所示的两种情况下,这些值似乎是相反的。也许还需要更多的解释。

JD Mather 发表于 2022-7-6 06:39:10

 
对我来说很合适。负数小于正数。
 
我知道在我使用的一些CAD程序中,它们将返回不规则几何体将适合的边界框x、y(和z)。但我不知道检索这些信息的代码。
 
顺便说一句,如果没有你的照片,我绝对不知道你在追求什么。

sirsebast 发表于 2022-7-6 06:45:38

我想我找到了我想要的,但代码是在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
)

sirsebast 发表于 2022-7-6 06:50:35

不起作用

Lee Mac 发表于 2022-7-6 07:01:52

对于直段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)
)

Lee Mac 发表于 2022-7-6 07:07:58

对于多条直线分段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
查看完整版本: 最大X和负X