-
Postów
1474 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
93
Treść opublikowana przez kruszynski
-
LISP - rysowanie części/kontury.
kruszynski odpowiedział(a) na arexxx temat w Wsparcie programistyczne LISP i VisualLISP
To może zacznijmy od rzeczy najprostrzych. Wiesz jak narysować kreskę używając AutoLISP? Jeśli nie, to zerknij na te kilka przykładów https://www.zwcad.pl/1-narzedzia-do-lisp.html Jeśli tak, to wrzuć co zrobiłeś i zapytaj o to czego nie wiesz. -
[C#] zdarzenie przy komendzie CANNOSCALE
kruszynski odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Może Eventhandler SystemVariableChanged ? -
Palety narzędzi - tworzenie, edycja
kruszynski odpowiedział(a) na jacnightingale temat w ZWCAD Standard i Professional
Istotną kwestią jest o jaką paletę chodzi? Jeśli o tą dostępną po uruchomieniu polecenia _toolpalettes, to nie ma do niej API. Jedyne co możemy zrobić, to wyeksportować i zaimportować z poziomu GUI. Można jednak utworzyć własne palety, używając WPF. tak jak @Parikon wrzucił: W ZWcad takimi paletami są np SmartSelect, QuickCalc, czy designCenter -
odtworzenie obwiedni kreskowania_problem
kruszynski odpowiedział(a) na alf temat w ZWCAD Standard i Professional
Jak na razie przygotowałem taką wersję minimalną. Działa tak, że klikamy w kolejne obszary w wyniku powstaje sumaryczny obrys. zlewnia.lsp -
export do wmf_pytanie za 5 punktów
kruszynski odpowiedział(a) na alf temat w ZWCAD Standard i Professional
Musimy robić coś inaczej, bo u mnie lisp działa. To co wkleiła Pani w treści to tylko początek lispa. cały dodałem w załączniku. Po jego uruchomieniu powstał plik mfw. Załączam też plik wynikowy. Co tutaj jest inaczej niż powinno być? WMF_World.lsp Droga_full.mfw -
odtworzenie obwiedni kreskowania_problem
kruszynski odpowiedział(a) na alf temat w ZWCAD Standard i Professional
- całkiem możliwe, ale jeszcze nie potwierdzam na 100%. - kreskowanie załatwia nam przypadki gdzie są małe przerwy jak pisała Pani we wpisie powyżej, więc nie jestem pewien czy pominięcie tego kroku byłoby wskazane Czyli różnica pomiędzy naszą funkcją a funkcją byłaby taka, że boundary tworzy oddzielne regiony dla poszczególnych obszarów, nasza funkcja miałaby tworzyć ich sumę. Tylko to czy coś jeszcze? Podejrzewam, że czas kreskowania nie będzie znaczący. Dodatkowo kreskowanie pozwoli łatwo rozróżnić obszary, które są "opracowane" od tych, które jeszcze wymagają pracy. może najlepiej byłoby zrobić opcję dodawania kreskowania . czyli opis miałby taki format: przedrostek[powierzchnia][jednostka]przyrostek -
odtworzenie obwiedni kreskowania_problem
kruszynski odpowiedział(a) na alf temat w ZWCAD Standard i Professional
Gdybyśmy przyjęli taki scenariusz: 1. Zaznaczamy kreskowania według własnego uznania, np wszystkie na określonej warstwie 2. Uruchamiamy funkcję - lub odwrotnie 3. Dla każdego z kreskowań program wykonuje następujące operacje: 3a. Program odtwarza kreskowania - jako region 3b. Jeśli powstanie wiele regionów to program je sumuje w jeden 3c. Program rozbija region (explode ) czyli powstaje kilka linii, łuków, może jakieś kółko 3d. Wszystko co powstało w kroku 3c program łączy w jedną polilinię ( pedit ) - jeśli w kreskowaniu były jakieś otwory - to: "sorry no bonus" To będzie OK? -
odtworzenie obwiedni kreskowania_problem
kruszynski odpowiedział(a) na alf temat w ZWCAD Standard i Professional
Wygląda mi na to, że zaczynamy się kręcić wokół czegoś, co łatwo źle zrozumieć. Różnych dziwacznych przypadków połączeń ,rozdzieleń, części wspólnych i otworów możemy znaleźć całe mnóstwo. Zastanawiamy się nad tym co i jak zrobić, ale nie wiem do czego to jest potrzebne. Jeśli mamy dwa przylegające kreskowania, a potrzebujemy ich wspólną obwiednię - którą da się edytować - da się to zrobić funkcjami ZWCADa, więc da się zrobić lispa, który to będzie robił dla wielu kreskowań Jeśli mamy kreskowanie które ma wycięte obszary wewnętrzne analogicznie do litery A. to jedynym co możemy zrobić, to region. Tak wiem, nie da się edytować regionu za uchwyty, ale możemy z tego odczytać rzeczywistą powierzchnię i rzeczywisty obwód. Gdybyśmy taki region zamienili na dwie polilinie, to chcąc odczytać rzeczywistą powierzchnię, musielibyśmy odjąć powierzchnię wewnętrzną od zewnętrznej. Gdybyśmy stworzyli jedną polilinię, wewnętrzna musiałaby mieć jakieś połączenie z zewnętrzną, wówczas mielibyśmy zakłamaną długość. Więc wróćmy do początku: co jest celem? np: - utworzyć granice obszaru które jest określone przylegającymi kreskowaniami? - jako polilinię dającą się edytować na uchwytach? - utworzyć granice obszaru które może mieć "otwory" , z zachowaniem poprawnego parametru powierzchni i długości? - skrócić czas potrzebny na wielokrotnie powtarzane tych samych czynności dla setki kreskowań? -
ScreenToGif
-
[DCL] Walidacja wartości edit-box'a
kruszynski odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
NIezupełnie wyszło tak jak chciałem, ale może wystarczy. Blokuje inny element okna. ale nie przy każdej zmianie, ale przy zatwierdzaniu wartości, np przechodząc do innej komórki,albo [enter] na koniec. plik DCL wygląda tak: EditCheck : dialog { label = ""; :edit_box{ key="path"; label="Ścieżka"; edit_width=6; fixed_width=true; action = "(DCL:Edit:IsValid)"; } : button { action = "(done_dialog 0)"; key = "accept"; label = "Zapisz"; } : button { action = "(done_dialog 0)"; key = "cancel"; label = "Anuluj"; is_cancel = true; } } plik LSP tak: (defun DCL:Edit:IsValid ( / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nDCL:Edit:IsValid :*error*: " ) (princ msg ) (princ "\n") ) ) ) (print (strcat "wartość wpisana do okna: " $key " to: " $value ) ) (if (= "" $value) (mode_tile "accept" 1) (mode_tile "accept" 0) ) ) (defun c:testEdit ( / dcl_id RunDialogResult coords LastPath *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nc:testEdit:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq DCL_Path "C:\\<< TWOJA ŚCIEŻKA >>\\edit_check.DCL") (setq dcl_id (load_dialog DCL_Path)) (setq RunDialogResult t ) (setq LastPath "" ) (while RunDialogResult (if(not(new_dialog "EditCheck" dcl_id))(exit)) (action_tile "cancel" "(done_dialog -1)") (setq RunDialogResult(start_dialog)) (cond ((= RunDialogResult 0) (progn (setq RunDialogResult nil ))) ; ESC pressed (t (print RunDialogResult)) ) ) (unload_dialog dcl_id) (princ) ) -
[DCL] Walidacja wartości edit-box'a
kruszynski odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Na 99.9% da się to zrobić. Mam taki fragment kodu sprawdzający czy wpisana została liczba. (defun DCL:CheckNum ( / ) (if (not(> (atof $value) 0)) (set_tile $key "")(set_tile $key (rtos(atof $value)) ) ) ) To jeszcze trzeba osadzić w kontekście DCLa i na to nie mam przykładku tak na szybko. -
W ZWCAD 2018, 2019 można szyfrować lispy poleceniem lispowym tak: (compile-zelx "C:\\Ścieżka\\Plik.lsp" "C:\\Ścieżka\\Plik.zelx")
-
[C#] Detekcja środowiska
kruszynski odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
hm. jeszcze nie wiem do czego, ale mam takie podskórne wrażenie, że będę tego używał. -
[C#] Detekcja środowiska
kruszynski odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Znalazłem: namespace test { public class Class1 : ZwSoft.ZwCAD.Runtime.IExtensionApplication { public void Initialize() { MessageBox.Show("Initialize!"); } public void Terminate() { Console.WriteLine("Cleaning up..."); } [CommandMethod("test2492")] public static void test2492() { MessageBox.Show("Hello World!"); } } } Ale jestem z siebie dumny -
[C#] Detekcja środowiska
kruszynski odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Mogę się mylić, ale tak na szybko szukałbym czegoś takiego: Assembly.GetExecutingAssembly() -
[C#] Detekcja środowiska
kruszynski odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Podejrzewam że tak. W ZRX jest to możliwe. Poszukam czegoś, albo dopytam w ZWSOFT. Również postaram się czegoś dowiedzieć Tu mam najgorsze przeczucia. Raczej stworzyłbym 2 projekty , czy nawet więcej i ładowałbym te same pliki źródłowe. Problem może wynikać z dodawania różnych "References" do tego samego projektu. A może to tylko bezpodstawne moje obawy. -
Na podstawie przykładu udało mi się powtórzyć problematyczne zachowanie programu. Przekażę zgłoszenie do ZWSOFT.
-
Sprawdziłem zgłoszony przez Pana przypadek, ale u mnie działa OK. Korzystam z wersji vernum "2018.07.26(35476)_x64" być może to jest przyczyna. Być może coś robimy inaczej. W związku z tym chciałbym poprosić o szerszy przykład kodu, który wykorzystuje Pan do tworzenia tekstu. Być może na tej podstawie uda się ustalić coś więcej.
-
Własny pasek narzędzi
kruszynski odpowiedział(a) na kaminki temat w Wsparcie programistyczne LISP i VisualLISP
Mam potwierdzenie z ZWSOFT. Na chwilę obecną tworzenie wstążki z poziomu C# nie jest jeszcze obsługiwane. -
Własny pasek narzędzi
kruszynski odpowiedział(a) na kaminki temat w Wsparcie programistyczne LISP i VisualLISP
A koniecznie musi to być w C# ? Myślę że łatwiej zrobić mnu, wczytać -> powstanie cuix który można dostosować (polecenie CUI) Zapytam w ZWSOFT o możliwości w C# -
Chciałbym odświeżyć taki temat: Może Pan podać przykład? jak jest a jak powinno być ?
-
vlax-ldata-.... a wersje ZWcad
kruszynski odpowiedział(a) na 2P temat w Wsparcie programistyczne LISP i VisualLISP
Tak, oczywiście. Takie zgłoszenie już wysłałem. -
vlax-ldata-.... a wersje ZWcad
kruszynski odpowiedział(a) na 2P temat w Wsparcie programistyczne LISP i VisualLISP
Znalazłem sposób na odczytanie LData z rysunku w 2018. Niestety nie jest to jeszcze gotowe rozwiązanie, ale wrzucam to co znalazłem bo trochę mi pilno do innych zajęć. Jak znajdę chwilę to przygotuję kompleksowe rozwiązanie. (setq DictName "testDict") (setq Key "testKey") (setq dicts ( vla-get-Dictionaries (vla-get-activedocument (vlax-get-acad-object) ) ) ) (setq dict(vla-Item dicts DictName ) ) (setq val ( vla-Item dict Key) ) (entget(vlax-vla-object->ename val)) Zwraca mi taką przykładową postać: ( (-1 . <ENTITY NAME: 26c17198>) (0 . "VLO-VL") (5 . "1FE") (102 . "{ACAD_REACTORS") (330 . <ENTITY NAME: 26c17180>) (102 . "}") (330 . <ENTITY NAME: 26c17180>) (100 . "vlo_VL") (90 . -64512) (91 . 620) (92 . 5) (40 . 3.97) (40 . 94.5289) (40 . 52.43) (40 . 93.7424) (40 . 372.158) (300 . "( (\"RoomID\" \"8011D\") (\"RoomName\" \"m.studio\") (\"RoomBuilding\" \"B.\") (\"RoomLevel\" \"0\") (\"RoomLocal\" \".2\") (\"RoomNr\" \".1\") (\"RoomNrProject\" \"B.0.2.1\") (\"RoomFunction\" \"U\") (\"RoomStrefy\" ( ( (\"StrefaHeight\" (&VLO-R . 0)) (\"StrefaName\" \"Strefa_1\") (\"StrefaPosadzka\" \"\") (\"StrefaType\" \"Z\") (\"StrefaStatus\" \"Pp\") (\"StrefaKorekta\" \"100%\") (\"StrefaTynki\" \"1\") (\"StrefaID\" \"48B7F5\") (\"StrefaAreaPline\" (&VLO-R . 1)) (\"StrefaPerimeter\" (&VLO-R . 2)) (\"StrefaArea\" (&VLO-R . 3)) (\"StrefaKubatura\" (&VLO-R . 4)) ) ) ) (\"RoomAreaPP\" (&VLO-R . 3)) (\"RoomAreaPD\" 0) (\"RoomArea\" (&VLO-R . 3)) (\"RoomKubatura\" (&VLO-R . 4)) (\"RoomFloor\" \"\") )" ) ) poszczególne (&VLO-R . 0) (&VLO-R . 1) (&VLO-R . 2) ... trzeba zamienić na kolejne wartości z listy powyżej (300 ... ) (40 . 3.97) (40 . 94.5289) (40 . 52.43) (40 . 93.7424) (40 . 372.158) czyli (&VLO-R . 0) podmienić na 3.97 (&VLO-R . 1) podmienić na 94.5289 (&VLO-R . 2) podmienić na 52.43 Troche z tym roboty. Jeśli zdecyduej się Pan na przejście na inną reprezentację danych to szkoda czasu, jeśli chciałby Pan pozostać przy LData, to proszę dać znać - przygotuję gotowe rozwiązanie. Choć to może trochę potrwać.