-
Postów
1474 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
93
Treść opublikowana przez kruszynski
-
Spotkałem się kiedyś z taką sytuacją, gdzie znaki wstawiały się w nieproporcjonalnej skali. Chyba właśnie x 100. Problem wynikał z tego że w tym projekcie były wcześniej zdefiniowane bloki o nazwach takich jak symbole znaków np "A-1" "B-33" ale w innych jednostkach. Może to pochodziło z jakiejś prywatnej biblioteki znaków innego uczestnika projektu. Rozwiązaniem było zmienić nazwy bloków istniejących znaków. Użyliśmy do tego funkcji NNAZWA(_RENAME). po zmianie nazw starych bloków, znaki wstawiały się poprawnie.
-
OK, dziękuję za szczegóły, uzupełniłem zgłoszenie do ZWSOFT.
-
Coś mi tu jeszcze nie pasuje. Kiedy dodałem skrót z makrem '_-view _r A Przerwało polecenie, Kiedy pisałem zgłoszenie do ZWSoft chciałem sprawdzić jeszcze raz jaka dokładnie jest treść makra, i wygląda na to że system z automatu dopisał tam ^C^C Czyli właśnie polecenie do przerywania aktualnej funkcji. Więc usunąłem to ^C^C. Przy następnej próbie już nie przerwało polecenia, ale kiedy użyłem skrót w czasie gdy jakaś funkcja była aktywna, wpisało '_-view _r W miejsce parametrów spodziewanych przez aktualną funkcję. Chciałem też potwierdzić jak to działa w ZWCAD 2015+ w oknie polecenia CUI nie ma miejsca na skróty do kombinacji klawiszy. Gdzie zdefiniował Pan skrót w 2015+ ?
-
Dziękuję za zgłoszenie, potwierdzam że tak się dzieje i przekazałem temat do ZWSOFT. Dam znać jak czegoś się dowiem
-
Wstawianie map WMS z serwerów gov.pl
kruszynski odpowiedział(a) na dmatusz3 temat w ZWCAD Standard i Professional
Aktualizacja: Można wybierać katalog gdzie mają być zapisane mapy. Po usunięciu mapy z projektu, usuwa się też z katalogu ZWMS.zip -
W załączniku wersja dla ZWCAD 2015+ AddSelected.zel
-
Wstawianie map WMS z serwerów gov.pl
kruszynski odpowiedział(a) na dmatusz3 temat w ZWCAD Standard i Professional
Dziękuję za uwagi. 6. zmienię przy aktualizacji 7. raczej nie powinno być z tym problemu - dodam przy aktualizacji 8. może to efekt poniedziałku, albo ograniczeń ZWCADa, ale jak dla mnie to zbyt duży krok na teraz. 9. Są spore różnice na poziome nakładek pomiędzy ZWCADem 2018 a 2022. Nie chcąc zbytnio informolsko przynudzać powiem tylko że to się technologicznie nie da. -
Wstawianie map WMS z serwerów gov.pl
kruszynski odpowiedział(a) na dmatusz3 temat w ZWCAD Standard i Professional
Mam świeżynkę. można wpisać link do własnego serwera. jeśli nie uda się wstawić mapy i wyświetli komunikat mówiący że nieprawidłowa szerokość i wysokość, można wpisać mniejszą niż ta, którą serwer obiecuje, najczęściej pomaga. odptaszkowywanie już działa, ZWMS.zip -
lisp, generowanie kierunków/grotów strzałek na zadanej polilinii
kruszynski odpowiedział(a) na alf temat w ZWCAD Standard i Professional
OK, dorobiłem drugą funkcję, która wstawia symbole w załamaniach polilini nową funkcję można uruchomić poleceniem opisz (defun C:zzz ( / symb polilinia *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nC:zzz:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq symb ( SelSet:Entsel "Wybierz strzałkę" (list (cons 0 "INSERT" ))) ) (setq polilinia ( SelSet:Entsel "Wybierz polilinię" (list (cons 0 "*POLYLINE" ))) ) (while (not (null polilinia ) ) (wstawWSrodkuOdcinkow polilinia symb) (setq polilinia ( SelSet:Entsel "Wybierz polilinię" (list (cons 0 "*POLYLINE" ))) ) ) (princ) ) (defun C:opisz ( / symb polilinia *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nC:zzz:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq symb ( SelSet:Entsel "Wybierz symbol" (list (cons 0 "INSERT" ))) ) (setq polilinia ( SelSet:Entsel "Wybierz polilinię" (list (cons 0 "*POLYLINE" ))) ) (while (not (null polilinia ) ) (wstawWZalamaniach polilinia symb) (setq polilinia ( SelSet:Entsel "Wybierz polilinię" (list (cons 0 "*POLYLINE" ))) ) ) (princ) ) (defun wstawWSrodkuOdcinkow ( polilinia symb / ile i *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nwstawWSrodkuOdcinkow:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq ile (vlax-curve-getEndParam polilinia ) ) (setq i 1 ) (repeat (fix ile) (if (not (odcinekJestzbytkrotki polilinia i symb )) (progn (wstawWOdcinku polilinia i symb) ) ) (setq i (1+ i) ) ) ) (defun odcinekJestzbytkrotki ( polilinia i symb / d1 d0 dlugoscodcinka wielkoscsymbolu *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nodcinekJestzbytkrotki:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq d1(vlax-curve-getDistAtParam polilinia i)) (setq d0(vlax-curve-getDistAtParam polilinia (- i 1 ) ) ) (setq dlugoscodcinka (- d1 d0 ) ) (setq wielkoscsymbolu ( BoundingBox:Width ( BoundingBox symb ) ) ) (< dlugoscodcinka (* 3 wielkoscsymbolu) ) ) (defun wstawWOdcinku ( polilinia i symb / midparam px nowysymbol P0 ang *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nwstawWOdcinku:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq midparam (- i 0.5) ) (setq px (vlax-curve-getPointAtParam polilinia midparam ) ) (setq nowysymbol (vlax-invoke-method symb 'Copy ) ) (setq P0 (vlax-get-property nowysymbol 'InsertionPoint ) ) (vlax-invoke-method nowysymbol 'Move P0 (vlax-3d-point px ) ) (setq ang (vlax-curve-getFirstDeriv polilinia midparam) ) (vlax-put-property nowysymbol 'Rotation (angle (list 0 0 0 ) ang ) ) nowysymbol ) (defun wstawWZalamaniach ( polilinia symb / ile i *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nwstawWSrodkuOdcinkow:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq ile (vlax-curve-getEndParam polilinia ) ) (setq i 0 ) (repeat (1+(fix ile) ) (wstawWZalamaniu polilinia i symb) (setq i (1+ i) ) ) ) (defun wstawWZalamaniu ( polilinia i symb / px nowysymbol P0 ang *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nwstawWOdcinku:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq px (vlax-curve-getPointAtParam polilinia i ) ) (setq nowysymbol (vlax-invoke-method symb 'Copy ) ) (setq P0 (vlax-get-property nowysymbol 'InsertionPoint ) ) (vlax-invoke-method nowysymbol 'Move P0 (vlax-3d-point px ) ) (setq ang (vlax-curve-getFirstDeriv polilinia i) ) (vlax-put-property nowysymbol 'Rotation (angle (list 0 0 0 ) ang ) ) nowysymbol ) (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 BoundingBox (object / width height IP AP P1 P2 MoveVector *error*) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n BoundingBox : *error*: " ) (princ msg ) (princ "\n") ) ) ) (if (Object:IsErased object ) (*error* "object is erased" )) (setq ans(vl-catch-all-apply 'vlax-invoke-method (list object 'GetBoundingBox 'P1 'P2 ))) (if (vl-catch-all-error-p ans ) (progn (print ( vl-catch-all-error-message ans ) ) ) (progn (setq P1 (List:Factory P1 ) ) (setq P2 (List:Factory P2 ) ) ) ) (list P1 P2 ) ) (defun BoundingBox:Width ( bbox / *error*) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n BoundingBox:Width : *error*: " ) (princ msg ) (princ "\n") ) ) ) (- (car (cadr bbox) ) (car (car bbox) )) ) (defun List:Factory (InVal / OutVal AsList ; (setq mem InVal ) (setq InVal mem ) *error*) ( defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nList:Factory :*error*: " ) (princ msg ) (princ "\n") ) ) ) (cond ( ( = (type InVal) nil) nil) ( (vl-catch-all-error-p InVal) (progn (princ "Error trapped:" ) (princ InVal ) nil)) ( ( = (type InVal) 'LIST) InVal) ( ( = (type InVal) 'SAFEARRAY) (progn (setq AsList (vl-catch-all-apply 'vlax-safearray->list (list InVal ))) (if (vl-catch-all-error-p AsList) ( progn ( princ (vl-catch-all-error-message AsList ) ) nil ) ( progn AsList ) ) ) ) ( ( = (type InVal) 'VARIANT) (progn (List:Factory (vlax-variant-value InVal) ) ; bo variant value powinien zwrócić safearray ) ) ( t (list InVal ) ) ) ) (defun Object:IsErased ( obj / blockHandle *error*) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n Object:IsErased: *error*: " ) (princ msg ) (princ "\n") ) ) ) (setq result nil) (if (null obj ) (setq result T) (progn (setq blockHandle (vlax-get-property obj 'handle )) (if (null blockHandle ) (setq result T) (progn (setq entity (handent blockHandle) ) (if (null entity ) (setq result T) (setq result (null (entget entity ) )) ) ) ) ) ) result ) Strzałki.lsp -
lisp, generowanie kierunków/grotów strzałek na zadanej polilinii
kruszynski odpowiedział(a) na alf temat w ZWCAD Standard i Professional
A tak jeszcze z ciekawości: Jakie to oznaczenie? W jakich projektach to się wykorzystuje ? -
lisp, generowanie kierunków/grotów strzałek na zadanej polilinii
kruszynski odpowiedział(a) na alf temat w ZWCAD Standard i Professional
Jedni dziobią, inni drapią a ja .... hm. Takie mam: Polecenie do uruchomienia zzz (defun C:zzz ( / symb polilinia *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nC:zzz:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq symb ( SelSet:Entsel "Wybierz strzałkę" (list (cons 0 "INSERT" ))) ) (setq polilinia ( SelSet:Entsel "Wybierz polilinię" (list (cons 0 "*POLYLINE" ))) ) (while (not (null polilinia ) ) (wstawWSrodkuOdcinkow polilinia symb) (setq polilinia ( SelSet:Entsel "Wybierz polilinię" (list (cons 0 "*POLYLINE" ))) ) ) (princ) ) (defun wstawWSrodkuOdcinkow ( polilinia symb / ile i *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nwstawWSrodkuOdcinkow:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq ile (vlax-curve-getEndParam polilinia ) ) (setq i 1 ) (repeat (fix ile) (if (not (odcinekJestzbytkrotki polilinia i symb )) (progn (wstawWOdcinku polilinia i symb) ) ) (setq i (1+ i) ) ) ) (defun odcinekJestzbytkrotki ( polilinia i symb / d1 d0 dlugoscodcinka wielkoscsymbolu *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nodcinekJestzbytkrotki:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq d1(vlax-curve-getDistAtParam polilinia i)) (setq d0(vlax-curve-getDistAtParam polilinia (- i 1 ) ) ) (setq dlugoscodcinka (- d1 d0 ) ) (setq wielkoscsymbolu ( BoundingBox:Width ( BoundingBox symb ) ) ) (< dlugoscodcinka (* 3 wielkoscsymbolu) ) ) (defun wstawWOdcinku ( polilinia i symb / midparam px nowysymbol P0 ang *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nwstawWOdcinku:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq midparam (- i 0.5) ) (setq px (vlax-curve-getPointAtParam polilinia midparam ) ) (setq nowysymbol (vlax-invoke-method symb 'Copy ) ) (setq P0 (vlax-get-property nowysymbol 'InsertionPoint ) ) (vlax-invoke-method nowysymbol 'Move P0 (vlax-3d-point px ) ) (setq ang (vlax-curve-getFirstDeriv polilinia midparam) ) (vlax-put-property nowysymbol 'Rotation (angle (list 0 0 0 ) ang ) ) nowysymbol ) (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 BoundingBox (object / width height IP AP P1 P2 MoveVector *error*) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n BoundingBox : *error*: " ) (princ msg ) (princ "\n") ) ) ) (if (Object:IsErased object ) (*error* "object is erased" )) (setq ans(vl-catch-all-apply 'vlax-invoke-method (list object 'GetBoundingBox 'P1 'P2 ))) (if (vl-catch-all-error-p ans ) (progn (print ( vl-catch-all-error-message ans ) ) ) (progn (setq P1 (List:Factory P1 ) ) (setq P2 (List:Factory P2 ) ) ) ) (list P1 P2 ) ) (defun BoundingBox:Width ( bbox / *error*) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n BoundingBox:Width : *error*: " ) (princ msg ) (princ "\n") ) ) ) (- (car (cadr bbox) ) (car (car bbox) )) ) (defun List:Factory (InVal / OutVal AsList ; (setq mem InVal ) (setq InVal mem ) *error*) ( defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nList:Factory :*error*: " ) (princ msg ) (princ "\n") ) ) ) (cond ( ( = (type InVal) nil) nil) ( (vl-catch-all-error-p InVal) (progn (princ "Error trapped:" ) (princ InVal ) nil)) ( ( = (type InVal) 'LIST) InVal) ( ( = (type InVal) 'SAFEARRAY) (progn (setq AsList (vl-catch-all-apply 'vlax-safearray->list (list InVal ))) (if (vl-catch-all-error-p AsList) ( progn ( princ (vl-catch-all-error-message AsList ) ) nil ) ( progn AsList ) ) ) ) ( ( = (type InVal) 'VARIANT) (progn (List:Factory (vlax-variant-value InVal) ) ; bo variant value powinien zwrócić safearray ) ) ( t (list InVal ) ) ) ) (defun Object:IsErased ( obj / blockHandle *error*) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n Object:IsErased: *error*: " ) (princ msg ) (princ "\n") ) ) ) (setq result nil) (if (null obj ) (setq result T) (progn (setq blockHandle (vlax-get-property obj 'handle )) (if (null blockHandle ) (setq result T) (progn (setq entity (handent blockHandle) ) (if (null entity ) (setq result T) (setq result (null (entget entity ) )) ) ) ) ) ) result ) Strzałki.lsp -
Wstawianie map WMS z serwerów gov.pl
kruszynski odpowiedział(a) na dmatusz3 temat w ZWCAD Standard i Professional
Jeszcze na razie nic pewnego, ale tak po cichu coś tu już grzebię w dokumentacji, może, może coś się uda. To wynika z brzydkich żartów jakie robią serwery. w konfiguracji twierdzą że zakres rozdzielczości szerokości i wysokości ma być w zakresie 1-4096 a tak na prawdę udostępniają czasem mniejsze. Mam już pewien pomysł jak sobie z tym poradzić. Do sprawdzenia. trudno mi teraz powiedzieć co to może być. Może Pani wpisać (wkleić) link do serwera w liście adresów, jak zaznaczone na screenie taki przykład https://mapy.geoportal.gov.pl/wss/service/PZGIK/PRG/WMS/AdministrativeBoundaries Dorobię przy najbliższej aktualizacji -
Wstawianie map WMS z serwerów gov.pl
kruszynski odpowiedział(a) na dmatusz3 temat w ZWCAD Standard i Professional
Do chowania przewidziałem krzyżyk w prawym górnym rogu panelu, nie ma to tego oddzielnego polecenia. Polecenie do pokazywania panelu to WMS -
[VBA] Zwcad - zaznacz blok ale uważaj na grupy
kruszynski odpowiedział(a) na pop3k temat w Wsparcie programistyczne LISP i VisualLISP
Trzeba sprawdzić porównać wybrane elementy z każdym elementem w każdej grupie. Dim ent As ZcadEntity For I = 0 To ssetObj.Count Set ent = ssetObj.Item(I) Dim grs As ZcadGroups Dim gr As ZcadGroup Set grs = ThisDrawing.groups For Each gr In grs For J = 0 To gr.Count Dim entwgrupie As ZcadEntity Set entwgrupie = gr.Item(J) If entwgrupie Is ent Then MsgBox "element jest w grupie" Exit Sub End If Next J Next Next I -
ZWCAD - Bloki dynamiczne i atrybuty
kruszynski odpowiedział(a) na pop3k temat w Wsparcie programistyczne LISP i VisualLISP
No tak. Nikt nie mówił że samo się zrobi. 😉 Przykład użycia takiego reaktora tutaj https://www.zwcad.pl/help/lisp-help/vlr-object-reactor.html -
ZWCAD - Bloki dynamiczne i atrybuty
kruszynski odpowiedział(a) na pop3k temat w Wsparcie programistyczne LISP i VisualLISP
Tak na pierwszy rzut oka wygląda na możliwe. Ale jak zwykle diabeł tkwi w szczegółach. Mechanizm reakcji można zrealizować przy użyciu reaktorów. Tylko nigdy nie używałem ich w VBA, nie jestem pewien czy są dostępne. Jeśliby nie były, to można taki reaktor uruchamiać w LISP a on uruchamiałby odpowiednią funkcję w VBA. Co do zasobów to raczej byłbym spokojny, choć oczywiście wszystko zależy od stopnia skomplikowania makra i wielkości pliku. Ale to lepiej sprawdzić w boju niż zakładać że będzie zbyt obciążające. Dla każdego użytkownika taki próg bólu może być w innym miejscu. -
ZWCAD - Bloki dynamiczne i atrybuty
kruszynski odpowiedział(a) na pop3k temat w Wsparcie programistyczne LISP i VisualLISP
Tak właśnie. Te z czerwonej ( parametry dynamiczne bloków ) można odczytać, tylko w głowie mi się kolory poprzestawiały. -
ZWCAD - Bloki dynamiczne i atrybuty
kruszynski odpowiedział(a) na pop3k temat w Wsparcie programistyczne LISP i VisualLISP
Tak na szybko to odczytać właściwości (z niebieskiej ramki) można tak: Public Sub test() Dim ss As ZcadSelectionSet Dim ent As ZcadEntity Dim bname As String Dim props() As ZcadDynamicBlockReferenceProperty Dim pvalue As Variant Dim blkref As ZcadBlockReference With ThisDrawing.SelectionSets While .Count > 0 .Item(0).Delete Wend Set ss = .Add("$DynBlocks$") End With Dim ftype(0 To 1) As Integer Dim fdata(0 To 1) As Variant ftype(0) = 0: ftype(1) = 66 fdata(0) = "INSERT": fdata(1) = 1 ss.SelectOnScreen ftype, fdata If ss.Count = 0 Then MsgBox "Nie wybrano bloku...Kończymy" Exit Sub End If Set blkref = ss.Item(0) Dim i As Integer props = blkref.GetDynamicBlockProperties Dim prop As ZcadDynamicBlockReferenceProperty For i = LBound(props) To UBound(props) Set prop = props(i) pvalue = prop.Value Dim asTxt As String asTxt = CStr(pvalue) MsgBox (asTxt) Next i End Sub Dalej powinno już być łatwo. -
Automatyczny podział rysunku wykonanego w modelu na arkusze
kruszynski odpowiedział(a) na dmatusz3 temat w ZWCAD Standard i Professional
Przygotowałem skrypt, który pomoże dzielić model na arkusze: Funkcja do uruchomienia: ww Działanie przedstawiłem na filmiku: Arkusze.zelx -
Progam do odczytywania rzędnej wysokościowej punktu ?
kruszynski odpowiedział(a) na Adam_x temat w Wsparcie programistyczne LISP i VisualLISP
Taka mała aktualizacja. Dorobiłem wstawianie punktów z wysokością odczytaną z serwisu. Polecenie które możemy wpisać by uruchomić funkcję : WstawPunkt GUKiK.lsp -
Progam do odczytywania rzędnej wysokościowej punktu ?
kruszynski odpowiedział(a) na Adam_x temat w Wsparcie programistyczne LISP i VisualLISP
W ZWCAD program działa , dorobiłem tylko odwołanie do funkcji. Całość wygląda tak: (defun URL:Get ( url / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nURL:Get:*error*: " ) (princ msg ) (princ "\n") ) ) ) (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)) ) ) ) ) ) ) (defun GUKiK:H ( coords / ; (setq coords (list 486617 637928 ) ) *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nPoint:GetHByGUKiK:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq url (strcat "https://services.gugik.gov.pl/nmt/?request=GetHByXY&x=" (rtos (car coords) ) "&y=" (rtos (cadr coords)) "" ) ) (setq H (URL:Get url) ) (atof h) ) A uruchomić można tak (GUKiK:H (list 486617 637928 ) ) albo nawet tak: wskazując punkt w przestrzeni (GUKiK:H (getpoint "\nWskaż punkt: " ) ) Wystarczy plik z załącznika wczytać do ZWCADa poleceniem appload. GUKiK.lsp -
Taki skrypt mógłby wyglądać tak: (vl-load-com) (defun c:setByLayer ( / wybrane doc ) (setq wybrane (SelSet:Get "Wybierz elementy do zmiany" nil) ) (SetByLayer wybrane) (vla-regen ( GetThisDrawing ) acallviewports) (princ) ) (defun SetByLayer ( dozmiany / format ) (defun format ( element / ) (setq ans (vl-catch-all-apply 'vlax-put-property (list element 'Color acbylayer ) )) (if (vl-catch-all-error-p ans) (princ (vl-catch-all-error-message ans )) ) ) (cond ((listp dozmiany) (progn (foreach % dozmiany (SetByLayer %) ) )) ((= (vlax-get-property dozmiany 'EntityName ) "AcDbBlockReference") (progn (format dozmiany) (setq elementy (Block:GetItems (vlax-get-property dozmiany 'Name ))) (SetByLayer elementy) )) (t (progn (format dozmiany) )) ) nil ) (defun GetThisDrawing ( / ) (vla-get-activedocument (vlax-get-acad-object) ) ) (defun SelSet:ToList (selset / Wynik ileelementow i *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nSelSet:ToList:*error*: " ) (princ msg ) (princ "\n") ) ) ) (if selset (progn (setq ileelementow(sslength selset) ) (setq i 0 ) (repeat ileelementow (setq Wynik (append Wynik (list (vlax-ename->vla-object(ssname selset i) ) ))) (setq i (1+ i )) ) )) Wynik ) (defun SelSet:FilterByType ( elementy typy / sl i % *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nSelSet:FilterByType:*error*: " ) (princ msg ) (princ "\n") ) ) ) ; (setq elementy (ssget ) ) (setq sl (sslength elementy)) (setq i (1- sl )) (repeat sl (setq % (ssname elementy i)) (if (not (member (cdr(assoc 0 (entget %) )) typy)) (setq elementy(ssdel % elementy)) ) (setq i (1- i) ) ) ) (defun SelSet:Get (tresc typy / selElems elementy Filter % OldNoMutt *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n SelSet:Get:*error*: " ) (princ msg ) (princ "\n") ) ) ) ;---------------------------------------------------------- ; funkcja sprawdza, czy jakieś elementy zostały zaznaczone, jeśli nie, prosi użytkownika o wskazanie obiektów ; Argumenty: tresc - komunikat wyświetlany w pasku poleceń zachęta do wskazanie obiektów ; Wynik: lista wybranych obiektów jeśli coś zostało wybranie ; nil jeśli nic nie zostało wybrane. ; ---------------------------------------------------------- ; versja 2.0 ; dodane filtrowanie typów ; ---------------------------------------------------------- ; test: ;(sslength (ssget (list (cons 0 "3DSOLID") ))) ; ---------------------------------------------------------- (if typy (progn (if (listp (car typy) ) (setq Filter typy ) (progn (setq Filter (list (cons -4 "<or" ))) (foreach % typy (setq Filter (append Filter (list (cons 0 % ) ))) ) (setq Filter (append Filter (list (cons -4 "or>" ) ))) ) ) )) (setq selElems(ssgetfirst )) (if (car selElems) (progn (setq elementy (SelSet:ToList(SelSet:FilterByType selElems typy))) ) (progn (setq tresc (strcat "\n" tresc ": ") ) (princ tresc ) (setq OldNoMutt (getvar 'NOMUTT)) (setvar 'NOMUTT 1) (setq elementy (if (null Filter) (vl-catch-all-apply 'ssget ) (vl-catch-all-apply 'ssget (list Filter )) ) ) (setvar 'NOMUTT OldNoMutt ) (if (not(vl-catch-all-error-p elementy)) (progn (setq elementy (SelSet:ToList elementy )) ) (progn (setq elementy nil) ) ) ) ) elementy ) (defun Blocks:Get ( BlockName / blocks Def *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nBlocks:Get:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq blocks ( vlax-get-property ( GetThisDrawing ) 'Blocks ) ) (setq Def(vl-catch-all-apply 'vlax-invoke-method ( list blocks 'Item BlockName ) ) ) (if (vl-catch-all-error-p Def) (setq Def nil ) ) Def ) (defun Block:GetItems ( nazwa / definicja ileElementow i element elementy *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nBlock:GetItems:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq definicja (Blocks:Get nazwa ) ) (setq ileElementow ( vlax-get-property definicja 'Count )) (setq i 0) (repeat ileElementow (setq element (vla-item definicja i)) (setq elementy (append elementy (list element ))) (setq i (1+ i)) ) elementy ) (princ) SetByLayer.lsp
-
Warstwy są tylko jednym z mechanizmów jakiem mamy do dyspozycji. Zastanawiałem się nad tym czy nie byłoby dobrym rozwiązaniem zrobić okienko gdzie moglibyśmy włączać i wyłączać znaki na podstawie jakichś kryteriów. np na podstawie stanu, ale nie tylko. Co jeszcze mogłoby się przydać? Jak z tego korzystać?
-
Potwierdzam, problem. Poprawię przy aktualizacji.
-
Takie rozwiązanie wprowadziliśmy jako odpowiedź na zgłoszenia Użytkowników którzy woleli inne odcienie kolorów zwłaszcza niebieskiego i jego odpowiednika w skali szarości, oraz osób, które korzystają z tych samych plików projektów na innych programach. Tam były czasem problemy z wyświetlaniem kolorów. Teraz można je łatwo przypisać na nowo jeśli coś się gdzieś źle wyświetla. Jeśli taki stan zaciemnia sytuację. Może Pan skorzystać z filtrów warstw i wyłączyć wyświetlanie w liście tych, które przeszkadzają.