RobS

Użytkownik forum
  • Postów

    48
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    11

Treść opublikowana przez RobS

  1. Zmieniłem nazwę skryptu na WyrówajBlokiDoPoli. Uważam, że to lepiej opisuje jego funkcjonalność. W poprawionej wersji bloki które wykraczają poza zakres polilinii są pomijane. Ponadto po wykonaniu polecenia w pasku poleceń wyświetla się krótkie podsumowanie ile bloków zostało wyrównanych i czy zostały pominięte. Co do punktu styku to bazuje na punkcie bazowym bloku i taka będzie natura jego wyrównania do polilinii. WyrownajBlokiDoPoli.lsp
  2. Hej, Napisałem skrypt który działa zgodnie z pomysłem @dmatusz3 LISPa wczytaj poleceniem AP. Żeby użyć funkcję wpisz polecenie DOPASUJBLOKIDOPOLI. Najpierw wybierz polilinię, później oknem bloki które chcesz dopasować do polilinii i kliknij Enter. Obiekty inne niż bloki i polilinia zostaną odfiltrowane. DopasujBlokiDoPoli.lsp
  3. W takim razie szybki skrypt Lisp który ułatwi Ci pracę. Wczytaj go poleceniem AP i jeśli chcesz, żeby styl modyfikował się już po otwarciu rysunku to Dodaj do listy startowej. W poniższym kodzie musisz zmienić nazwę stylu NazwaStyluWym1 na swoją, stylów możesz określić więcej niż jeden. Dokładność wyświetlania wymiaru kątowego jest określona przez cyfrę "3" po "DIMADEC". W tym przykładzie będą 3 miejsca po przecinku, domyślnie jest 0. (setq dimlst '("NazwaStyluWym1" "NazwaStyluWym2")) ; Zmień nazwę Stylu wymiarowania na swoją (vlax-for dim (vla-get-Dimstyles (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))) (if (vl-position (vla-get-Name dim) dimlst) (progn (vla-put-activeDimstyle doc dim) (setvar "DIMADEC" 3) ; Określ dokładność wymiaru kątowego (vla-copyfrom dim doc)))) Plik Lisp do modyfikacji załączony jest do posta. ModKątWymStyl.lsp
  4. @olgierd Odtworzyłem u siebie sytuację w najnowszym ZWCADzie 2025 (system Windows 11) i problem nie występuje. Link do pobrania w poście @pawmal 🙂
  5. Najprawdopodobniej Corel nie obsługuje najnowszych formatów DXF w których zapisuje ZWCAD. Przy zapisie pliku możesz wybrać starsze formaty. Zapisz w kilku i sprawdź które obsługuje twój program.
  6. @MLE zwróć uwagę na sposób edycji, u mnie bez problemu da się zmienić wartość na znaku B-18. Najpierw wchodzę w Edycję bloku który jest znakiem F5, później wchodzę w Edycję atrybutów znaku B-18 (dwukrotnie kliknięcie lewym przyciskiem myszy na blok). Po zapisaniu zmian nowa wartość pojawia się na głównym znaku.
  7. Czy były importowane ustawienia ze starszych wersji?
  8. Czy w komputerze jest dedykowana karta graficzna i jest włączone przyspieszenie sprzętowe? Sprawdź proszę ile waży zawartość folderu z plikami tymczasowymi %TEMP%. Jeśli jego zawartość przekracza 500MB to warto go wyczyścić.
  9. Hej, Jaką masz wersję programu? Sprawdź to poleceniem VERNUM. Podaj proszę specyfikację komputera.
  10. Dzień dobry, Ad 1. Zmiana kolorów True Color na kolory indeksowane nie występuje w wersji 2024. W ramach licencji 2025 zabezpieczonej kodem programowym ma Pan prawo do korzystania z wersji 2024 (link do wersji 2024 SP 1.5). Działanie wersji 2025 został zgłoszony do producenta. Ad 2. Warstwy w edycji stanu warstw sortują się domyślnie tak samo jak w Menadżerze Warstw. Najpierw wyświetlają się warstwy załączników zgodnie z kolejnością alfabetyczną, warstwy w XRef'ach również sortują się alfabetycznie, jako ostatnie wyświetlają się warstwy rysunku na którym obecnie pracujemy. Ad 3. Stan warstw zapisuje wszystkie warstwy w rysunku, włącznie z rozładowanymi XRefami. Po przejrzeniu ustawień nie znalazłem sposobu, żeby to zmienić. Ad 4. Pliki LAS to warstwy opisane kodami DXF. Należało by tutaj przekonwertować wartości kodów lub odpowiednio zdefiniować tworzenie tabeli na podstawie kodu. Kod DXF zastosowany w pliku LAS. 1 - Nazwa stanu warstw 8 - Nazwa warstwy 62 - Kolor 6 - Rodzaj linii 370 - Grubość linii ("-3" - domyślna, "18" - 0.18mm, "200" - 2.00mm itd.) 2 - Styl wydruku 90 - Stan warstwy (zapisany w systemie dwójkowym), warstwa włączona, niezamrożona, niezablokowana ma wartość 8
  11. Jeśli masz współrzędne X, Y, Z to musisz użyć funkcji 3WPLINIA (_3DPOLY). Jeśli są współrzędne X, Y to po prostu wybierz funkcję rysowania polilinii i wklej w pasku poleceń współrzędne. Współrzędne muszą być oddzielone przecinkami, a punkty Enterem. Muszą mieć formę 1.0,2.0,3.0, czyli w tym przykładzie X=1.0, Y=2.0, Z=3.0.
  12. Definicję linii należy traktować jako własność intelektualną. Nie da się jej wyciągnąć z rysunku, można ją odtworzyć lub poprosić autora o dostarczenie pliku .lin.
  13. Hej, Jak możesz to podeślij rysunek w wiadomości prywatnej. Ciężko ze zrzutu wyciągnąć jakieś wnioski.
  14. Sprawdziłem i nazwy warstw nie są "czułe" na wielkość liter. Cieszę się, że udało się doprowadzić skrypt do ładu 👌
  15. Hej, Sama funkcja _.-laydel działa bez problemu w wersji 2025. Spróbuj użyć takiego prostego skryptu u siebie. (defun c:dellayerstest (/ ) (setq l "6 pomoc 01") (command "_.-laydel" "_N" l "" "_Y" "") ) Problem w tym skrypcie leży raczej w zdefiniowaniu listy z nazwami warstw.
  16. Skrypt ma rozszerzenie zelx także jest zaszyfrowany dla programów z rodziny ZWCAD.
  17. Hej, Napisałem skrypt który przepisuje wartość atrybutu o wskazanej nazwie do hiperłącza w wybranych blokach. Zwróć uwagę na wielkość liter w nazwach, ponieważ ma ona znaczenie. Skrypt uruchamia polecenie PrzepiszDoHiperlinku. (vl-load-com) (princ (strcat " Copyright © 2000 — 2025 Usługi Informatyczne Szansa www.zwcad.pl Dostępne polecenia: PRZEPISZDOHIPERLINKU - skrypt automatycznie przepisuje wartość wskazanego atrybutu do hiperłącza w wybranych blokach ") ) (defun LM:vl-getattributevalue ( blk tag ) (setq tag (strcase tag)) (vl-some '(lambda ( att ) (if (= tag (strcase (vla-get-tagstring att))) (vla-get-textstring att))) (vlax-invoke blk 'getattributes)) ) (defun C:PRZEPISZDOHIPERLINKU (/ blockName przepiszVal ss i ent val) (setq blockName (getstring t "\nWpisz nazwę bloku: ")) (setq attName (getstring t "\nWpisz nazwę atrybutu: ")) (setq ss (ssget "_X" (list (cons 2 blockName)))) (setq i 0) (repeat (sslength ss) (setq ent (ssname ss i)) (setq obj (vlax-ename->vla-object ent)) (setq val (LM:vl-getattributevalue obj attName)) (vla-add (vla-get-hyperlinks obj) val (vl-filename-base val)) (setq i (+ i 1)) ) (princ) ) PrzepiszDoHiperlinku.lsp
  18. Hej, Warto naprawić rysunek poleceniem TEST, skopiować całość skrótem Ctrl + A -> Ctrl + C i wkleić w nowym rysunku z oryginalnymi współrzędnymi poleceniem _PASTEORIG. Dla bezpieczeństwa rysunek warto zapisać pod nową nazwą. Możesz też podesłać rysunek w wiadomości prywatnej, sprawdzę zachowanie u siebie.
  19. Hej, Ile znaków mają nazwy tych plików? Czy w nazwie rysunku lub ścieżce są polskie znaki? Spróbowałem z plikiem którego nazwa ma ponad 100 znaków i wgrał się bez przeszkód. Być może problem leży w czymś innym. Jeśli możesz to podeślij przykładowy plik który jest pomijany w wiadomości prywatnej.
  20. Tak, wybierając rysowanie polilinii w trybie łuku można określić kąt. Poniżej podpowiedź jak wygląda pasek poleceń w angielskiej wersji językowej. Edycję kodu zostawiam Tobie 🙂
  21. W takim razie musisz jak na nagraniu zrobić to w dwóch krokach, tj. z dwóch segmentów. Edytując Twój skrypt może to wyglądać na przykład: (defun c:kolko1 () (setq p1(getpoint "Wskaż początek łuku:")) (setq p2(getpoint "Wskaż koniec łuku:")) (setq p3 (list p1)) (command "_.pline" p1 "_a" p2 p3 "") (command "_.pline" p2 "_a" p1 p3 "") (prompt "Okrąg został narysowany") ) Wydaje mi się, że punkt p3 jest zbędny, wielkość łuku polilinii zależy od kąta pomiędzy punktami.
  22. Hej, @mili napisz co dokładnie ma robić twój skrypt. Dla wygody własnej i innych twórców warto dodawać komentarze do swoich programów. W języku LISP są poprzedzone średnikiem, np. ;Zapisanie współrzędnych pierwszego punktu w zmiennej p1 Skrypt z twojej wiadomości tworzy polilinię która jest łukiem. Jeśli dobrze rozumiem, że chcesz stworzyć okrąg pojedynczym segmentem polilinii to chyba nie da się tego zrobić.
  23. Żeby uściślić, chcesz najpierw określić kąt obrotu skopiowanego elementu i później go wkleić w we wskazanym punkcie? Kąt obrotu chcesz określić na ekranie czy wpisując w pasku poleceń?
  24. Hej, Chodzi o to, żeby skopiować element i w trakcie wklejania poza miejscem określić także kąt? W nakładce ZWToolbox jest funkcja Kopiuj poprzez obrót, może to jakoś ułatwi twoje zadanie. Działanie funkcji pokazałem na poniższym nagraniu.
  25. Dodałem kilka linijek do twojego programu które tworzą blok. Można podejść do sprawy na kilka sposobów, ja wybrałem dość podstawowy. Współrzędne lewego dolnego rogu zapisałem w zmiennej PU0. Po stworzeniu konstrukcji w zmiennej BlkName zostaje zapisana nazwa nowo utworzonego bloku według twojego opisu. Tutaj warto dodać jakieś wyróżnienie, w przypadku duplikatu program jest przerwany komunikatem. Później blok zostaje stworzony ze zbioru wybranego funkcją ssget. "_W" zaznacza obiekty w oknie opisanym podobniej jak prostokąt, lewy dolny róg PU0 i prawy górny róg PU2. Po utworzeniu blok jest wstawiony poleceniem _insert, ponieważ znika on z rysunku. Kod programu poniżej (DEFUN C:KONS (/ W H K O L R PU H_NEW X0 Y0 X_START Y_START PU0 PU2 BlkName) (SETQ W (GETREAL "\nPodaj szerokosc modulu: ")) (SETQ H (GETREAL "\nPodaj wysokosc modulu: ")) (SETQ K (GETREAL "\nPodaj kat nachylenia konstrukcji (w stopniach): ")) (SETQ O (GETREAL "\nPodaj odstep miedzy modulami: ")) (SETQ L (fix (GETREAL "\nPodaj ilosc modulow w poziomie: "))) ; Konwersja na typ całkowity (SETQ R (fix (GETREAL "\nPodaj ilosc modulow w pionie: "))) ; Konwersja na typ całkowity (SETQ PU (GETPOINT "\nPodaj naroznik konstrukcji PV: ")) ;; Obliczenie nowej wysokości (SETQ H_NEW (* H (COS (* K (/ PI 180.0))))) ; Konwersja kąta na radiany ;; WYZNACZENIE PRZECIWLEGŁEGO NAROŻNIKA MODUŁU (SETQ X0 (CAR PU)) (SETQ Y0 (CADR PU)) (SETQ X_START X0) ; Zapisanie początkowego X (SETQ Y_START Y0) ; Zapisanie początkowego Y (SETQ PU0 (list X_START Y_START )) ;Zapisanie współrzędnych lewego dolnego rogu konstrukcji w zmiannej PU0 ;; RYSOWANIE MODUŁÓW (repeat L (progn (repeat R (progn (SETQ PU2 (list (+ X0 W) (+ Y0 H_NEW))) ;; RYSOWANIE PROSTOKĄTA (COMMAND "_RECTANG" PU PU2) ;; Przesunięcie w dół o wysokość i odstępu modułu (SETQ Y0 (+ Y0 H_NEW O)) ; Y0 zwiększamy o nową wysokość i odstęp (SETQ PU (list X0 Y0)) ; Nowy punkt startowy ) ) ;; Przesunięcie w prawo o szerokość modułu i zadany odstęp (SETQ X0 (+ X0 W O)) ; X0 zwiększamy o szerokość i odstęp (SETQ Y0 Y_START) ; Resetowanie Y0 do początkowej wartości (SETQ PU (list X0 Y0)) ; Nowy punkt startowy ) ) (setq BlkName (strcat "Konstrukcja " (itoa L) " x " (itoa R))) ;Stworzenie nazwy nowego bloku i zapisanie jej w zmiennej BlkName (command "_Block" BlkName PU0 (ssget "_W" PU0 PU2) "") ;Stworzenie Bloku nazwanego BlkName z punktem bazowym w lewym dolnym rogu konstrukcji (command "_Insert" BlkName PU0 "" "" "") ;Wstawienie bloku który znika po utworzeniu )