marcin.czyzewski Posted May 21 Report Share Posted May 21 Dzień dobry, Pierwszy raz korzystam z pomocy na jakimkolwiek forum Chciałbym wygenerować „skorowidz” elementów MLEADER. Oznaczenie + pozycja na arkuszu do wydruku na podstawie siatki podziału (np. 2 -> B1). Coś jak na papierowych mapach, aby łatwiej było odnaleźć element na dużym arkuszu. Nie jestem znawcą AutoCAD’a, więc mogę źle opisywać elementy interfejsu i nie do końca rozumieć "zasady", którymi rządzi się to oprogramowanie. Mam kilka pomysłów jak, to napisać, ale jak zwykle pojawia się problem u podstawy rozwiązania (możliwe, że wynika z mojej niewiedzy). Po odczytaniu pozycji elementu MLEADER, który jest osadzony na warstwie „X” na karcie „Model” i siatki (dla ułatwienia też dodanej na warstwie „X”) na karcie "Układ", nie jestem w stanie powiązać pozycji elementów. Interesuje mnie tylko rozwiązanie wzajemnego pozycjonowania obiektów na karcie "Układ", kiedy elementy z "Modelu" są w odpowiedniej skali. Czy jest jakiś układ współrzędnych, który daje możliwość powiązania elementów, które są wyświetlane na karcie "Układ". Obiekty w rzutni są skalowane 100:1. Może jest jakieś gotowe rozwiązanie. Quote Link to comment Share on other sites More sharing options...
pawmal Posted May 21 Report Share Posted May 21 Witam, Nie wiem czy dobrze rozumiem zagadnienie, ale moim zdaniem wystarczy raz umieścić odnośniki tylko w modelu, a na arkuszu wyświetlić te widoki przez rzutnię w odpowiedniej skali. Polecenie -NFRAGM (-PAN) umożliwia także przesunięcie widoku w rzutni o określoną wartość -gdyby była taka potrzeba. Quote Link to comment Share on other sites More sharing options...
marcin.czyzewski Posted May 21 Author Report Share Posted May 21 Dzień dobry, Dziękuję za odpowiedź. Niestety, to nie jest ten problem. Chodzi o odczytanie za pomocą LISP (X,Y) pozycji pojedynczych elementów i sprawdzenie czy np. MLEADER "1" jest w "kwadracie" siatki A1. Dokładniej, odczytać potrafię ale wartości, które się pojawiają wskazują, że to różne układy współrzędnych. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted May 21 Report Share Posted May 21 Dzień dobry, chciałem się tylko upewnić. Odnośniki wstawia Pan w przestrzeni modelu. W arkuszu ma Pan przygotowaną formatkę, gdzie są oznaczone sekcje rysunku. Po dopasowaniu modelu do arkusza potrzeba utworzyć zestawienie odnośników wraz z podaniem numeru sekcji arkusza gdzie taki odnośnik występuje. W takim zestawieniu ważniejszy jest punkt, do którego odnosi się mleader, czy treść mleadera? Co zrobić w przypadku gdy do mleadera jest więcej odnośników? Jeśli np. tekst odnośnika leży na przecięciu sekcji to jak go oznaczyć? Quote Link to comment Share on other sites More sharing options...
marcin.czyzewski Posted May 21 Author Report Share Posted May 21 Dzień dobry, Odnośniki wstawia Pan w przestrzeni modelu. W arkuszu ma Pan przygotowaną formatkę, gdzie są oznaczone sekcje rysunku. Po dopasowaniu modelu do arkusza potrzeba utworzyć zestawienie odnośników wraz z podaniem numeru sekcji arkusza gdzie taki odnośnik występuje. // Dokładnie tak W takim zestawieniu ważniejszy jest punkt, do którego odnosi się mleader, czy treść mleadera? // Ważniejszy pkt. mleadera Co zrobić w przypadku gdy do mleadera jest więcej odnośników? // Tego pytania nie rozumiem ... 1 mleader z jednym opisem a dokładnie 1 numerem, niepowtarzalnym Jeśli np. tekst odnośnika leży na przecięciu sekcji to jak go oznaczyć? // Arbitralnie trzeba przyjąć, chociaż jeżeli mówimy o punkcie, to raczej się nie zdarzy Ja zatrzymałem się w miejscu, gdzie tym samym LISPEM wstawiam koordynaty, a w zależności gdzie wstawiam (MODEL, UKŁAD) dostaję inne wartości. Jak wyciągam do pliku pozycję, to podobnie. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted May 21 Report Share Posted May 21 4 godziny temu, marcin.czyzewski napisał: Co zrobić w przypadku gdy do mleadera jest więcej odnośników? // Tego pytania nie rozumiem ... 1 mleader z jednym opisem a dokładnie 1 numerem, niepowtarzalnym Miałem coś takiego na myśli Quote Link to comment Share on other sites More sharing options...
marcin.czyzewski Posted May 22 Author Report Share Posted May 22 Dzień dobry, Rozumiem. Nie przewiduję takiej sytuacji. 1 mleader z jednym 1 numerem, niepowtarzalnym. Quote Link to comment Share on other sites More sharing options...
marcin.czyzewski Posted May 22 Author Report Share Posted May 22 Po wyciągnięciu właściwości obiektów, nie widzę możliwości powiązania. Jakiejś wspólnej warstwy, na której obiekty mają "znormalizowane" wartości X,Y położenia. Może jest jakichś przelicznik, który wiąże skalę rzutni + położenie z modelu + koordynaty na arkuszu. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted May 22 Report Share Posted May 22 Dziękuję za informacje, postaramy się coś wymyślić. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted May 22 Report Share Posted May 22 Odnośniki z modelu można łatwo przenieść do przestrzeni papieru. Wtedy współrzędne będą pokazywane względem papieru. Służy do tego polecenie _chspace Sposób działania pokazaliśmy na filmie poniżej. Mamy taki pomysł: Zrobić LISP, który wstawia blok, który jest punktem. Blok wstawiamy na początku grotu strzałki. Blok posiada atrybut, którego wartość jest taka sama jak tekstu mleadera. Przechodzimy do arkusza. Za pomocą polecenia _chspace przenosimy te bloki do przestrzeni papieru. Tworzymy zestawienie tych bloków za pomocą ekstrakcji danych (_DATAEXTRACTION) Quote Link to comment Share on other sites More sharing options...
RobS Posted May 22 Report Share Posted May 22 Cześć, Napisałem skrypt LISP który realizuje zagadnienie wyżej. Po wpisaniu polecenia SKOROSZYT i wybraniu MLeadera wstawia blok w grocie strzałki. Do atrybutu bloku przepisany jest tekst z MLeadera. Nagranie jak to działa poniżej. Plik DWG ze zdefiniowanym blokiem na którym przeprowadziłem test załączam do posta. (princ (strcat " Copyright © 2000 — 2024 Uslugi Informatyczne Szansa www.zwcad.pl Dostepne polecenia: SKOROSZYT - Wstawia blok z atrybutem w punkcie wstawienia MLeadera ") ) (defun C:SKOROSZYT (/ mLeader mLeaderCord mLeaderText) (setvar "CMDECHO" 0) (setvar "CMDDIA" 0) (setvar "ATTDIA" 0) (while (not (and (setq mLeader (entsel "\nWybierz MLEADERA: ") mLeaderName (car mLeader) ) (eq (cdr (assoc 0 (entget mLeaderName)))"MULTILEADER") ) ) (prompt "\nProsze wybrac MLEADERA!") ) (setq mLeaderCord (list (cadr (assoc 110 (entget mLeaderName))) (caddr (assoc 110 (entget mLeaderName)))) mLeaderText (cdr (assoc 304 (entget mLeaderName))) ) (command "-insert" "Skoroszyt" mLeaderCord "" "" "" mLeaderText) (princ) ) Skoroszyt.dwg Skoroszyt.lsp Quote Link to comment Share on other sites More sharing options...
wedzik Posted May 23 Report Share Posted May 23 Lepiej zaznaczyć mleadery oknem, albo wybrać wszystkie niże pojedynczo. Quote Link to comment Share on other sites More sharing options...
RobS Posted May 23 Report Share Posted May 23 (edited) Cześć, Wprowadziłem zmianę zgodnie z sugestiami, elementy można zaznaczyć grupowo oknem. Poza tym wszystko działa bez zmian, funkcję można wywołać poleceniem SKOROWIDZ (widzę, że powyżej przez pomyłkę pisałem skoroszyt) Plik LSP z wprowadzonym usprawnieniem załączam do posta. SKOROWIDZ.lsp Edited May 23 by RobS Quote Link to comment Share on other sites More sharing options...
marcin.czyzewski Posted May 23 Author Report Share Posted May 23 Dzień dobry, Serdecznie dziękuję za wsparcie. Nie spodziewałem się takiego odzewu. Jestem bardzo mile zaskoczony. Dopiero jutro będę miał czas na sprawdzenie rozwiązań i podpowiedzi (praca poza biurem na obiekcie). Dziękuje za pomoc. Quote Link to comment Share on other sites More sharing options...
RobS Posted May 24 Report Share Posted May 24 Cześć, Napisałem skrypt PRZENIESBLOKI.lsp który zautomatyzuje punkt 5. Będąc w rzutni za pomocą polecenia PRZENIESBLOKI bloki o nazwie Skorowidz zostają wybrane i przeniesione do przestrzeni papieru. W dniu 22.05.2024 o 14:47, dmatusz3 napisał: Mamy taki pomysł: Zrobić LISP, który wstawia blok, który jest punktem. Blok wstawiamy na początku grotu strzałki. Blok posiada atrybut, którego wartość jest taka sama jak tekstu mleadera. Przechodzimy do arkusza. Za pomocą polecenia _chspace przenosimy te bloki do przestrzeni papieru. Tworzymy zestawienie tych bloków za pomocą ekstrakcji danych (_DATAEXTRACTION) (princ (strcat " Copyright © 2000 — 2024 Uslugi Informatyczne Szansa www.zwcad.pl Dostepne polecenia: PRZENIESBLOKI - Przeniesienie blokow o nazwie Skorowidz do przestrzeni papieru ") ) (defun C:PRZENIESBLOKI (/ blockList) (setq blockList (ssget "X" (list (cons 0 "INSERT") (cons 2 "Skorowidz")))) (command "_chspace" blockList "") (princ) ) Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted May 24 Report Share Posted May 24 Podsumuję algorytm. 1. Załóżmy, że posiadamy plik, gdzie odnośniki są w przestrzeni modelu. 2. Potrzebny będzie blok Skorowidz.dwg Proszę go wstawić do rysunku (wystarczy przeciągnąć na okno rysunku). 3. Uruchamiamy skrypt SKOROWIDZ_1.lsp poleceniem SKOROWIDZ (wystarczy go przeciągnąć na okno rysunkowe programu). W wyniku tego przy grocie mleadera zostanie wstawiony blok, a do jego atrybutu zostanie wstawiona treść mleadera. 4. Ładujemy skrypt PRZENIESBLOK.lsp Przechodzimy do przestrzeni papieru i wchodzimy w rzutnie. Uruchamiamy skrypt poleceniem PRZENIESBLOKI W wyniku działania bloki zostaną przeniesione do przestrzeni papieru. 5. Uruchamiamy polecenie do ekstrakcji danych - DATAEXTRACTION W wyniku działania zostanie wstawione zestawienie współrzędnych bloków wraz z treścią mleaderów RobS 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.