swazy Opublikowano 5 Kwietnia Zgłoś Opublikowano 5 Kwietnia Dobry wieczór, Mam pytanie programistyczne odnośnie szyków. Gdzie i w jaki sposób zapisane są dane poszczególnych elementów szyku? Czy da się uzyskać dane położenia poszczególnych jego elementów? Czy możliwa jest edycja zakresu szyku, liczby elementów czy rozstawu poprzez Lisp'a? I drugie pytanie z innej beczki: czy możliwe jest zaprogramowanie własnych osnapów? Przykładowo chciałbym uzyskać endpoint i middlepoint, ale tylko dla obiektów ze wskazanej warstwy. Cytuj
kojacek Opublikowano 6 Kwietnia Zgłoś Opublikowano 6 Kwietnia Szyki jeśli mówimy o ich geometrycznej reprezentacji są (jak (powszechnie) wiadomo) blokami. Blokami anonimowymi. Ich struktura jest dwupoziomowa i wygląda tak: z obiektów które są powielane tworzone są bloki anonimowe. Następnie już w bloku szyku (również anonimowym) te bloki są układane w szyku prostokatnym, biegunowym lub po ścieżce, w odpowiedniej ilości. Progra(mistycznie) trzeba w pierwszej kolejności: wybrać blok, ma być on anonimowy, i reprezentować szyk (bo nie każdy blok anonimowy nim jest). Tu mozna skorzystać z mojej funkcji jk:BLK_getInsertType (którą znajdziesz TUTAJ). Następnie mając wybrany blok szyku trzeba zbadać jego wszystkie obiekty będą to (rzecz jasna) bloki anonimowe. Tu można skorzystać z funkcji CADPL_Pack-a, o nazwie cd:BLK_GetEntity. Tak na szybko ten proces wykonuje funkcja: ; getinsidearray - by kojacek (defun getinsidearray (Ename / %a) (if (and (setq %a (jk:BLK_getInsertType Ename)) (wcmatch %a "ACDBASSOC*ARRAY") ) (cd:BLK_GetEntity (cdr (assoc 2 (entget Ename))) nil ) (prompt "\nTo nie szyk.") ) ) To może wyglądać tak: Funkcję cd:BLK_GetEntity możesz użyć do zbadania każdego bloku anonimowego w szyku. Druga rzecz: Możliwe, acz (uważam) nie warte zachodu. Można tu wykorzystać taki sam mechanizm tworzenia osnap'ów jak dla funkcji grread. Jak wiadomo funkcja ta nie obsługuje trybów lokalizacji więc... jest w sieci kilka różnych rozwiązań (mniej lub bardziej skomplikowanych), które to symulują. dmatusz3 i swazy 2 Cytuj
swazy Opublikowano 6 Kwietnia Autor Zgłoś Opublikowano 6 Kwietnia Dziękuję za odpowiedź. Muszę się z tym przespać i pewnie będę męczył pytaniami dalej A póki co to mam jeszcze jedno pytanie z kolejnej beczki. Jak mogę się dostać do tych danych? To jest point parameter, ale nie ma jego wartości w atrybutach, cd:BLK_GetEntity też tego nie pokazuje. Dodam jeszcze, że to nie jest blok dynamiczny (wg cd:BLK_IsDynamicInsert ). Cytuj
swazy Opublikowano 13 Kwietnia Autor Zgłoś Opublikowano 13 Kwietnia Czy brak reakcji na pytanie oznacza, że w internecie było to wałkowane miliard razy i powinienem sobie to znaleźć (oczywiście próbowałem)? Cytuj
kruszynski Opublikowano 15 Kwietnia Zgłoś Opublikowano 15 Kwietnia W dniu 13.04.2024 o 15:37, swazy napisał: Czy brak reakcji na pytanie oznacza, że w internecie było to wałkowane miliard razy i powinienem sobie to znaleźć (oczywiście próbowałem)? Nie. Raczej znaczy że jest to skrajnie trudne. A tak trudno było mi przyznać się do własnej ignorancji. Znam dwa sposoby utworzenia właściwości dla elementu. W pierwszym cały element jest "Custom Entity" czyli właściwości i geometria wyświetlają się tylko jeśli aplikacja jest wczytana. Jeśli aplikacja nie jest wczytana element wyświetla sie jako obiekt typu proxy. W tym przypadku nie znam sposobu dostania się do parametrów elementu. W drugim sposobie jest to tylko element interfejsu, wiec dane dodatkowe mogą nie być nigdzie w nim zapisywane. A mogą mogą być zapisywane w XData, albo Dictionary, Cytuj
kojacek Opublikowano 15 Kwietnia Zgłoś Opublikowano 15 Kwietnia 36 minut temu, kruszynski napisał: Nie. Raczej znaczy że jest to skrajnie trudne. A tak trudno było mi przyznać się do własnej ignorancji. Znam dwa sposoby utworzenia właściwości dla elementu. W pierwszym cały element jest "Custom Entity" czyli właściwości i geometria wyświetlają się tylko jeśli aplikacja jest wczytana. Jeśli aplikacja nie jest wczytana element wyświetla sie jako obiekt typu proxy. W tym przypadku nie znam sposobu dostania się do parametrów elementu. W drugim sposobie jest to tylko element interfejsu, wiec dane dodatkowe mogą nie być nigdzie w nim zapisywane. A mogą mogą być zapisywane w XData, albo Dictionary, Błędnym założeniem jest że ktokolwiek będzie wiedział skąd się wzięły i jak są zbudowane bloki na komputerze swazy'ego, po zaprezentowaniu obrazka właściwości. Pewnie inaczej sprawy by się miały, gdyby został udostępniony plik dwg. Cytuj
swazy Opublikowano 17 Kwietnia Autor Zgłoś Opublikowano 17 Kwietnia W dniu 15.04.2024 o 06:18, kojacek napisał: Pewnie inaczej sprawy by się miały, gdyby został udostępniony plik dwg Wiem, tylko że nie mogę tego udostępnić bo to element sytemu, prawa autorskie, bla, bla, bla.... https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/get-list-of-parameters-being-used-in-block-without-vla-vlax/m-p/8461420#M378276 Wykopałem z czeluści internetów taki post - chodzi mi praktycznie o to samo co w przytoczonym trójkącie. Tylko z tego co rozumiem AutoCad ma (albo miał) wbudowaną funkcję getpropertyvalue. Sprawdzę to jutro (zaraz) w pracy. Czy ZWCAD ma coś analogicznego, albo czy da się takowe wydziobać? Cytuj
swazy Opublikowano 18 Kwietnia Autor Zgłoś Opublikowano 18 Kwietnia Przy pomocy: (getpropertyvalue blkEnt "AcDbDynBlockPropertyA1 X") ...udało mi się wyciągnąć współrzędne, które mnie interesują, ale ogrom niewiedzy pozostał... (dumpallproperties blkEnt) Co to właściwie jest i czy da się to w jakiś w miarę łopatologiczny sposób wyjaśnić laikowi co się tutaj wydarza? Cytuj
kruszynski Opublikowano 19 Kwietnia Zgłoś Opublikowano 19 Kwietnia @kojacek wytłumaczył tutaj: https://kojacek.wordpress.com/2016/12/01/visual-dumpallproperties/ Niestety na chwilę obecną w ZWCAD to nie jest jeszcze obsługiwane mamy do dyspozycji vlax-dump-object swazy 1 Cytuj
swazy Opublikowano 24 Maja Autor Zgłoś Opublikowano 24 Maja W dniu 6.04.2024 o 11:09, kojacek napisał: Szyki jeśli mówimy o ich geometrycznej reprezentacji są (jak (powszechnie) wiadomo) blokami. Blokami anonimowymi. Ich struktura jest dwupoziomowa i wygląda tak: z obiektów które są powielane tworzone są bloki anonimowe. Następnie już w bloku szyku (również anonimowym) te bloki są układane w szyku prostokatnym, biegunowym lub po ścieżce, w odpowiedniej ilości. Rzeczywiście działa 🤩 Dziękuję! A w jaki sposób ( o ile to jest możliwe ) mogę dostać się do elementu źródłowego szyku coby go edytować? I drugie pytanie: czy to narzędzie poniżej jest tylko dla magów, czy też może zostało udostępnione śmiertelnikom? ;) Cytuj
kojacek Opublikowano 25 Maja Zgłoś Opublikowano 25 Maja (edytowane) To jest stosunkowo proste. Zatem pokażę to na prostym przykładzie. Do tego potrzeba użyć tylko paru nawiasów. Na obrazie widać polilinię, której kopia posłużyła do stworzenia szyku (powyżej polilinii) ów szyk. Jak wcześniej zostało ustalone, mamy tutaj blok anonimowy (będący szykiem) który (w swojej definicji) składa się z instancji, innego bloku anonimowego reprezentującego grafikę obiektów powielanych w szyku. Ustalmy zatem jego nazwę. Wykorzystamy funkcje już wcześniej przezentowane. Wywołanie: (setq %b (mapcar '(lambda (%) (cdr (assoc 2 (entget %))) ) (getinsidearray (car (entsel))) ) ) Pokaże nam listę nazw bloków (składowych szyku) - jest to jeden (powielony) blok: Właściwie to już wszystko, bo mając nazwę bloku mamy nieograniczony dostęp do jego definicji, którą to możemy w dowolny sposób modyfikować (zmieniać/dodawać/usuwać obiekty). Przykładowo - modyfikacja może wygladać tak. Bierzemy elementy w tym bloku (tutaj dla uproszczenia tylko jeden - polilinia): (setq %e (vlax-ename->vla-object (car (cd:BLK_GetEntity (car %b) nil) ) ) ) i modyfikujemy polilinię - nadajemy jej stałą szerokość = 10.0, oraz kolor czerwony... (vla-put-ConstantWidth %e 5.0)(vla-put-Color %e 1) Nic nie widać? Regenerujemy rysunek i... voila: To wszystko. Edytowane 25 Maja przez kojacek dmatusz3 i swazy 2 Cytuj
swazy Opublikowano 26 Maja Autor Zgłoś Opublikowano 26 Maja Faktycznie, nie jest to skomplikowane. Spodziewałem się, że gdzieś siedzi definicja zbioru który jest obiektem/ami źródłowym szyku. A idąc za ciosem to czy (a znając Was to raczej "gdzie" ) da się modyfikować liczbę elementów/kolumn/wierszy i ich rozstaw w szyku? Cytuj
kojacek Opublikowano 26 Maja Zgłoś Opublikowano 26 Maja 22 minuty temu, swazy napisał: Faktycznie, nie jest to skomplikowane. Spodziewałem się, że gdzieś siedzi definicja zbioru który jest obiektem/ami źródłowym szyku. A idąc za ciosem to czy (a znając Was to raczej "gdzie" ) da się modyfikować liczbę elementów/kolumn/wierszy i ich rozstaw w szyku? Jeżeli: (getpropertyvalue ENAME "ClassName") gdzie ENAME to ename szyku zwróci "AcDbAssociativeRectangularArray" można dać: (setpropertyvalue ENAME "Items" INT) <- ilość kolumn (setpropertyvalue ENAME "ItemSpacing" REAL) <- odległość między kolumnami to samo dla: RowsWithExpression <- Wiersze RowSpacingWithExpression <- Odstępy między wierszami oraz: Levels <- Poziomy LevelSpacing <- Odstęp między poziomami swazy 1 Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.