perlon

Użytkownik forum
  • Postów

    425
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    33

Aktywność reputacji

  1. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Pytanie o użytkowanie komercyjne   
    Nie ma co rozwijać. Na stronie producenta w zakładce History. Na forum autor potwierdzał ważność licencji starszych wersji a te były 100% free dla wszystkich.
    https://smath.com/en-US/view/SMathStudio/history
     
  2. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w LISP - przesuwający obiekty w osi Z co 1 jednostkę   
    Witam
    A może łatwiej by było zamienić ten zestaw linii i łuków w polilinie właśnie i przeprocesować polilinię która już będzie uporządkowana ze swej natury? Kwestia tylko wskazania który koniec jest początkiem. Innym rozwiązaniem mogło by być dodanie XDATA do obiektów linia/łuk ale trzeba do tego też stworzyć system zarządzania kolejnością. Kolejność na podstawie rzędnej Z jak dla mnie wzbudza pewną kontrowersję 
  3. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w ClipXRef i osadzony Image   
    Witam.
    vernum = "22.20_2021.12.16(2dc3d9e9b39)_x64" (read only)
    Mam plik z podłączonym podkładem XRef jako overlay. W owym xref'ie jest osadzony JPG. XRef'a mam przyciętego XClip'em. Wygląda to mniej więcej tak.

    jak zmienię obrys XClipa tak aby nie obejmował obrazka JPG obrazek pojawia się w całości poza granicami XClipa.

    Nie znalazłem żadnego sposobu aby sprawić żeby plik JPG nie był widoczny. Opisane zachowanie występuje w wymienionej wyżej wersji 2022. Ten sam plik otworzony w wersji 2020 nie pokazuje bitmapy poza xclipem ale niestety ta wersja nie daje możliwości modyfikacji xclipa za pomocą uchwytów. Wydaje mi się, że jest to błąd do zgłoszenia do ZwSoft'u.
    Edit:
    Podmieniłem na zrzuty ekranowe i dołączyłem pliki testowe
     

    base.dwg xref.dwg
  4. Upvote
    perlon otrzymał(a) reputację od kruszynski w Tworzenie bloku w lisp oraz instrukcja warunkowa   
    Takie rozwiązanie, które sam stosuję:
    (if (not (tblsearch "LAYER" "jakas_warstwa")) (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") (cons 2 "jakas_nazwa") '(70 . 0) '(62 . 7) '(6 . "Continuous") '(370 . -3) ) ) )  
  5. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Tworzenie bloku w lisp oraz instrukcja warunkowa   
    A najprościej to załadować sobie CADPL-Pack i tam jest między innymi :
    ; cd:ACX_AddLayer         - Tworzy nowa warstwe / Creates a new layers                        ;
     
    Pozdrowienia dla Kojacek
     
  6. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Tworzenie bloku w lisp oraz instrukcja warunkowa   
    Takie rozwiązanie, które sam stosuję:
    (if (not (tblsearch "LAYER" "jakas_warstwa")) (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") (cons 2 "jakas_nazwa") '(70 . 0) '(62 . 7) '(6 . "Continuous") '(370 . -3) ) ) )  
  7. Upvote
    perlon otrzymał(a) reputację od BKW w 2022 - DIMCONTINUE i PERPENDICULAR OSNAP   
    Nie wiem czy było zgłaszane ale w 2022 jak się rysuje kontynuację wymiaru i jest zaznaczony osnap PERPENDICULAR to złapanie czegokolwiek graniczy z cudem.

  8. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w LISP dla wszystkich otwartych, LTSCALE   
    Podpierając się lispem LeeMac'a można wybrać kartotekę z plikami dwg i w czambuł polecieć wszystkie wygenerowanym skryptem.
    (defun C:LTSALLDWG ( / count dir filename files scriptname) (setq dir (LM:DirectoryDialog "Select directory" "" 1)) (if dir (setq files (vl-directory-files dir "*.dwg" 1)) ) (if files (progn (setq scriptname (open "e:\\temp\\batch.scr" "w") count 0 ) (while (setq filename (nth count files)) (setq filename (strcat dir "\\" filename)) (write-line (strcat "_open \"" filename "\"") scriptname) (write-line (strcat "(vl-cmdf \"" "setvar\"" " " "\"" "ltscale\"" " " "\"1\"" " " "\"" "\"" ")") scriptname) (write-line "_qsave" scriptname) (write-line "_close" scriptname) (setq count (1+ count)) ) (close scriptname) ) ) (princ) ) ;;-------------------=={ Directory Dialog }==-----------------;; ;; ;; ;; Displays a dialog prompting the user to select a folder ;; ;;------------------------------------------------------------;; ;; Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; msg - message to display at top of dialog ;; ;; dir - root directory (or nil) ;; ;; flag - bit coded flag specifying dialog display settings ;; ;;------------------------------------------------------------;; ;; Returns: Selected folder filepath, else nil ;; ;;------------------------------------------------------------;; (defun LM:DirectoryDialog ( msg dir flag / Shell Fold Self Path ) (vl-catch-all-apply (function (lambda ( / ac HWND ) (if (setq Shell (vla-getInterfaceObject (setq ac (vlax-get-acad-object)) "Shell.Application") HWND (vl-catch-all-apply 'vla-get-HWND (list ac)) Fold (vlax-invoke-method Shell 'BrowseForFolder (if (vl-catch-all-error-p HWND) 0 HWND) msg flag dir) ) (setq Self (vlax-get-property Fold 'Self) Path (vlax-get-property Self 'Path) Path (vl-string-right-trim "\\" (vl-string-translate "/" "\\" Path)) ) ) ) ) ) (if Self (vlax-release-object Self)) (if Fold (vlax-release-object Fold)) (if Shell (vlax-release-object Shell)) Path ) ;Symbol Type Description ;msg String Message to display to the top of the dialog (may be an empty string) ;dir String (Optional) Root Directory, user cannot navigate above this level ;flag Integer Bit flags controlling the behaviour of the dialog interface (detailed below) ;Returns: Selected Directory, else nil if user presses Cancel ;Flag Bit Values ;Bit Result ;0 Standard behaviour (Default) ;1 Only file system folders can be selected. If this bit is set, the OK button is disabled if the user selects a folder that doesn't belong to the file system. ;2 The user is prohibited from browsing below the domain within a network ;4 Room for status text is provided under the dialog box ;8 Returns file system ancestors only. An ancestor is a subfolder that is beneath the root folder. If the user selects an ancestor of the root folder that is not part of the file system, the OK button is grayed. ;16 Shows an edit box in the dialog box for the user to type the name of an item. ;32 Validate the name typed in the edit box. ;64 Enable drag-and-drop capability within the dialog box, reordering, shortcut menus, new folders, delete, and other shortcut menu commands. ;128 The browse dialog box can display URLs. ;256 When combined with flag 64, adds a usage hint to the dialog box, in place of the edit box. ;512 Suppresses display of the 'New Folder' button ;1024 When the selected item is a shortcut, return the PIDL of the shortcut itself rather than its target. ;4096 Enables the user to browse the network branch for computer names. If the user selects anything other than a computer, the OK button is grayed. ;8192 Enables the user to browse the network branch for printer names. If the user selects anything other than a printer, the OK button is grayed. ;16384 Allows browsing for everything: the browse dialog box displays files as well as folders. ;32768 If combined with flag 64, the browse dialog box can display shareable resources on remote systems. ;65536 Windows7 & later: Allow folder junctions such as a library or a compressed file with a .zip file name extension to be browsed.  
  9. Like
    perlon otrzymał(a) reputację od alf w LISP dla wszystkich otwartych, LTSCALE   
    Podpierając się lispem LeeMac'a można wybrać kartotekę z plikami dwg i w czambuł polecieć wszystkie wygenerowanym skryptem.
    (defun C:LTSALLDWG ( / count dir filename files scriptname) (setq dir (LM:DirectoryDialog "Select directory" "" 1)) (if dir (setq files (vl-directory-files dir "*.dwg" 1)) ) (if files (progn (setq scriptname (open "e:\\temp\\batch.scr" "w") count 0 ) (while (setq filename (nth count files)) (setq filename (strcat dir "\\" filename)) (write-line (strcat "_open \"" filename "\"") scriptname) (write-line (strcat "(vl-cmdf \"" "setvar\"" " " "\"" "ltscale\"" " " "\"1\"" " " "\"" "\"" ")") scriptname) (write-line "_qsave" scriptname) (write-line "_close" scriptname) (setq count (1+ count)) ) (close scriptname) ) ) (princ) ) ;;-------------------=={ Directory Dialog }==-----------------;; ;; ;; ;; Displays a dialog prompting the user to select a folder ;; ;;------------------------------------------------------------;; ;; Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; msg - message to display at top of dialog ;; ;; dir - root directory (or nil) ;; ;; flag - bit coded flag specifying dialog display settings ;; ;;------------------------------------------------------------;; ;; Returns: Selected folder filepath, else nil ;; ;;------------------------------------------------------------;; (defun LM:DirectoryDialog ( msg dir flag / Shell Fold Self Path ) (vl-catch-all-apply (function (lambda ( / ac HWND ) (if (setq Shell (vla-getInterfaceObject (setq ac (vlax-get-acad-object)) "Shell.Application") HWND (vl-catch-all-apply 'vla-get-HWND (list ac)) Fold (vlax-invoke-method Shell 'BrowseForFolder (if (vl-catch-all-error-p HWND) 0 HWND) msg flag dir) ) (setq Self (vlax-get-property Fold 'Self) Path (vlax-get-property Self 'Path) Path (vl-string-right-trim "\\" (vl-string-translate "/" "\\" Path)) ) ) ) ) ) (if Self (vlax-release-object Self)) (if Fold (vlax-release-object Fold)) (if Shell (vlax-release-object Shell)) Path ) ;Symbol Type Description ;msg String Message to display to the top of the dialog (may be an empty string) ;dir String (Optional) Root Directory, user cannot navigate above this level ;flag Integer Bit flags controlling the behaviour of the dialog interface (detailed below) ;Returns: Selected Directory, else nil if user presses Cancel ;Flag Bit Values ;Bit Result ;0 Standard behaviour (Default) ;1 Only file system folders can be selected. If this bit is set, the OK button is disabled if the user selects a folder that doesn't belong to the file system. ;2 The user is prohibited from browsing below the domain within a network ;4 Room for status text is provided under the dialog box ;8 Returns file system ancestors only. An ancestor is a subfolder that is beneath the root folder. If the user selects an ancestor of the root folder that is not part of the file system, the OK button is grayed. ;16 Shows an edit box in the dialog box for the user to type the name of an item. ;32 Validate the name typed in the edit box. ;64 Enable drag-and-drop capability within the dialog box, reordering, shortcut menus, new folders, delete, and other shortcut menu commands. ;128 The browse dialog box can display URLs. ;256 When combined with flag 64, adds a usage hint to the dialog box, in place of the edit box. ;512 Suppresses display of the 'New Folder' button ;1024 When the selected item is a shortcut, return the PIDL of the shortcut itself rather than its target. ;4096 Enables the user to browse the network branch for computer names. If the user selects anything other than a computer, the OK button is grayed. ;8192 Enables the user to browse the network branch for printer names. If the user selects anything other than a printer, the OK button is grayed. ;16384 Allows browsing for everything: the browse dialog box displays files as well as folders. ;32768 If combined with flag 64, the browse dialog box can display shareable resources on remote systems. ;65536 Windows7 & later: Allow folder junctions such as a library or a compressed file with a .zip file name extension to be browsed.  
  10. Upvote
    perlon przyznał(a) reputację dla dmatusz3 w Wstawianie map WMS z serwerów gov.pl   
    Pracujemy obecnie nad dodaniem do naszych nakładek (np. ZWGeo, ZWTraffic) możliwości wstawiania map z zasobów z portali gov.pl.
    Funkcjonalność jest w bardzo początkowej fazie, ale postanowiliśmy ją udostępnić. 
    Możemy wybrać różne serwery z danymi i sprawdzić jakie udostępnia dane (warstwy). Następnie definiujemy obszar w który ma być wstawiona mapa. Wygląda to tak jak na animacji poniżej.

     
    Biblioteki do pobrania ZWMS.zip
    Pobrany plik zip należy rozpakować do katalogu i poleceniem netload (tylko wersja ZWCAD Pro) wczytać plik ZWMS.dll

    Wtedy pojawi się dodatkowy panel. W pliku zip znajduje się również plik Plik_testowy.dwg, który został użyty podczas kręcenia filmu.
     
     
  11. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Progam do odczytywania rzędnej wysokościowej punktu ?   
    Takie coś na razie mnię wyszło. Komenda zwraca do linii poleceń komunikat z odczytaną rzędną wysokosciową na podstawie odpowiedzi z portalu. 
    Jak ma wstawiać metkę albo blok to trzeba jeszcze pokodzić. Jest również metoda ConvertPoint3dToCoordinate na razie pusta, gdyby zaszła potrzeba wprowadzenia konwersji układów współrzędnych.
    using System.Net.Http; using ZwSoft.ZwCAD.ApplicationServices; using ZwSoft.ZwCAD.EditorInput; using ZwSoft.ZwCAD.Geometry; using ZwSoft.ZwCAD.Runtime; namespace GetHeightByCoordinates { public static class Commands { [CommandMethod("CK_GetHbyXY")] public static void GetHeightByCoordinateXY() { var (X, Y) = ConvertPoint3dToCoordinate(GetPoint()); var height = GetHeight(X, Y); Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage($"\n{height}"); } public static string GetHeight(double coordinateX, double coordinateY) { string url = $"https://services.gugik.gov.pl/nmt/?request=GetHByXY&x={coordinateX}&y={coordinateY}"; return new HttpClient().GetAsync(url).Result.Content.ReadAsStringAsync().Result; } private static Point3d GetPoint() { PromptPointOptions pPtOpts = new PromptPointOptions("\nWskaz punkt na mapie: "); PromptPointResult pPtRes = Application.DocumentManager.MdiActiveDocument.Editor.GetPoint(pPtOpts); return pPtRes.Value; } private static (double X, double Y) ConvertPoint3dToCoordinate(Point3d point) { // convert pick point to coordinates return ( point.X, point.Y ); } } } cały projekt do ściągnięcia z Github'a
    https://github.com/TomekTkaczyk/GetHeightByCoordinates
  12. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Progam do odczytywania rzędnej wysokościowej punktu ?   
    Zaktualizowałem repozytorium o opis działania. Repo jest tak zrobione, że po uruchomieniu Debug w VStudio powinien sie odpalić ZwCAD2020 automatycznie załadować dll i uruchomić komendę. W przypadku posiadania innej wersji należy zaktualizować property projektu.
    Ładowanie skompilowanej dll'ki z lispa:
    (vl-load-com) (vl-cmdf "netload" "GetHeightByCoordinates.dll") Ewentualnie trzeba dodać z przodu .dll ścieżkę dostępu. Wywołanie z linii komend 
    CK_GetHbyXY lub z lispa
    (command "CK_GETHBYXY") Powyższe można wywołać we własnych lispach (na razie komunikat jest wysyłany tylko na konsolę) lub podpiąć pod menu lub przycisk na toolbarsie.
    W załączeniu skompilowana dll'ka.
    Na chwilę obecną komenda zwraca jedynie komunikat o uzyskanej rzędnej wysokościowej. Tak dla sprawdzenia możliwości. Dalsza obróbka pozyskanej iniformacji wedle wymagań. Jak sprecyzujesz co chcesz konkretnie uzyskać to mogę to dopisać. W kodzie użyłem krotek, dlatego wymagany jest dostęp do System.ValueTuple.dll który również załączam.
    GetHeightByCoordinates.dll System.ValueTuple.dll
  13. Like
    perlon otrzymał(a) reputację od kruszynski w Progam do odczytywania rzędnej wysokościowej punktu ?   
    Takie coś na razie mnię wyszło. Komenda zwraca do linii poleceń komunikat z odczytaną rzędną wysokosciową na podstawie odpowiedzi z portalu. 
    Jak ma wstawiać metkę albo blok to trzeba jeszcze pokodzić. Jest również metoda ConvertPoint3dToCoordinate na razie pusta, gdyby zaszła potrzeba wprowadzenia konwersji układów współrzędnych.
    using System.Net.Http; using ZwSoft.ZwCAD.ApplicationServices; using ZwSoft.ZwCAD.EditorInput; using ZwSoft.ZwCAD.Geometry; using ZwSoft.ZwCAD.Runtime; namespace GetHeightByCoordinates { public static class Commands { [CommandMethod("CK_GetHbyXY")] public static void GetHeightByCoordinateXY() { var (X, Y) = ConvertPoint3dToCoordinate(GetPoint()); var height = GetHeight(X, Y); Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage($"\n{height}"); } public static string GetHeight(double coordinateX, double coordinateY) { string url = $"https://services.gugik.gov.pl/nmt/?request=GetHByXY&x={coordinateX}&y={coordinateY}"; return new HttpClient().GetAsync(url).Result.Content.ReadAsStringAsync().Result; } private static Point3d GetPoint() { PromptPointOptions pPtOpts = new PromptPointOptions("\nWskaz punkt na mapie: "); PromptPointResult pPtRes = Application.DocumentManager.MdiActiveDocument.Editor.GetPoint(pPtOpts); return pPtRes.Value; } private static (double X, double Y) ConvertPoint3dToCoordinate(Point3d point) { // convert pick point to coordinates return ( point.X, point.Y ); } } } cały projekt do ściągnięcia z Github'a
    https://github.com/TomekTkaczyk/GetHeightByCoordinates
  14. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Pomoc przy lispie   
    A na czym miałaby polegać ta pomoc? Co chcesz konkretnie osiągnąć. Jaki jest związek bloku z atrybutami z polilinią?
  15. Upvote
    perlon otrzymał(a) reputację od wedzik w Nie działa zmienna w filtrze przy zaznaczaniu ssget   
    Może to pomoże :
    (defun c:okregi (/) (setq malypromien (getreal "Podaj maly promien: ")) (setq aaa '( (0 . "CIRCLE") (410 . "Model") (-4 . ">=")) ) (setq bbb (append aaa (list (cons 40 malypromien)))) (setq zbior (ssget "X" bbb)) (if zbior (princ (setq ile (sslength zbior))) (princ "\nBrak elementow")) (princ) )  
  16. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Nie działa zmienna w filtrze przy zaznaczaniu ssget   
    Może to pomoże :
    (defun c:okregi (/) (setq malypromien (getreal "Podaj maly promien: ")) (setq aaa '( (0 . "CIRCLE") (410 . "Model") (-4 . ">=")) ) (setq bbb (append aaa (list (cons 40 malypromien)))) (setq zbior (ssget "X" bbb)) (if zbior (princ (setq ile (sslength zbior))) (princ "\nBrak elementow")) (princ) )  
  17. Like
    perlon przyznał(a) reputację dla kojacek w [AutoLisp] Zmiana widoczności warstwy.   
    Byłoby dziwne gdyby wpółpracował. Lista z tblsearch nie jest poprawną listą dla entmod. Użyj tu formy entget + tblobjname. Zobacz:
    (setq e (tblobjname "layer" "zbrojenie_linie" )) (setq d (entget e)) (entmod (subst (cons 62 -8)(assoc 62 d) d)) a to prowadzić może do bardziej ogólnej funkcji:
    (defun LayOnOff (Lay / e d)   (if     (setq e (tblobjname "LAYER" Lay))     (progn       (setq d (entget e))       (setq d         (subst           (cons 62             (* -1 (cdr (assoc 62 d)))           )           (assoc 62 d)         d)       )       (entmod d)     )   ) ) Funkcja steruje widocznością warstwy podanej jako jej argument tak jak przełącznik, wywołaj kolejno:
    (LayOnOff "zbrojenie_linie")  
  18. Like
    perlon otrzymał(a) reputację od Marek-M w Co dzisiaj robiłem w lispie?   
    LISP to fajna zabawa, choć nie na darmo ukuło się rozwinięcie tego skrótu : 
    LISP = Lost in Stupid Parenthesis
  19. Upvote
    perlon otrzymał(a) reputację od alf w zw2021 - wdrożenie bloków dynamicznych - plany   
    Tak, ale te "bloki" to jest to co sobie wymyślił autor nakładki a nie to co potrzebuje w konkretnym przypadku użytkownik. Dylemat wędki i ryby i raczej rozmawiamy o pewnej funkcjonalności uniwersalnej a nie konkretnym rysowaniu kresek na krzyż 😉 Trzeba się jednak pogodzić, ze bloków dynamicznych przez następnyhc kilka lat w ZwCAD'zie nie uświadczymy.
  20. Upvote
    perlon przyznał(a) reputację dla kruszynski w [VBA] Pręt zbrojeniowy   
    A na drugi, to ten kod z tablicami dla mnie był bardziej czytelny niż z kolekcjami.
    Refaktoryzacja w celu usunięcia kodu spagetti przez wydzielenie funkcji to dobry plan. Ale zmiana typy danych z tablicy na kolekcję, to po żeby za chwilę zmieniać kolekcję na tablicę to ma skutek dokładnie odwrotny.
    Myślę, że lepszym planem byłoby oddzielenie operacji typu interakcja z użytkownikiem, przeliczenie punktów rysowanie. np tak
    Public Function ZapytajOPunkt(komunikat As String) ZapytajOPunkt = ThisDrawing.Utility.GetPoint(, komunikat) End Function Public Function przeliczPunkty(NAROZNIK As Variant) ReDim p(7) As Double p(0) = NAROZNIK(0): p(1) = NAROZNIK(1) p(2) = NAROZNIK(0) + 50: p(3) = NAROZNIK(1) + 30 p(4) = NAROZNIK(0) + 100: p(5) = NAROZNIK(1) + 30 p(6) = NAROZNIK(0) + 100: p(7) = NAROZNIK(1) przeliczPunkty = p End Function Public Function rysuj(p) Dim poly As ZcadLWPolyline Set poly = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) poly.ConstantWidth = 1 End Function Private Sub Test() ' frm_test.Hide Dim NAROZNIK As Variant NAROZNIK = ZapytajOPunkt("Podaj punkt początkowy:") Dim p() As Double p = przeliczPunkty(NAROZNIK) rysuj (p) End Sub Dzięki temu
    pracujesz szybciej, bo jesteś niezależny od okna możesz w innej funkcji testującej wywołać np tylko rysuj(p) na danych sztucznie spreparowanych dzięki czemu masz pewność że ten obszar DZIAŁA. masz wszystkie operacje związane z reprezentacją grafiki w jednym miejscu. więc jeśli chcesz w innym miejscu aplikacji narysować podobną polilinię, to nie musisz pamiętać że masz jeszcze zmienić jej szerokość. Jeśli chcesz zmienić polilinię, np na szerszą, albo podmienić na inny typ elementu np blok, robisz to tylko w jednym miejscu, w funkcji rysuj, a nie musisz szukać w innych miejscach aplikacji gdzie to jeszcze i po pozmieniać.
  21. Like
    perlon otrzymał(a) reputację od Camargue18 w Macierze - największa wartość charakterystyczna   
    Wolfram ALFA
    Lambda1=1,13783
  22. Upvote
    perlon otrzymał(a) reputację od alf w ZWCAD 2021 Update1   
    Martin. Sam doświadczasz niedostatków wersji Architecture. Wygląda, że zadziałała maksyma Francuskiej Legii Cudzoziemskiej. W każdym produkcie infomatycznym user oczekuje działania zgodnie ze specyfikacją i oczekuje, że problem, który ma do rozwiązania jest w tej aplikacji do rozwiązania. Konkurencja, szczególnie ta wiodąca ma kompletne i ugruntowane na rynku rozwiązania. Projektanci nie mają czasu na wymyślanie hacków na ułomności tylko chcą mieć skuteczne narzędzia CAD do osiągnięcia celu czyli stworzenia dokumentacji. Jeżeli dane narzędzie nie spełnia oczekiwań to je się zmienia. Sam miałem przykre doświadczenie z programem do statyki. Ostatecznie potraktowałem jego zakup jako stratę. Dla ZwSOFT'u to rozwiązanie zapewne było deficytowe i stratedzy uznali, że bieżące i przyszłe przychody nie zrównoważą nakładów na rozwój i dogonienie konkurencji. Nierentowne projekty się zamyka. Ot taka refleksja mię naszła.
  23. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Wstawianie bloków wg zadanych współrzędnych   
    A ja od razu z rybą 😉 Trochę pozlepiałem z tego co miałem u siebie i wyszło mi coś takiego. Lisp wczytuje plik csv z trzema atrybutami. Przy testach były kłopoty z kodowaniem polskich liter w pliku csv ale tym się nie zajmowałem.
    (princ "\nImport współrzędnych wstawienia bloku z pliku tekstowego v.0.1(beta)") (princ "\nCopyright (c)2020 by Perlon") (princ "\nŁadowanie funkcji c:txt2blocks.........") (defun c:txt2blocks ( / p_dat o_dat linia *error* counter) (defun *error* (msg) (if (not (member msg '("Function cancelled" "quit / exit abort"))) (princ (strcat "\nError: " msg)) ) (princ) ) (setq p_dat (getfiled "Wpisz nazwę pliku" "" "csv" 0)) (if p_dat (progn (setq o_dat (open p_dat "r")) (setq counter 0) (setvar 'OSMODE 0) (while (setq linia (read-line o_dat)) (progn (setq counter (1+ counter)) (if (> (strlen linia) 0) (progn (setq lista (cd:CON_String2List linia '(","))) (command "_.INSERT" "HP_B2" "_s" 1 "_r" 0 (list (car lista) (cadr lista)) (caddr lista) (cadddr lista) (cadr (cdddr lista))) ) ) ) ) ) ) (princ (strcat "\nPrzetworzono " (itoa counter) " punktow")) (princ) ) (princ " Załadowane.") (princ) ; =========================================================================================== ; ; Konwersja takstu z separatorami na liste / ; ; ------------------------------------------------------------------------------------------- ; ; (cd:CON_String2List "1;2;3;" '(";")) ; ; =========================================================================================== ; ;;;* ------------------------------------------------------------------------------------- *;;; ;;;* PODZIAŁ ŁAŃCUCHA TEKSTOWEGO NA LISTĘ *;;; ;;;* *;;; ;;;* Funkcja rozbija łańcuch tekstowy na listę *;;; ;;;* Autor: Bill Kramer - opublikowana w CADENCE 4/97 *;;; ;;;* *;;; ;;;* Argumenty funkcji: *;;; ;;;* =================== *;;; ;;;* S - łańcuch tekstowy do podziału *;;; ;;;* D - lista separatorów (lista łańcuchów tekstowych) *;;; ;;;* *;;; ;;;* Uwaga: Jeżeli w łańcuchu do rozbicia znajdują się liczby typu INT, funkcja *;;; ;;;* zwraca je jako REAL *;;; ;;;* ------------------------------------------------------------------------------------- *;;; (defun cd:CON_String2List (s d / buf res cnt ch digs isnum temp) (setq buf "" cnt 1 isnum T digs '("." "+" "-" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9") ) (repeat (strlen s) (setq ch (substr s cnt 1) cnt (1+ cnt) ) (cond ((and (member ch d) (> (strlen buf) 0)) (cond ((= (strcase buf T) "nil") (setq res (cons nil res)) ) ((= isnum T) (setq res (cons (if (= (atoi buf) (atof buf)) (atoi buf) (atof buf) ) res ) ) ) (T (setq res (cons buf res))) ) (setq buf "" isnum T ) ) ((not (member ch d)) (setq buf (strcat buf ch)) (if (null (member ch digs)) (setq isnum nil) ) ) ) ) (if (> (strlen buf) 0) (setq res (cons (if isnum (atof buf) buf ) res ) ) ) (reverse res) )  
  24. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w [VBA] Szkic w UserForm   
    Takie coś naskrobałem na szybko w C#. Oczywiście kod jest siermiężny ale działa. Polecam używanie wysokopoziomowych języków .NET przy zabawach z WF ew. WPF. VBA miewa braki, aczkolwiek ma niezaprzeczalną zaletę, że jest "na pokładzie" i nie potrzeba zewnętrznego kompilatora.

    ZwForm.rar
  25. Upvote
    perlon przyznał(a) reputację dla dmatusz3 w [C#] Zdarzenie zmiana schematu kolorów interfejsu   
    W ZWCAD 2021 proszę sprawdzić zmienną systemową COLORTHEME