kruszynski

Moderatorzy
  • Postów

    1474
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    93

Treść opublikowana przez kruszynski

  1. 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>") ) )
  2. 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.
  3. kruszynski

    ZWTraffic

    Proszę sprawdzić czy teraz jest OK przeniesopisy.lsp
  4. 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
  5. 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.
  6. kruszynski

    Znaki E-4 / E-5

    Aktualizacja z rozwiązaniem problemu gotowa do pobrania.
  7. kruszynski

    Znaki E-4 / E-5

    Problem jest nam znany. Myślę że ogarnę przy okazji najbliższej aktualizacji
  8. kruszynski

    ZWTraffic

    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 )
  9. kruszynski

    ZWTraffic

    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ść.
  10. kruszynski

    ZWTraffic

    to też uwzględnić? czy przenosić tylko ten jeden zaznaczony blok?
  11. kruszynski

    ZWTraffic

    tak. Trudno powiedzieć. Nie zostało to jeszcze ujęte w przewidywalnych planach
  12. kruszynski

    ZWTraffic

    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]:
  13. kruszynski

    ZWTraffic

    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?
  14. kruszynski

    ZWTraffic

    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.
  15. we miejscu wskazanym w czasie instalacji SDK nie wiem😉
  16. 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
  17. 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.
  18. 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.
  19. Ok, postaram się coś dowiedzieć.
  20. Sprawdzę to i postaram się dowiedzieć czegoś więcej od ZWSOFT.
  21. 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ąć ? :
  22. W najnowszej aktualizacji, którą jest dostępna do pobrania, problem został rozwiązany.
  23. Proszę pobrać aktualizację. teraz powinno być już OK
  24. 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.