wedzik Opublikowano 29 Października 2020 Zgłoś Opublikowano 29 Października 2020 Potrzebowałbym taką funkcję do kopiowania (a może już jest?): wybieram funkcje i zaznaczam element teraz mogę wpisać odległość albo zmierzyć myszą dopiero teraz wskazuję punkt bazowy i kierunek po naciśnięciu enter program wykonuje kopię w wybranym kierunku po kolejnych naciśnięciach entera tworzone są kolejne kopie w takiej samej odległości od ostatniej kopi jak odległość w punkcie 2 i w tym samym kierunku - czyli jak w punkcie 2 wpisze odległość 60, to kopie będą w 60, 120, 180, 240, 300 itp. Cytuj
Adam Klaczek Opublikowano 29 Października 2020 Zgłoś Opublikowano 29 Października 2020 Może kopiowanie z szykiem? kruszynski i wedzik 1 1 Cytuj
wedzik Opublikowano 29 Października 2020 Autor Zgłoś Opublikowano 29 Października 2020 Dzięki za zainteresowanie. Nie znałem tego sposobu. Ale nie do końca mi pasuje bo muszę znać liczbę powtórzeń na początku. Dodatkowo chciałbym ustawić odległość powtórzeń, a dopiero potem kierunek Cytuj
Adam Klaczek Opublikowano 29 Października 2020 Zgłoś Opublikowano 29 Października 2020 Może kopiować ze skokiem biegunowym i śledzeniem? dmatusz3 1 Cytuj
kruszynski Opublikowano 29 Października 2020 Zgłoś Opublikowano 29 Października 2020 A tak z ciekawości: W jakich sytuacjach taka funkcja może się przydać? Cytuj
wedzik Opublikowano 29 Października 2020 Autor Zgłoś Opublikowano 29 Października 2020 Chciałbym np. zrobić szyk na tej górnej lini w takiej samej odległości jak pomiędzy okręgami na dolnej. Mogę sobie skopiować okręgi, potem obrócić ustawić odniesienie a potem kopiować ręcznie brakujące. Albo mierzyć, pamiętać, wpisywać. A tak: wybieram element,dwa kliki mam odległość wskazuję kierunek a każdy enter to kolejne powtórzenie. Cytuj
dmatusz3 Opublikowano 29 Października 2020 Zgłoś Opublikowano 29 Października 2020 Dobrze, dzięki za informacje, postaramy się jutro wymyślić jakiś skrypt. Cytuj
Martin_S Opublikowano 29 Października 2020 Zgłoś Opublikowano 29 Października 2020 Coś podobnego można zrobić w ZWCAD ARCHITECTURE np. 2019-2020, ale brakuje mi starego 2015 ZWA2019-TEST1.dwg Cytuj
kruszynski Opublikowano 30 Października 2020 Zgłoś Opublikowano 30 Października 2020 Wygląda trochę jak jedna z funkcji naszego ZWGEO: https://youtu.be/E0pC28T7E-M Wiecej tutaj https://www.zwcad.pl/ui-szansa/zwgeo.html Cytuj
kruszynski Opublikowano 30 Października 2020 Zgłoś Opublikowano 30 Października 2020 Taki skrypt mógłby wyglądać np tak: (defun C:SzykManualny ( / element odleglosc bazowy kierunek Koniec licznik kopiuj *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nC:SzykManualny:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq Koniec "" licznik 1 ) (defun kopiuj ( / v1 *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nkopiuj:*error*: " ) (princ msg ) (princ "\n") ) ) ) ( setq v1 ( Vector:Normalize ( Vector: kierunek bazowy ) ) ) ( setq v ( Vector:XScalar v1 (* odleglosc licznik ) ) ) ( setq clone (vlax-invoke-method element 'Copy) ) ( setq px (Vector+ bazowy v )) (vlax-invoke-method clone 'Move (vlax-3d-point bazowy) (vlax-3d-point px) ) (setq licznik (1+ licznik)) ) (setq element (SelSet:Entsel "Wskaż element" nil)) (if (null element) (*error* nil) ) (setq odleglosc (ZWCAD:GetDist "Podaj odległość" poprzedniaOdleglosc)) (if (null odleglosc) (*error* nil) ) (setq bazowy (ZWCAD:Getpoint "Wskaż punkt bazowy" nil nil ) ) (if (null bazowy) (*error* nil) ) (setq kierunek (ZWCAD:Getpoint "Wskaż kierunek" bazowy nil ) ) (if (null kierunek) (*error* nil) ) (while (equal Koniec "") ( kopiuj ) (setq Koniec ( ZWCAD:GetString "Czy wstawić kolejny" "" ) ) ) (setq poprzedniaOdleglosc odleglosc) (princ) ) (defun Vector: ( A B / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nVector::*error*: " ) (princ msg ) (princ "\n") ) ) ) (list (- (car A) (car B ) ) (- (cadr A) (cadr B ) ) (- (caddr A) (caddr B ) ) ) ) (defun Vector:Length (vec / s *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nVector:Length:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq s (+ (* (car vec) (car vec) ) (* (cadr vec) (cadr vec) ) (* (caddr vec) (caddr vec) ))) (if (< s 0.0000000000001 ) 0.0 (sqrt s )) ) (defun Vector:Normalize (v / len *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nVector:Normalize:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq len (Vector:Length v) ) (if (< len 0.00000001) (list 0.0 0.0 0.0 ) (progn (list (/ (car v ) len) (/ (cadr v ) len) (/ (caddr v ) len) ) ) ) ) (defun Vector:XScalar (v s / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nVector:XScalar :*error*: " ) (princ msg ) (princ "\n") ) ) ) (mapcar '(lambda (x) (* x s) ) v ) ) (defun Vector+ (A B / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n Vector+ : *error*: " ) (princ msg ) (princ "\n") ) ) ) (if (null A) (setq A (list 0.0 0.0 0.0 ) )) (if (null B) (setq B (list 0.0 0.0 0.0 ) )) (list (+ (car A ) (car B) ) (+ (cadr A ) (cadr B) ) (+ (caddr A ) (caddr B ) ) ) ) (defun SelSet:Entsel (tresc filter / OldNoMutt MSel OutVal *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nSelSet:Entsel:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq tresc (strcat "\n" tresc ": ") ) (prompt tresc ) (setq OldNoMutt (getvar 'NOMUTT)) (setvar 'NOMUTT 1) (setq MSel (if (null filter) (vl-catch-all-apply 'ssget (list ":S:E" )) (vl-catch-all-apply 'ssget (list ":S:E" filter )) ) ) (setvar 'NOMUTT OldNoMutt ) (if (vl-catch-all-error-p MSel) (progn (prompt (vl-catch-all-error-message MSel)) ) (progn (if MSel (progn (setq OutVal (vlax-ename->vla-object (ssname MSel 0)) ) )) ) ) OutVal ) (defun ZWCAD:GetDist (tresc domyslny / Wynik trescformat liczba *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nZWCAD:GetDist:*error*: " ) (princ msg ) (princ "\n") ) ) ) (if domyslny (if (numberp domyslny) (setq tresc (strcat tresc "<" (rtos domyslny 2 4) ">") ))) (setq tresc (strcat "\n" tresc ": ")) (setq liczba(vl-catch-all-apply 'getdist (list tresc ))) (if (vl-catch-all-error-p liczba) (progn (prompt (vl-catch-all-error-message liczba)) (setq Wynik nil ) ) (progn (if (null liczba) (setq Wynik domyslny ) (setq Wynik liczba) ) ) ) Wynik ) (defun ZWCAD:Getpoint (tresc P0 domyslny / SelPt Wynik *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nZWCAD:Getpoint:*error*: " ) (princ msg ) (princ "\n") ) ) ) ;(ZWCAD:Getpoint tresc P0 domyslny ) (setq tresc (strcat "\n" tresc ": ")) (if (not(null P0)) (setq SelPt(vl-catch-all-apply 'getpoint (list P0 tresc ))) (setq SelPt(vl-catch-all-apply 'getpoint (list tresc ))) ) (if (vl-catch-all-error-p SelPt) (progn (prompt (vl-catch-all-error-message SelPt)) (setq Wynik nil ) ) (progn (if (null SelPt) (setq Wynik domyslny ) (setq Wynik SelPt) ) ) ) Wynik ) (defun ZWCAD:GetString (tresc domyslny / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nZWCAD:GetString:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq tresc (strcat "\n" tresc ": ")) (String:Get tresc domyslny) ) (defun String:Get (komunikat defVal / Wynik tekst *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nString:Get:*error*: " ) (princ msg ) (princ "\n") ) ) ) ; (setq komunikat "podaj tekst" ) ; (setq defVal "SLU" ) (if defVal (if (not(= defVal "")) (setq komunikat (strcat komunikat "<" defVal ">:" ) )) ) (setq tekst(vl-catch-all-apply 'getstring (list komunikat ))) (if (vl-catch-all-error-p tekst) (progn (prompt (vl-catch-all-error-message tekst)) (setq Wynik nil ) ) (progn (if (null tekst) (setq Wynik defVal ) (if (= tekst "") (setq Wynik defVal ) (if (= tekst ".") (setq Wynik "") (setq Wynik tekst) ) ) ) ) ) Wynik ) Szyk.lsp wedzik 1 Cytuj
Adam Klaczek Opublikowano 30 Października 2020 Zgłoś Opublikowano 30 Października 2020 Również polecenie MEASURE... Jeżeli okrąg zapisać jako blok, zadziała tak: wedzik 1 Cytuj
wedzik Opublikowano 30 Października 2020 Autor Zgłoś Opublikowano 30 Października 2020 Dziękuję. Bardzo mi to ułatwi życie. Jest nawet lepiej niż myślałem bo można wybrać dowolny punkt bazowy. Jeden tylko problem mam,że mogę wskazać tylko jeden element do kopiowania a chciałbym móc zaznaczyć więcej obiektów. Cytuj
Adam Klaczek Opublikowano 30 Października 2020 Zgłoś Opublikowano 30 Października 2020 6 minut temu, wedzik napisał: [...] chciałbym móc zaznaczyć więcej obiektów. Wszystkie musiały by być w bloku Cytuj
Martin_S Opublikowano 30 Października 2020 Zgłoś Opublikowano 30 Października 2020 4 godziny temu, kruszynski napisał: Wygląda trochę jak jedna z funkcji naszego ZWGEO: https://youtu.be/E0pC28T7E-M Wiecej tutaj https://www.zwcad.pl/ui-szansa/zwgeo.html dokładnie tak , to przykład praktycznego oznaczania "ogrodzenia" na np. planie zagospodarowania wg normy polskiej Cytuj
dmatusz3 Opublikowano 30 Października 2020 Zgłoś Opublikowano 30 Października 2020 4 godziny temu, kruszynski napisał: Wygląda trochę jak jedna z funkcji naszego ZWGEO: Wkrótce odbędzie się webinarium ZWGeo, na którym pokażemy jak pracować z mapami cyfrowymi Zapraszam Cytuj
kruszynski Opublikowano 30 Października 2020 Zgłoś Opublikowano 30 Października 2020 W załączniku aktualizacja pozwalająca wskazywać wiele elementów Szyk.lsp dmatusz3 i wedzik 2 Cytuj
dmatusz3 Opublikowano 30 Października 2020 Zgłoś Opublikowano 30 Października 2020 Nagrałem krótki film pokazujący jak działa skrypt. wedzik 1 Cytuj
wedzik Opublikowano 2 Listopada 2020 Autor Zgłoś Opublikowano 2 Listopada 2020 Dziękuję za pomoc! Skrypt jest świetny. Tego właśnie potrzebowałem. Cytuj
zwonko Opublikowano 24 Sierpnia 2021 Zgłoś Opublikowano 24 Sierpnia 2021 KIedyś, myślałem o czymś podobnym. Dla mnie lepiej by było gdyby wskazywać rozstaw, a potem punkt poczatkowy i końcowy. Najlepiej żeby z obiektów była tworzona grupa. Nie lubie szyków, ani nowego (ARRAY w ZWCAD 2021) ani starego (ARRAY CLASSIC), zresztą nie zawsze są dla mnie wystarczające bo czasem musze obiekt przestawić, tj. pojedynczy element nie ma takiego samego rozstawu (rysowanie zbrojenia). Dzisiaj chyba to co chciał osiągnąć autor można robić "nowym" szykiem (polecenie ZWCAD 2021) Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.