-
Postów
268 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
43
Treść opublikowana przez kojacek
-
Automatyczna numeracja
kojacek odpowiedział(a) na Harry temat w Wsparcie programistyczne LISP i VisualLISP
Czy to jest etyczne? Masz pewność że autor wyraża zgodę na przerabianie swojego programu? -
Automatyczna numeracja
kojacek odpowiedział(a) na Harry temat w Wsparcie programistyczne LISP i VisualLISP
Czy to legalne? -
DRAWORDER dla warstw (i bloków)
kojacek odpowiedział(a) na Chris pytanie w Propozycje nowych funkcji
1. Jeśli prośba o elastyczność, to mam nadzieję że zgodzimy się do pewnych faktów: a) AutoCAD obsługuje 3D od 1985 roku. b) Draworder jest dostępny od 1997, ale nie ma nic wspólnego z 3D. 2. Teraz znów o DRAWORDER: Mówiąc cały czas o DRAWORDER, musimy mieć na uwadze że nie ma on nic wspólnego z modelowaniem czy rysowaniem w 3D. Zatem dywagacje na temat współrzędnej Z są bezcelowe - DRAWORDER nie zmienia położenia obiektów w przestrzeni. Mało tego - położenie obiektów w przestrzeni 3D nie determinuje kolejności ich wyświetlania. Można w prosty sposób przekonać się że obiekty o mniejszej wspórzędnej Z "przykrywają" obiekty znajdujące się w przestrzeni "wyżej". I tego rodzaju "problemy" rozwiązuje właśnie DRAWORDER. Powstał na zapotrzebowanie wizualizacji projektu i tworzenia grafiki prezentacyjnej. Steruje porządkiem wyświetlania obiektów, a nie ich położeniem w przestrzeni. 3. Kulą w płot jest argumentacja dotycząca parametru Elevation dla polilinii, mająca wyjaśniać domniemane "wdrażanie 3D drobnymi krokami" i "ciążenia tego do dziś". Proszę o zapoznanie się ze strukturą danych obiektów LWPOLYLINE i POLYLINE. 4. Całkowitym nieporozumieniem zaś jest przytaczanie opisu strony html. Choć pozornie ma również związek z kolejnością wyświetlania, dotyczy jednak zupełnie czegoś innego. -
DRAWORDER dla warstw (i bloków)
kojacek odpowiedział(a) na Chris pytanie w Propozycje nowych funkcji
Bzdura. Obsługa obiektów w przestrzeni trójwymiarowej datuje się od wersji AutoCAD 2.1 (Release 6 - maj 1985). Polecenie DRAWORDER jest zaś dostępne od wersji AutoCAD R14 (luty 1997). Zatem nie ma i nie było tu żadnej próby rozwiązywania czegokolwiek w 3D. Powtórzę raz jeszcze. W AutoCAD obiekty wyświetlane są domyślnie w kolejności tworzenia (nowy "przykrywa" stary), chyba że zostanie zastosowany DRAWORDER właśnie. I dotyczy to tylko kolejności wyświetlania, a nie umiejscowienia w przestrzeni. Dotyczy tylko obiektów graficznych, a nie warstw, definicji bloków, słowników, stylów tekstu, wymiarowania itp. To ma i miało od początku zastosowanie do określenia porządku wyświetlania obiektów w rzeczywistości się pokrywających (np. aby obwiednia obiektu "nakładała się" na jego kreskowanie, teksty opisujące były "na wierzchu" linii itp.) -
DRAWORDER dla warstw (i bloków)
kojacek odpowiedział(a) na Chris pytanie w Propozycje nowych funkcji
Pomysł w mojej opinii chybiony, wynikający z niezrozumienia działania mechanizmu DRAWORDER. Po pierwsze, DRAWORDER dotyczy entycji, czyli graficznych obiektów rysunkowych, warstwy zaś są obiektami niegraficznymi. Nie można ich mieszać ze względu na różnice ich właściwości. Po drugie, opisywana sytuacja nie bierze pod uwagę konfliktu pomiędzy proponowanym a istniejącym DRAWORDER. To tworzyłoby większy chaos, niż korzystanie ze zwykłego DRAWORDER, czy nawet nie korzystanie z niego. Po trzecie trzeba również rozróżnić pojęcia blok (definicja bloku), a jego odniesienie (wstawienie). To pierwsze jest obiektem niegraficznym, to drugie (INSERT) zaś graficznym. Dla niego normalny DRAWORDER działa tak jak dla innych entycji. Na koniec - DRAWORDER nie tworzy i nie zmienia położenia obiektów. To jedynie ich kolejność wyświetlania. -
Punkty styczności - linia styczna do dwóch okręgów. [rozwiązany]
kojacek odpowiedział(a) na Alojz temat w ZWCAD Standard i Professional
No pewnie. Piszę "dla istniejących", w znaczeniu zadaję styczność linii do okręgów, nie zmieniając jej kąta. Gdyby to nie miało znaczenia, to wystarczy edycja uchwytami, tak samo jak dla rysowania nowej linii (lokalizacja Styczny). -
Punkty styczności - linia styczna do dwóch okręgów. [rozwiązany]
kojacek odpowiedział(a) na Alojz temat w ZWCAD Standard i Professional
-
To pobożne życzenia - skąd wcześniejsza wersja "ma wiedzieć" co przyniesie przyszłość? Inna sprawa że Autodesk, tworzy nowe funkcjonalności w "sprytny" sposób. Przykładowo, graficznie obiekty typu CenterLine czy CenterMark, albo "nowe" szyki (Rectangular / Polar / Path ARRAY), będą widziane w programach ich nie obsługujących, jako bloki anonimowe. To generalnie są odniesienia do bloków, jednak w istotny sposób się różniące między sobą. Poruszyłem to we wpisie: https://kojacek.wordpress.com/2018/04/20/typy-odniesien/
-
ZWCAD 2019 Beta - Tworzenie prostego bloku dynamicznego
kojacek odpowiedział(a) na Martin_S temat w ZWCAD Standard i Professional
A czy można też w atrybucie bloku jako FIELD-y ustawić wartości parametrów bloku dynamicznego. Tak jak poniżej (w AC)? -
vlax-ldata-.... a wersje ZWcad
kojacek odpowiedział(a) na 2P temat w Wsparcie programistyczne LISP i VisualLISP
1. LDATA są nieefektywne, nieelastyczne i (czasem) mogą być "gubione", jeśli rysunek wędruje i jest zapisywany w różnych wersjach. Może działać tech mechanizm odwrotny - mogą być "wleczone" do innych rysunków, wtedy i tak tracą powiązania, i są właściwie bezużyteczne. 2. Nie wiem czy ma sens - mówię o tym żeby zastąpić teraźniejsze dane w LDATA, innymi przechowywanymi w np. XRECORD. Czyli wymyślenie nowego sposobu zarządzania tymi danymi do wykorzystania obecnie i w przyszłości, jednocześnie zmigrować stare dane, tak aby ich nie stracić i mieć do nich dostęp w dowolnej chwili. Nie znam twojego modelu tych danych, ale myślę że można to spokojnie zrobić. Przy okazji (być może) rozszerzyć ich funkcjonalność. -
Powyższy LISP tworzy odniesienia statyczne, myślę jednak że chodzi raczej o pewnego rodzaju dynamikę, którą zapewnia FIELD (tutaj w atrybutach bloku):
-
vlax-ldata-.... a wersje ZWcad
kojacek odpowiedział(a) na 2P temat w Wsparcie programistyczne LISP i VisualLISP
Osobiście odradzam używania LDATA, czy to w samym AutoCAD-zie, czy w programach mu podobnych. Niezależnie, czy jest błąd w ZwCAD, sugerowałbym migrację danych do obiektów niegraficznych typu Dictionary (również Extension Dictionary), oraz do przechowywania dużej ilości danych różnego typu w obiekcie XRECORD. Parokrotnie poruszałem już ten temat tutaj: https://kojacek.wordpress.com/tag/obiekty-niegraficzne/ Dostęp do tego rodzaju struktur rysunkowej bazy danych, zapewnia VisualLISP. W razie czego mogę pomóc, jak to "ugryźć". -
Ja tam jestem zwolennikiem minimalizmu w kodzie: (ssget "_x" '((0 . "hatch")(-4 . "/=")(62 . 1)(-4 . "/=")(62 . 105))) 😉
-
Odmierzanie na polilinii
kojacek odpowiedział(a) na jacnightingale temat w ZWCAD Standard i Professional
Do wyznaczania punktu na krzywej w zadanej odległości od innego punktu na niej się znajdującego przedstawiam funkcję LISP-a: ; ================================================================== ; ; Zwraca punkt (lub nil) znajdujacy sie na krzywej <Curve> w ; ; odleglosci <Dist> od punktu <FromPt> ; ; Dodatnia wartosc <Dist> wyznacza punkt w kierunku zgodnym z ; ; przebiegiem krzywej, ujemna w kierunku przeciwnym ; ; ------------------------------------------------------------------ ; (defun jk:CAL_GetPointAtDist (Curve FromPt Dist / %) (if (setq % (vlax-curve-getDistAtpoint Curve FromPt)) (vlax-curve-getPointAtDist Curve (+ Dist %)) ) ) ; ------------------------------------------------------------------ ; Wymaga ona trzech argumentów: 1) obiektu 3) punktu na nim i 3) odległości. Zwraca punkt lub nil. Poniżej funkcja ilustrująca testowe działanie - po wskazaniu splajnu, punktu na nim (zielone kółko), rysuje 5 (czerwonych okręgów) w odległości 10 20 30 40 i 50 od niego. Kod: (defun C:TEST-A ( / e p) (if (and (setq e (car (entsel "\nKrzywa:"))) (setq p (getpoint "\nOd punktu:")) ) (foreach % '(10 20 30 40 50) (cd:ACX_AddCircle (cd:ACX_ASpace) (jk:CAL_GetPointAtDist e p %) 1 T ) ) ) ) Funkcja testująca wymaga CADPL-Pack'a (https://kojacek.wordpress.com/2015/11/04/cadpl-pack/) a aziałanie wygląda tak: -
Odmierzanie na polilinii
kojacek odpowiedział(a) na jacnightingale temat w ZWCAD Standard i Professional
No to ja trochę namieszałem. Ale to co chcesz też się da zrobić LISP-em. W wolnej chwili wrzucę w jaki sposób. -
Odmierzanie na polilinii
kojacek odpowiedział(a) na jacnightingale temat w ZWCAD Standard i Professional
A takie coś: https://kojacek.wordpress.com/2018/01/17/pomiar-dlugosci-krzywej/ LISP-em? -
Wyszukiwanie elementów blokujących warstwy [rozwiązany]
kojacek odpowiedział(a) na 2P temat w ZWCAD Standard i Professional
Tutaj trochę szerzej: https://kojacek.wordpress.com/2018/05/02/warstwy-bloki-purge/ -
Wyszukiwanie elementów blokujących warstwy [rozwiązany]
kojacek odpowiedział(a) na 2P temat w ZWCAD Standard i Professional
Przepraszam, zakładam ponownie temat, bowiem w mojej opinii został zbyt wcześnie zamknięty. Wydaje mi się że problem nie został jednak rozwiązany - patrząc na sam tytuł wątku. Nie przedłużając - do rzeczy. Przedstawiam poniżej funkcje LISP-a, które pozwalają znaleźć element(y) w definicji bloku, który nie znajduje się na warstwie "0". Zwykle takie właśnie obiekty tworzą opisywaną sytuacją - nie można "wypurgować" warstwy, pomimo tego że nie znajdują się na niej żadne (uchwytne w normalnej edycji) elementy. Poniżej dwie funkcje: ; ---------------------------------------------------------------- ; ; by kojacek [https://kojacek.wordpress.com] ; ; ---------------------------------------------------------------- ; ; Funkcja sprawdza wszystkie elementy bloku <BName>. Zwraca liste ; ; obiektow <ename> ktore znajduja sie na innej warstwie niz "0" ; ; lub nil ; ; ---------------------------------------------------------------- ; (defun jk:BLK_Find-NoStandardLay (BName) (vl-remove-if '(lambda (%) (= "0" (cdr (assoc 8 (entget %)))) ) (cd:BLK_GetEntity BName nil) ) ) ; ---------------------------------------------------------------- ; ; Funkcja dla listy nazw blokow <Blist>, sparawdza kazdy blok, czy ; ; znajduja sie w nim elementy na innych warstwach niz "0". Zwraca ; ; liste typu (("BName-1 <ename...><ename...> ... )) lub nil ; ; ---------------------------------------------------------------- ; (defun jk:BLK_InspectBlock (BList / r) (if (setq r (mapcar '(lambda (% / %1) (if (setq %1 (jk:BLK_Find-NoStandardLay %)) (append (list %) %1) ) ) BList ) ) (vl-remove 'nil r) ) ) ; ---------------------------------------------------------------- ; Korzystają z biblioteki CADPL-Pack (http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html) Przykładowe wywołanie: (jk:BLK_InspectBlock (cd:SYS_CollList "BLOCK" (+ 1 2))) może w konsoli VLIDE AutoCAD-a zwracać taką listę (tutaj dwa bloki z elementami leżącymi na innej niż "0" warstwa): Sposób ten jak widać pozwala wyłapać "niehigienicznie" tworzone bloki (i określone w nim obiekty) które mogą "wlec" ze sobą niepotrzebne warstwy. Mając tę wiedzę można już spokojnie przedefiniować blok (wyrażeniem LISP-a w jednej linii - ale to inna bajka 😉 ), a w konsekwencji wyczyścić rysunek z niepotrzebnych warstw. Co ważne - świadomie, bowiem wiemy co zostało zepsute, i potrafimy to naprawić. Uwaga: Przedstawione funkcje działają na 100% w AutoCAD-zie, proszę sprawdzić czy dają się z powodzeniem uruchomić na ZwCAD. Niestety nie mogę tego zweryfikować. -
Dokumentacja fotograficzna
kojacek odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Skorzystaj z gotowych narzędzi lispowych zwanych CADPL-Pack. Poczytaj tutaj: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ o nim, co to jest i jak używać. Potem jest już z górki: 1) Odczytanie pliku csv: (setq a (cd:SYS_ReadFile nil (findfile "GPS.csv"))) zwraca listę: ("D:\\Smietnik\\IMG_20180218_133113.jpg;51.269562;22.542074;22" "D:\\Smietnik\\IMG_20180218_133117.jpg;51.269562;22.542074;90" "D:\\Smietnik\\IMG_20180218_133144.jpg;51.269562;22.542074;180" "D:\\Smietnik\\IMG_20180221_190038.jpg;51.269558;22.542191;130") 2) Podział łańcuchów (elementów listy) na osobne listy: (setq b (mapcar '(lambda (%)(cd:STR_Parse % ";" T)) a)) zwraca: (("D:\\Smietnik\\IMG_20180218_133113.jpg" "51.269562" "22.542074" "22") ("D:\\Smietnik\\IMG_20180218_133117.jpg" "51.269562" "22.542074" "90") ("D:\\Smietnik\\IMG_20180218_133144.jpg" "51.269562" "22.542074" "180") ("D:\\Smietnik\\IMG_20180221_190038.jpg" "51.269558" "22.542191" "130")) 3) Utworzenie osobnych list na podstawie indeksu. Na poczatek krótka definicja funkcji do tego celu: (defun jk:LST_nth (Lst Idx) (mapcar '(lambda (%)(nth Idx %)) Lst) ) Teraz wywołania: (setq p (jk:LST_nth b 0)) zwraca ścieżki: ("D:\\Smietnik\\IMG_20180218_133113.jpg" "D:\\Smietnik\\IMG_20180218_133117.jpg" "D:\\Smietnik\\IMG_20180218_133144.jpg" "D:\\Smietnik\\IMG_20180221_190038.jpg") potem iksy: (setq x (jk:LST_nth b 1)) następnie igreki: (setq y (jk:LST_nth b 2)) na koniec kąty: (setq g (jk:LST_nth b 3)) oczywiście jeśli potrzeba zmień STR-ingi listy na liczby, tu dla igreków który wygląda tak: ("22.542074" "22.542074" "22.542074" "22.542191") wywołujesz: (mapcar 'read y) zwraca: (22.5421 22.5421 22.5421 22.5422) Powinno działać - w razie problemów daj znać. -
Wyciąganie atrybutów z bloków dynamicznych [Wprowadzono w ZWCAD 2020]
kojacek odpowiedział(a) na kruk pytanie w Propozycje nowych funkcji
Chodzi (jak rozumiem) nie o atrybuty tylko o właściwości. LISP-em, możesz wykorzystać funkcję biblioteczną z zestawu CADPL-Pack o nazwie cd:BLK_GetDynamicProps. Tutaj masz ogólnie o CADPL-Packu parę słów (co to jest i jak korzystać): https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ Tutaj różne tematy okołopack'owe: http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html A tutaj sam plik biblioteki: http://members.upcpoczta.pl/r.matula/Pack/v1/CADPL-Pack-v1.lsp -
Zapamiętywanie ostatniej wprowadzonej wartości
kojacek odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
W mojej subiektywnej opinii, pomysł nieco chybiony. Co będzie gdy w tym samym katalogu będzie więcej plików rysunkowych? Wszystkie będą się odwoływać do tego samego pliku tekstowego? A co jeśli przypadkowo plik zostanie usunięty? Nie wiemy czemu ma to służyć, niemniej widzę chyba lepsze rozwiązania: zapamiętanie danych w rysunku np. Zmienna USERRn (ulotne - niezapamiętywane w sesji), lub jako dane niegraficzne - słownik w namedobjdict, a w nim XRecord (zapamiętane na stałe). Ponadto XData przypięta do jakiegoś obiektu, itp. -
Ustawienia ZWCAD 2018 na serwerze sieciowym
kojacek odpowiedział(a) na tuss temat w ZWCAD Standard i Professional
W mojej opinii bardzo dobre rozwiązanie. Na serwerze: szablony + style wydruku + definicje kreskowań rodzajów linii (jeśli nietypowe) + lispy (i inne rozszerzenia) + biblioteki bloków + (opcja menu częściowe) Lokalnie: indywidualne własne menu + własne bloki + własne lispy Uprawnienia na serwerze R-O dla wszystkich + 1 (2) user-(ów) jako admini (mogą edytować, poprawiać, uzupełniać zasoby) -
Szablony i skrypty startowe ZWPack
kojacek odpowiedział(a) na dmatusz3 temat w ZWCAD Standard i Professional
Odnośnie polecenia C:ZZ (ze skryptu), przełączającego FILLMODE, polecam szersze rozwiązania: https://kojacek.wordpress.com/2017/12/30/uproszczone-wyswietlanie-obiektow/ -
Błąd w metodzie ZwCAD .net - formatowanie tekstu [rozwiązany]
kojacek odpowiedział(a) na Parikon temat w ZWCAD Standard i Professional
Utwórz tekst bez podkreślenia, tak jak sugerujesz. Potem do istniejącego już dodaj "%%u".