_

[Lisp] sortowanie zbioru ssget

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

[Lisp] sortowanie zbioru ssget

Postprzez Lukaszs85 » mar 17, 2017 12:30

Cześć

Mam taki zbiór elementów funkcji ssget:
Kod: Zaznacz cały
(setq ZBIOR (ssget '((0 . "ARC,CIRCLE"))))


wiadomo że oba rodzaje tych elementów mają punkty środkowe.
Znalazłem możliwość sortowania zbioru elementów przy użyciu funkcji vl-sort lub vl-sort-i, tylko jak zaimplementować by ta funkcja sortowała elementy malejąco pod względem odległości środka od np. początku układu współrzędnych?
Tak by pierwszym elementem zbioru położony najdalej od początku układu a ostatnim ten najbliżej.
Bez sortowania to wiadomo że kolejność jest uzależniona od kolejności dodawania do zbioru i kolejności w jakiej zostały narysowane elementy.
Lukaszs85
 
Posty: 20
Dołączył(a): lut 24, 2017 00:24

Re: [Lisp] sortowanie zbioru ssget

Postprzez ziele_o2k » mar 17, 2017 13:02

https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-F3B27BD2-27FA-4185-B22C-85509175C171-htm.html

Na przykładzie:
Kod: Zaznacz cały
(defun c:test1 ( / lst)
  (if (setq lst (cd:SSX_Convert (ssget '((0 . "ARC,CIRCLE"))) 0))
    (setq res
      (vl-sort lst
        (function
          (lambda (e1 e2)
            (>
              (cadr (cdr (assoc 10 (entget e1))))
              (cadr (cdr (assoc 10 (entget e2))))
            )
          )
        )
      )
    )
  )
  res
)

CadPack wczytany!
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 395
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników