Adam_x
Użytkownik forum-
Postów
10 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
2
Ostatnia wygrana Adam_x w dniu 12 Sierpnia 2021
Użytkownicy przyznają Adam_x punkty reputacji!
Ostatnie wizyty
Blok z ostatnimi odwiedzającymi dany profil jest wyłączony i nie jest wyświetlany użytkownikom.
Osiągnięcia Adam_x
Początkujący (1/6)
4
Reputacja
-
ZWCAD - Bloki dynamiczne i atrybuty
Adam_x odpowiedział(a) na pop3k temat w Wsparcie programistyczne LISP i VisualLISP
Witam tutaj przykład programu na zmianę koloru atrybutu bloku : On Error Resume Next ThisDrawing.SelectionSets.Item("grupa1").Delete Dim sset1 As ZcadSelectionSet Dim ent As ZcadEntity Dim blk As ZcadBlockReference Set sset1 = ThisDrawing.SelectionSets.Add("grupa1") Dim att1 As Variant ThisDrawing.Utility.Prompt ("wskaż obiekt(y) bloki z atrybutami") sset1.SelectOnScreen For Each ent In sset1 If ent.ObjectName = "AcDbBlockReference" And ent.HasAttributes = True Then Set blk = ent att1 = blk.GetAttributes att1(0).color = "3" 'tutaj trzeba wpisać nr. atrybutu gdzie 0 to pierwszy itd... a 3 to nr. koloru End If Next PS. Może by lepiej było stworzyć jakąś tabelkę ?, który by wyciągał potrzebne informację z bloku dynamicznego. np. mamy 50 takich bloków "zbrojenia" czyli 50 wierszy z kolumnami "długość pręta", "rozpiętość", "współrzędna x", "współrzędna y" dodatkowo w kolumnie by był numer unikatowy bloku "thisdrawing.ModelSpace.Item(numer)" czy uchwyt bloku wtedy można by taką tabelkę aktualizować. (pobierał by numer z tabelki do vba). + najlepiej z datą ostatniej modyfikacji (jeżeli w ogóle zwcad posiada takie dane) ale nie wiem czy takie makro w ogóle można stworzyć ? więc to takie moje teoretyczne rozważania -
dmatusz3 zareagował(a) na odpowiedź w temacie: Zamiana obiektów aka znajdź i zamień
-
Zamiana obiektów aka znajdź i zamień
Adam_x odpowiedział(a) na kacper1710 temat w Wsparcie programistyczne LISP i VisualLISP
Witam Tak na szybko zrobiłem program ale w VisualBasic, udało mi się przerobić nim wszystkie bloki w rysunku. proszę zobaczyć czy działa z tym Pana plikiem od dialuxa ? nie jestem ekspertem od LISP więc, jak ktoś chce może go przerobić na wersję LISP. oczywiście ten program będzie działać tylko z blokami (anonimowymi) eksportowanymi z dialuxa. ps. na innych forach np: autacada jest pełno takich rozwiązań więc może Pan też tam poszukać w razie czego. pozdrawiam Adam blk_anonim_dialux.zvb -
dmatusz3 zareagował(a) na odpowiedź w temacie: ZWCAD - Bloki dynamiczne i atrybuty
-
ZWCAD - Bloki dynamiczne i atrybuty
Adam_x odpowiedział(a) na pop3k temat w Wsparcie programistyczne LISP i VisualLISP
Witam kiedyś napisałem taki program który odczytuje parametry bloku dynamicznego: sub program() On Error Resume Next Dim z As Double Dim x As Double Dim ent As ZcadEntity Dim blk1 As ZcadBlockReference Dim ContextData As Variant Dim sset1 As ZcadSelectionSet Dim dynblk As ZcadDynamicBlockReferenceProperty Set sset1 = ThisDrawing.SelectionSets.Add("grupa1") ThisDrawing.Utility.Prompt ("wybierz bloki dynamiczne :") sset1.SelectOnScreen z = ThisDrawing.Utility.GetInteger("wybierz nr. zmiennej bloku dyn : ") z = z - 1 For Each ent In sset1 If ent.ObjectName = "AcDbBlockReference" Then Set blk1 = ent If blk1.IsDynamicBlock = True Then ContextData = blk1.GetDynamicBlockProperties Set dynblk = ContextData(z) x = x + dynblk.Value End If End If Next ThisDrawing.Utility.Prompt ("calkowita suma współczynnika (" & dynblk.PropertyName & ") wynosi = " & x) ThisDrawing.Utility.Prompt (" ") end sub teraz wystarczy go tylko przerobić do potrzeb. zrobiłem też taki blok dynamiczny powiązany z wymiarem z nudów, może taka wersja będzie wystarczająca ?? informacja o długości pręta i rozstawienia jest wyświetlona. pozdrawiam blok_pret.dwg -
alf zareagował(a) na odpowiedź w temacie: Progam do odczytywania rzędnej wysokościowej punktu ?
-
Mery zareagował(a) na odpowiedź w temacie: Progam do odczytywania rzędnej wysokościowej punktu ?
-
Progam do odczytywania rzędnej wysokościowej punktu ?
Adam_x odpowiedział(a) na Adam_x temat w Wsparcie programistyczne LISP i VisualLISP
Witam np: do stworzenia profilu ścieżki podejścia lądowania samolotów czy helikopterów czy też sprawdzenia na jakiej głębokości umieścić studnię kablową itd. architektom, konstruktorom też by się przydało oczywiście dla dokładnych pomiarów trzeba wynająć geodetę, ale do wstępnych wyliczeń może się taka funkcja przydać. jak miałbym każdy punkt teraz wpisywać do strony internetowej czy w jakimś innym programie robić i importować do ZWCADA to bym się chyba powiesił ps. perlon, kruszynski, dmateusz3 dziękuje za pomoc. pozdrawiam -
Progam do odczytywania rzędnej wysokościowej punktu ?
Adam_x odpowiedział(a) na Adam_x temat w Wsparcie programistyczne LISP i VisualLISP
Witam Najlepiej w LISP. Program ma działać z programu ZWCAD, automatycznie. Wpisuje komendę lub klikam przycisk polecenia w ZWCAD i działa, tak by było najlepiej. perlon - a ten ".NET" można powiązać z przyciskiem polecenia lub poprzez jakieś polecenie wpisywane w ZWCAD ? ja tylko wiem o obsłudze LISP i Visual Basic przez ZWCAD. pozdrawiam -
Witam Jest taka strona internetowa : Głównego Urzędu Geodezji i Kartografii : http://services.gugik.gov.pl/nmt/ na niej jest możliwość uzyskania punktu rzędnej wysokościowej znając współrzędną x i y wystarczy wkleić jako link strony dla współrzędnej x=486617 i y=637928 np: https://services.gugik.gov.pl/nmt/?request=GetHByXY&x=486617&y=637928 gdzie x, y - współrzędne w układzie PUWG92 pojawi się wysokość punktu z=110.5 Teraz chodzi o to aby napisać program w LISP, który : - tworzy punkt w ZWCAD, odczytuje jego współrzędne x i y - tworzy adres strony odpowiednio ze współrzędną x i y - łączy się ze stroną internetową i kopiuje podany punkt wysokości z do programu (głównie chodzi o tą część) - przesuwa wcześniej wstawiony punkt na odpowiednią wysokość współrzędnej z Pytanie czy ma ktoś jakiś pomysł i czy jest możliwe by taki program działał w LISP(ZWCAD) ? tutaj mała podpowiedź, gdzieś w internecie znalazłem ale nie wiem jak ten fragment kodu wykorzystać ? (nie jestem aż tak biegły w LISP) (defun c:geturltext ( url / obj rtn ) (if (setq obj (vlax-create-object "winhttp.winhttprequest.5.1")) (progn (setq rtn (vl-catch-all-apply '(lambda nil (vlax-invoke-method obj 'open "GET" url :vlax-false) (vlax-invoke-method obj 'send) (vlax-get-property obj 'responsebody) ) ) ) (vlax-release-object obj) (if (vl-catch-all-error-p rtn) (prompt (vl-catch-all-error-message rtn)) (vl-list->string (mapcar '(lambda ( x ) (lsh (lsh x 24) -24)) (vlax-safearray->list (vlax-variant-value rtn)) ) ) ) ) ) ) z góry dziękuje za każdą podpowiedź Pozdrawiam Adam
-
Program obracania o 90 stopni bloku prawym przycisk. myszy
Adam_x odpowiedział(a) na Adam_x temat w Wsparcie programistyczne LISP i VisualLISP
Witam jak mam wstawić ze 100 gniazdek elektrycznych i wystarczy tylko obrót 90 stopni to chyba wolę jednak moją wersję . nawet jakby zmienić na obrót 90 w tej wersji to pozostaje jeszcze kwestia wygody ja wolę myszką kliknąć -
Program obracania o 90 stopni bloku prawym przycisk. myszy
Adam_x odpowiedział(a) na Adam_x temat w Wsparcie programistyczne LISP i VisualLISP
Napisano 20 godzin temu "Wydaje mi się, że pod kursorem niczego nie ma, bo po naciśnięciu klawisza Enter wykonuje się kopiowania w innej części rysunku. Natomiast po ruchu myszką wraca podgląd. Proszę oddalić rysunek i spróbować." a to dziwne ponieważ u mnie niczego nie kopiuje (dodatkowo) w innej części rysunku, klawisz enter obraca tylko blok źródłowy to wszystko. Jak coś mam wersję z 2019r. ZWCADA, może przez to, że ma Pan włączone śledzenie biegunowe, śledzenie lokalizacji lub coś innego ?. -
Program obracania o 90 stopni bloku prawym przycisk. myszy
Adam_x odpowiedział(a) na Adam_x temat w Wsparcie programistyczne LISP i VisualLISP
hmm Program ma wykonywać pętle, a jedyny sposób na wyjście z pętli jest klawisz ESC czyli program wchodzi w *error* -
Adam_x obserwuje zawartość Program obracania o 90 stopni bloku prawym przycisk. myszy
-
Witam Ostatnio stworzyłem program do obracania dowolnego bloku o 90 stopni. po uruchomieniu w ZWCAD wybieramy blok, blok jest kopiowany, następnie po wciśnięciu prawego przycisku myszy jest obracany o 90 stopni i można wkleić (razem z blokiem źródłowym po wciśnięciu esc obrót bloku źródłowego wraca do stanu pierwotnego) wstępnie wszystko działa jak należy, lecz jest jedno ale : jak wciskam prawy przycisk myszy, a wskaźnik pozostaje nieruchomo to obraz bloku jest niewidoczny. Dopiero minimalny ruch myszy pokazuje blok w miejscu wskaźnika myszy. Jeżeli ktoś ma pomysł dlaczego tak się dzieje proszę o podpowiedź, ewentualnie jak to zmodyfikować by blok był zawsze widoczny. poniżej kod programu lub w załączniku : (defun c:xxx () (setq temperr *error*) (setq *error* trap) (setq ssetBlockSource(ssget "_:S:E" '((0 . "INSERT")))) (setq punktsrod (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint (vlax-ename->vla-object (ssname ssetBlockSource 0)))))) (setq blok(entget(ssname ssetBlockSource 0))) (setq rotacja1(/ (* 180 (cdr(assoc 50 blok))) pi)) (setq currInsertionPoint(trans punktsrod 0 1 nil)) (while (= 1 1) (setq info(getvar 'lastprompt)) (cond ((= info "Polecenie: ") (progn (command "" "_rotate" ssetBlockSource "" currInsertionPoint -90 "") (command "" "_copy" ssetBlockSource "" "w" currInsertionPoint "@" "c") ) ) ((/= info "Polecenie: ") (progn (command "" "_copy" ssetBlockSource "" "w" currInsertionPoint "@" "c" pause "") ) ) ) ) ) (defun trap (errmsg) (setq *error* temperr) (setq blok(entget(ssname ssetBlockSource 0))) (setq rotacja2(/ (* 180 (cdr(assoc 50 blok))) pi)) (setq rotacja(rtos (- rotacja1 rotacja2) 2 2)) (command "_rotate" ssetBlockSource "" currInsertionPoint rotacja "") (princ) ) LISP_1.lsp