-
Postów
1474 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
93
Treść opublikowana przez kruszynski
-
może tak: (ssget "_x" (list (cons -4 "<AND") (cons 0 "HATCH") (cons -4 "<AND") (cons -4 "<NOT") (cons 62 1) (cons -4 "NOT>") (cons -4 "<NOT") (cons 62 105) (cons -4 "NOT>") (cons -4 "AND>") ) )
-
W aktualnej wersji aplikacji nie ma takiej możliwości. Dodamy to w kolejnej aktualizacji. A jako rozwiązanie tymczasowe może Pan odszukać na dysku c:\Szansa\ZWTraffic\2018\Templates\Vertical traffic signs\D - Informacyjne\D-18.dwg Zapisać pod nową nazwą i dorysować strzałkę. Tak zmodyfikowany znak może Pan wstawić przez funkcje nakładki.
-
Proszę sprawdzić czy teraz jest OK przeniesopisy.lsp
-
Edycja tekstu wymiarowego
kruszynski odpowiedział(a) na Bartek1977 temat w ZWCAD Standard i Professional
-
Edycja tekstu wymiarowego
kruszynski odpowiedział(a) na Bartek1977 temat w ZWCAD Standard i Professional
Przygotowłem taki kawałek LISP: Polecenia: EdycjaWymiaru - prosi o zaznaczenie wymiaru, podanie nowej treści i zamienia kolor ZaznaczZmienione - wyszukuje w rysunku wszystkie wymiarowania, które mają nadpisany tekst Gotowy plik w załączniku (setq COLORINDEX 1 ) ; Zmień tą wartość jeśli chcesz inny kolor niż czerwony (domyślnie 1) (defun C:EdycjaWymiaru ( / element newVal *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nC:EdycjaWymiaru:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq element (SelSet:Entsel "Wybierz wymiar" (list (cons 0 "*DIMENSION" ) ) ) ) (setq newVal (String:Get "Nowa treść: " "" ) ) (vlax-put-property element 'Color COLORINDEX ) (vlax-put-property element 'TextOverride newVal ) ) (defun C:ZaznaczZmienione ( / selItems *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nC:ZazmaczZmienione:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq selItems (ssget "_X" '( ( 0 . "*DIMENSION") (-4 . "<NOT") (1 . "") (-4 . "NOT>" ) ) ) ) (sssetfirst selItems selItems) ) (defun String:Get (komunikat defVal / Wynik tekst ) (if defVal (if (not(= defVal "")) (setq komunikat (strcat komunikat "<" defVal ">:" ) )) ) (setq tekst(vl-catch-all-apply 'getstring (list T 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 ) (defun SelSet:Entsel (tresc filter / OldNoMutt MSel OutVal ) (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 ) OutVal ) EdycjaWymiaru.lsp -
Błąd: zły typ funkcji - nil, źle umiejscowiony prawy nawias
kruszynski odpowiedział(a) na kruk temat w ZWCAD Standard i Professional
Taki komunikat świadczy o problemie jaki wystąpił w jakimś LISPie. Być może jest załadowany w inny sposób niż lista startowa: Wczytane z automatu są pliki: W opcjach może być dodany katalog. Jeśli w nim jest plik ZWCADdoc.lsp zostanie wczytany przy otwieraniu plików Jeśli jest wczytane menu (plik mnu) , odpowiadający mu plik MNL zostanie wczytany %AppData%\Roaming\ZWSOFT\ZWCAD\2018\pl-PL\Support\ZWCAD2018doc.lsp c:\Program Files\ZWSOFT\ZWCAD 2018\Support\ZWCAD2018.lsp Aplikację możemy wczytać przez rejestr HKEY_CURRENT_USER\Software\ZWSOFT\ZWCAD\2018\pl-PL\Applications\MojaAplikacja choć to raczej arx niż LISP Jeśli w skrócie w użyjemy parametru /ld albo /b wczytany będzie skrypt, (scr), ale on też może ładować LISPa. Mamy jeszcze plik acad.rx , ale to też raczej do ARX niż LISP a treść komunikatu wskazuje jednak na LISP ( plik ZRX też może ładować plik LISP) Część funkcjonalności ZWCADa zwłaszcza narzędzia ExpressTools są opracowane w LISP i ładowane na starcie. Być może problem jest jakoś związany z rysunkiem a raczej z parą rysunków skoro problem występuje przy otwarciu drugiego rysunku przez 2xclick. Proszę obserwować program, ważne by udało się ustalić zasadę - powtarzalność występowania problemu, leśli to się uda być może będzie łatwiej uniknąć problemu w przyszłości. -
Aktualizacja z rozwiązaniem problemu gotowa do pobrania.
-
Problem jest nam znany. Myślę że ogarnę przy okazji najbliższej aktualizacji
-
Pierwsza wersja gotowa. przeniesopisy.lsp (defun C:przeniesopisy ( / selElement allElements SelLayer *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nC:przeniesopisy:*error*: " ) (princ msg ) (princ "\n") ) ) ) (defun AskForBlock ( label / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nAskForBlock:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq block (SelSet:Entsel label (list (cons 0 "INSERT" ))) ) ) (defun GetCorespondingElements ( selElement / LayerName BlockName Blocks Leaders Selected *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nGetCorespondingElements:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq LayerName (vlax-get-property selElement 'Layer ) ) (setq BlockName (vlax-get-property selElement 'Name ) ) (setq Blocks (ssget "X" (list (cons 0 "INSERT") (cons 2 BlockName ) (cons 8 LayerName ) ) ) ) ( if (not (null Blocks) ) (progn (setq Selected (SelSet:ToList Blocks ) ) ) ) (setq Leaders (ssget "X" (list (cons 0 "MULTILEADER") (cons 8 LayerName ) ) ) ) ( if (not (null Leaders) ) (progn (setq Leaders (SelSet:ToList Leaders ) ) (setq Selected (append Selected Leaders ) ) ) ) Selected ) (defun AskForLayer ( msg / Options selString *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nAskForLayer:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq Options (list "Zaznacz" "Aktualna" ) ) ; "Wybierz" (setq selString (String:Get (strcat msg " lub " (UserInput:FormatOptions Options ) ":" ) "" ) ) (cond ( ( or ( null selString ) (not (= (type selString ) 'STR))) nil) ( ( or ( = ( strcase selString ) (substr ( strcase ( car Options ) ) 1 1) ) ( = ( strcase selString ) ( strcase ( car Options ) ) ) ) ( progn ; "Zaznacz" (setq elem (SelSet:Entsel "Wybierz element z warstwy na którą przenieść opisy" nil) ) (setq Layer (vlax-get-property elem 'Layer ) ) ) ) ;( ( or ( = ( strcase selString ) (substr ( strcase ( cadr Options ) ) 1 1) ) ; ( = ( strcase selString ) ( strcase ( car Options ) ) ) ; ) ( progn ; "Wybierz" ; (print "eNotImplementedYet" ) ;) ) ( ( or ( = ( strcase selString ) (substr ( strcase ( cadr Options ) ) 1 1) ) ( = ( strcase selString ) ( strcase ( car Options ) ) ) ) ( progn ; "Aktualna" ( setq Layer ( vlax-get-property ( vlax-get-property (vla-get-activedocument (vlax-get-acad-object) ) 'ActiveLayer ) 'Name ) ) ) ) ( T (setq Layer selString ) ) ) Layer ) (setq selElement ( AskForBlock "Wskaż blok" )) (setq allElements (GetCorespondingElements selElement ) ) (setq SelLayer (AskForLayer "Podaj nazwę warstwy" ) ) ( Layer:Set allElements SelLayer ) ) ; (defun ------ UserInput ------------ ( / ) (defun UserInput:FormatOptions ( Options / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nUserInput:FormatOptions:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq Out "[" ) (if (> (length Options) 0) (setq Out (strcat "[" (car Options) ) ) ) (foreach % (cdr Options) (setq Out (strcat Out "/" % ) ) ) (setq Out (strcat Out "]") ) ) (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 ) ; (defun ------ Layer ------------ ( / ) (defun Layer:Set ( Element LayerName / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nLayer:Set:*error*: " ) (princ msg ) (princ "\n") ) ) ) (if (= ( Layer:Exist LayerName ) :vlax-false ) ( Layer:Create LayerName ) ) ( cond ( ( = (type Element ) 'LIST ) (progn (foreach % Element ( Layer:Set % LayerName ) ) ) ) ( ( = (type Element ) 'ENAME ) (progn ( Layer:Set (vlax-ename->vla-object Element ) LayerName ) ) ) ( ( = (type Element ) 'VLA-OBJECT ) (progn (setq ans(vl-catch-all-apply 'vlax-put-property (list Element 'Layer LayerName ))) ) ) ) ) (defun Layer:Exist ( Name / layers ans Out *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nLayer:Exist:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq layers (vlax-get-property (vla-get-activedocument (vlax-get-acad-object) ) 'Layers ) ) (setq ans(vl-catch-all-apply 'vlax-invoke-method (list layers 'Item Name ) ) ) (setq Out (if (vl-catch-all-error-p ans ) :vlax-false :vlax-true ) ) Out ) (defun Layer:Create ( Name / layers ans *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nLayer:Create *error*: " ) (princ msg ) (princ "\n") ) ) ) (setq layers (vlax-get-property (vla-get-activedocument (vlax-get-acad-object) ) 'Layers ) ) (setq ans (vl-catch-all-apply 'vlax-invoke-method (list layers 'Add Name ) ) ) (if (vl-catch-all-error-p ans) nil ans ) ) (defun Layer:Purge ( Name / layers ans Out *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nLayer:Purge:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq layers (vlax-get-property (vla-get-activedocument (vlax-get-acad-object) ) 'Layers ) ) (setq layer (vl-catch-all-apply 'vlax-invoke-method (list layers 'Item Name ) ) ) (if (not (vl-catch-all-error-p layer )) (vl-catch-all-apply 'vlax-invoke-method (list layer 'Erase ) ) ) nil ) ; (defun ------ SelSet ------------ ( / ) (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: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 )
-
Możliwe to jest, tylko potencjalnie narażone na komplikacje. Bo jak odróżnić blok opisowy od innych? Można w programie zapisać na stałe nazwę bloku opisowego. Ale jeśli ktoś chciałby użyć tego narzędzia w innym przypadku to nie zadziała. zaznaczenie jednego bloku wzorca chyba nie jest zbyt kłopotliwe a daje nam dużą elastyczność.
-
to też uwzględnić? czy przenosić tylko ten jeden zaznaczony blok?
-
tak. Trudno powiedzieć. Nie zostało to jeszcze ujęte w przewidywalnych planach
-
tak można. tylko z mojego doświadcznia wynika że częstotliwość popełniania literówek jest denerwująca. i bedzie powstawało zbyt dużo podobnych warstw a może tylko ja szybciej piszę niż myślę 😉 wolałbym to rozwiązanie. tylko jak wskazać warstwę, można tak: - wybieramy dowolny element na warstwie docelowej - myślę, że to byłoby najłatwiejsze w użyciu, pod warukniem że coś juz na tej warstwie jest - pojawia się okno z listą wszystkich warstw do wyboru - to byłoby łatwe w użyciu jeśli mielibyśmy mało warstw przy dużej ilości wartw pewnie już nie. - wrzucamy np na aktualną warstwę - to byłoby najłatwiejsze do napisania ale czy funkcjonalne ? - może jeszcze coś? Możemy też zrobić takie combo typu Podaj nazwę warstwy lub [Zaznacz/Wybierz/Aktualna]:
-
można tak, żeby żeby zaznaczył Pan jeden blok , a program zaznaczy wszystkie inne bloki o tej samej nazwie na tej samej warstwie. Tak będzie OK?
-
W poprzednim poście w tym temacie zaproponowałem pewne rozwiązanie i zapytałem o kwestie, w których mam wątpliwości. Nie otrzymałem odowiedzi więc nie wiem czy to właśnie tak ma działać program. Dlatego nie zajołęm się przygotowaniem rozwiązania, które może działać sprzeczenie z oczekiwaniami.
-
Model obiektowy VST VBA dla ZWCAD 2018 PRO
kruszynski odpowiedział(a) na hydromac temat w Wsparcie programistyczne LISP i VisualLISP
we miejscu wskazanym w czasie instalacji SDK nie wiem😉 -
Model obiektowy VST VBA dla ZWCAD 2018 PRO
kruszynski odpowiedział(a) na hydromac temat w Wsparcie programistyczne LISP i VisualLISP
Witam Pakiet SDK zawierający sporo informacji o tworzeniu nakładek w ZRX, ale też przykłady .Net jest dostępny do pobrania tutaj: ZRX SDK . Zasadniczo model obiektowy jest analogiczny jak w AutoCAD. Gdyby coś jeszcze nie działało zgodnie z oczekiwaniami proszę o kontakt, najlepiej mailowo na adres pomoc@zwcad.pl -
Przecięcie linii z powierzchnią 3D
kruszynski odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Funkcja: znajduje przecięcia, jeśli linia przecina krawędź powierzchni - takie było założenie. Czy w AutoCADzie wykorzystując tą funkcję otrzymuje Pan inny wynik? Kalkulator na chwilę obecną wylicza następujące wartości: + dodawanie - odejmowanie * mnożenie / dzielenie ^ potęgowanie % modulo - reszta z dzielenia sqrt pierwiastek abs wartość bezwzględna ln logartym naturalny log10 logartym o podstawie 10 avg średnia sum suma wartości fact silnia min max - wartości ekstremalne funkcje trygonometryczne: sin asin cos acos tan atan pozostałe funkcja kalkulatora geometrycznego w wersji znanej z AutoCADa nie są jeszcze obsługiwane. -
Mmamy odpowiedź z ZWSOFT: ARXDBG powinno działać tak jak w AUTOCAD. Może Pan przeprowadzić migrację projektu, czyli skompilować z ustawionymi ścieżkami do bibliotek ZWCADa i będzie mógł Pan używac narzędzi analogicznie jak w AutoCadzie.
-
[c#] Arc i CircularArc2d
kruszynski odpowiedział(a) na kaminki temat w Wsparcie programistyczne LISP i VisualLISP
Ok, postaram się coś dowiedzieć. -
Przecięcie linii z powierzchnią 3D
kruszynski odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Sprawdzę to i postaram się dowiedzieć czegoś więcej od ZWSOFT. -
[c#] Arc i CircularArc2d
kruszynski odpowiedział(a) na kaminki temat w Wsparcie programistyczne LISP i VisualLISP
Czy jest z nimi jakiś problem? W tym przypadku potrzena będzie jeszcze zmiana środka. I trzeba to będzie przeliczyć Może Pan rozwinąć ? : -
W najnowszej aktualizacji, którą jest dostępna do pobrania, problem został rozwiązany.
-
Proszę pobrać aktualizację. teraz powinno być już OK
-
Nowa aktualizacja nakładki dosępna jest do pobrania przez mechanizm automatycznych aktualizacji. Wystarczy kliknąć : Wprowadzone zmiany to: rozwiązanie problemu: Nowe znaki [U-25a] w różnych kolorach Zmiana domyślnej szerokości miejsc postojowych dla samochodów osobowych z 2,3 m na 2,5 m Drobne poprawki w zakresie stabilności działania.