Przejdź do głównej treści

Podział listy

Poniższy przykład prezentuje jak podzielić listę na mniejsze listy o określonej długości.

Bardzo dobrym przykładem zastosowania funkcji może być jej wykorzystanie na współrzędnych polilinii, które są zapisane jako jedna lista a w wielu przypadkach potrzebna jest znajomość wspołrzędnych poszczególnych wierzchołków. By przetestować przykład, proszę utworzyć plik i narysować w nim polilinię. Wczytać plik, program poprosi o wskazanie polilinii i wyświetli listę współrzędnych.

 

Podział Listy

 

Polecenie do uruchomienia skryptu LISP: PodzialListy

 

Kod źródłowy z opisem

 

;;; Podział listy
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: PodzialListy
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/277-podzial-listy.html
(defun v2l (var / OutVal)
(setq OutVal(vlax-safearray->list(vlax-variant-value var)))
)
(defun SplitList (InList SubLen / ListLen i j OutList)
; funkcja dzieli listę na miejsze listy, z których każda ma dlugość określoną przez parametr SubLen
(setq ListLen (length InList )) ; zwraca długość całej listy
(setq i 0 ) ; ustawia indeks na pierwszy element listy
(while (< i ListLen) ; pętla przez elementy listy
(setq SubList nil )
(setq j 0) ; licznik elementów podlisty
(while (< j SubLen )
(setq SubList (append SubList (list(nth (+ i j) InList ) )))
; dodaje element do mniejszej listy
(setq j (1+ j ))
)
(setq OutList (append OutList (list SubList)))
; dodaje mniejsze listy do główej listy
(setq i (+ i SubLen )) ; zwiększenie indeksu aktualnego elementu
)
OutList
)
(defun C:PodzialListy (  / 
*error* ) (defun *error* ( msg / ) 
(if (not (null msg ) ) (progn (princ "\nC:TestLISP:*error*: " ) (princ msg ) (princ "\n") ) )
)
(setq Wybor (entsel "wskaż polilinie"))  
; prosi Użytkownika o wskazanie elementu i zwraca ten element oraz współrzędne klikniętego punktu
(setq ElemObj (vlax-ename->vla-object (car Wybor)))  
; na podstawie obiektu typu entity zwraca obiekt reprezentujący ten sam element
(setq wspolrzedne(v2l(vlax-get-property ElemObj 'Coordinates ))) 
; pobiera współrzędne wierzchołków wybranej polilinii. Dla innych typów obiektu
; potrzebna jest inna funkcja pobierająca współrzędne
(setq wierzcholki (SplitList wspolrzedne 2 ))  
; dzieli listę współrzędnych na mniejsze listy
(print wierzcholki) ; wyświetla w pasku poleceń wynik podziału
) 

 

Wykonanie w ZWCAD 2023

podzial listy

Lista tagów: LISP Przykłady LISP

// ZWCAD: dymki słownika – szerokość 500 px i przeliczenie rozmiaru po wczytaniu obrazka (bez paska przewijania) jQuery(function ($) { if (!$.tooltipster) return; // obrazek w dymku wczytuje się po otwarciu – wtedy dymek trzeba zmierzyć jeszcze raz $.tooltipster.on('ready', function (e) { var instance = e.instance; $(e.tooltip).find('img').each(function () { if (!this.complete) { $(this).one('load', function () { instance.reposition(); }); } }); }); // SEO Glossary ustawia maxWidth: 400 – zmieniamy na 500 po jego inicjalizacji setTimeout(function () { $('.tooltipstered').each(function () { try { $(this).tooltipster('option', 'maxWidth', 500); } catch (err) {} }); }, 0); });