kojacek Opublikowano 9 Czerwca 2014 Zgłoś Opublikowano 9 Czerwca 2014 Jak rozumiem, brak zainteresowania - nie ma potrzeby rozwijania tematu? Cytuj
justyha Opublikowano 9 Czerwca 2014 Autor Zgłoś Opublikowano 9 Czerwca 2014 Hej Może "KBR" się wypowie mi osobiście takie narzędzie wystarczy jakie jest, ale chyba w jego branży będzie bardziej przydatne. Pozdrawiam Cytuj
dmatusz3 Opublikowano 10 Czerwca 2014 Zgłoś Opublikowano 10 Czerwca 2014 A co powiecie na coś takiego? Rysując wymiar skażony dane (stała i współczynnik) przypisane są do wymiaru. Pozwala to mieć w rysunku różne wymiary z różnymi danymi. I teraz, takie polecenie -XDIM, ma następujące opcje: -xdim.png Rysuj - rysuje wymiar zmieniając tekst (tak jak wcześniejsze XDIM) Uzgodnij - przypisuje dowolnie wskazanym wymiarom ustawienia (stała i współczynnik) z wymiaru źródłowego. Aktualizuj - po rozciągnięciu wymiaru skażonego, pozwala go zaktualizować. Przywróć - usuwa "skażenie" - przywraca wymiar o długości normalnej Ustawienia - ustawienia współczynnika i skali Idziemy w tym kierunku? Parę dni nie było - odpowiadam po czasie :) Ja jestem zainteresowany rozwinięciem tego polecenia. Cytuj
kojacek Opublikowano 11 Czerwca 2014 Zgłoś Opublikowano 11 Czerwca 2014 Zatem jest już coś, co działa chyba dobrze. Brakuje jeszcze obsługi błędów, ale to zawsze na koniec po testach, najlepiej dodać. Przede wszystkim na początek:1) Potrzebna jest bliblioteka CADPL-Pack, którą można pobrać stąd: http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html2) Powinna ona znajdować się w ścieżce poszukiwań3) Kod należy skopiować do pliku (XDim.lsp) i załadować4) Dostępne jest główne polecenie -XDIM (oraz dla wygody polecenia: XDIM, XDIMRES, XDIMREG, XDIMMAT5) Program testowany przezemnie na AutoCAD-zie, zatem nie ma pewności, czy w całości tak będzie pod ZwCAD. Mam nadzieję że tak. Testujcie. Wywołując polecenie -XDIM, macie do wyboru wiele opcji. Działanie ich wszystkich jest (mam nadzieję) intuicyjne. Poniżej kod: ; =========================================================================================== ; ; XDim.lsp by kojacek ; 11-06-2014 ; Wymaga biblioteki: CADPL-Pack-v1.lsp <http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html> ; =========================================================================================== ; (if (not cd:ACX_ADoc)(load (findfile "CADPL-Pack-v1.lsp"))) ; ------------------------------------------------------------------------------------------- ; (defun C:-XDIM (/ k) (setq m (_MsgData t)) (setq k (cd:USR_GetKeyWord (strcat "\nWymiar skażony " m) '("Rysuj" "Uzgodnij" "Aktualizuj" "Przywróć" "uStawienia" "Wyjdź") (if (not *XDIMDATA*) "Rysuj" (caddr *XDIMDATA*)) ) ) (cond ( (= k "Wyjdź")(princ "\nAnulowano. ")) ( (= k "Rysuj")(C:XDIM)) ( (= k "Uzgodnij")(C:XDIMMAT)) ( (= k "Aktualizuj")(C:XDIMREG)) ( (= k "uStawienia") (_SetupDim)) ( (= k "Przywróć")(C:XDIMRES)) (t (princ "\nAnulowano. ")) ) (if (/= k "Wyjdź") (setq *XDIMDATA* (if *XDIMDATA* (list (car *XDIMDATA*)(cadr *XDIMDATA*) k) ) ) ) (princ) ) ; ------------------------------------------------------------------------------------------- ; (defun C:XDIMRES ()(_RestoreTextDim 0)(princ)) (defun C:XDIMREG ()(_RestoreTextDim 1)(princ)) (defun C:XDIMMAT ()(_MatchDim)(princ)) (defun C:XDIM ()(_DrawDynDim)(princ)) ; ------------------------------------------------------------------------------------------- ; (defun _MsgData (Val) (if (listp Val) (strcat "(Stała = " (cd:CON_Real2Str (cdr (assoc 1040 Val)) 2 2) " / Współczynnik = " (cd:CON_Real2Str (cdr (assoc 1041 Val)) 2 2) ")" ) (if *XDIMDATA* (strcat "(Stała = " (cd:CON_Real2Str (car *XDIMDATA*) 2 2) " / Współczynnik = " (cd:CON_Real2Str (cadr *XDIMDATA*) 2 2) ")" ) "(Brak ustawień)" ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _SetupDim (/ l m k s) (setq s (null (ssget "_x" '((0 . "DIM*") (-3 ("xDimTextReplacment"))))) m (_MsgData T) l (if (= m "(Brak ustawień)")'("Zmień") '("Zmień" "Resetuj")) k (cd:USR_GetKeyWord (strcat "\nUstawienia wymiaru skażonego " m ": ") (if s (append l '("Wyjdź"))(append l '("Pobierz z wymiaru" "Wyjdź"))) "Wyjdź" ) ) (cond ( (= k "Wyjdź")(princ "\nAnulowano. ")) ( (= k "Zmień")(setq *XDIMDATA* nil)(_SetGlobalData "uStawienia")) ( (= k "Resetuj")(setq *XDIMDATA* nil)) ( (= k "Pobierz")(_FromDimData)) (t (princ "Anulowano. ")) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _FromDimData (/ i) (if (null (setq i (_GetSourceDim))) nil (progn (setq i (car i)) (setq *XDIMDATA* (list (cdr (assoc 1040 i))(cdr (assoc 1041 i))(caddr *XDIMDATA*) ) ) (princ (strcat "\nUstawienia: " (_MsgData t))) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _MatchDim (/ i e d m sel en x) (if (null (setq i (_GetSourceDim))) nil (progn (setq e (last i) d (car i) m (_MsgData d) ) (redraw e 3) (while (and (setq sel (entsel (strcat "\n" m " Wybierz wymiar docelowy: "))) (not (null (setq en (car sel)))) (= (cdr (assoc 0 (entget en))) "DIMENSION") ) (_PutXDimData en (cdr (assoc 1040 d))(cdr (assoc 1041 d))) (setq x (cdr (cd:XDT_GetXData en "xDimTextReplacment"))) (_UpdateDimText nil en (cdr (assoc 1040 x))(cdr (assoc 1041 x))) (princ "Uzgodniono wymiar. ") ) (redraw e 4) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _GetSourceDim (/ sel e d) (while (and (setq sel (entsel "\nWybierz wymiar źródłowy: ")) (not (null (setq e (car sel)))) (not (setq d (cdr (cd:XDT_GetXData e "xDimTextReplacment")))) ) ) (cond ( (not e) (princ "Nic nie wskazano. ") nil) ( (not d) (princ "Niewłaściwy obiekt. ") nil) (t (list d e)) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _RestoreTextDim (Mode / sel e) (while (and (setq sel (entsel "\nWybierz wymiar: ")) (not (null (setq e (car sel)))) ) (if (setq d (cdr (cd:XDT_GetXData e "xDimTextReplacment"))) (progn (cond ( (= Mode 0)(_UpdateDimText t e nil nil)) ( (= Mode 1)(_UpdateDimText nil e (cdr (assoc 1040 d))(cdr (assoc 1041 d)))) (t nil) ) (princ (cond ( (= Mode 0) "Przywrócono pierwotny wymiar. ") ( (= Mode 1) "Zaktualizowano wymiar. ") (t nil) ) ) ) (if (= (cdr (assoc 0 (entget e))) "DIMENSION") (princ "Wymiar nie jest skażony. ") (princ "To nie jest wymiar. ") ) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _UpdateDimText (Mode Ent Con Fac / d n nd) (setq d (entget Ent)) (if Mode (progn (cd:XDT_RemoveXData Ent "xDimTextReplacment") (setq nd (subst (cons 1 "")(assoc 1 d) d)) ) (setq n (+ Con (* Fac (cdr (assoc 42 d)))) nd (subst (cons 1 (cd:CON_Real2Str n 2 2))(assoc 1 d) d) ) ) (entmod nd) ) ; ------------------------------------------------------------------------------------------- ; (defun _PutXDimData (Ent VCon VFac) (cd:XDT_PutXData Ent "xDimTextReplacment" (list (cons 1040 VCon) (cons 1041 VFac) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _SetGlobalData (Key / v1 v2) (if (not *XDIMDATA*) (progn (initget (+ 1 2 4)) (if (setq v1 (getreal "\nPodaj stałą wymiaru: ")) (progn (initget (+ 1 2 4)) (setq v2 (getreal "\nPodaj współczynnik (lub ENTER): ")) (setq *XDIMDATA* (list v1 (if (not v2) 1.0 v2)(if Key Key "Rysuj")) ) ) ) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _DrawDynDim (/ pt Cmd e el d n nd) (_SetGlobalData nil) (if (setq pt (getpoint "\nOkreśl początek pierwszej pomocniczej linii wymiarowej: ") ) (progn (setq Cmd (getvar "CmdEcho") e (entlast) ) (setvar "CmdEcho" 0) (command "_.DimLinear" pt) (setvar "CmdEcho" Cmd) (while (= 1 (logand (getvar "CmdActive") 1)) (command "\\") ) (if (eq (setq el (entlast)) e) (princ "Anulowano. ") (progn (_PutXDimData el (car *XDIMDATA*)(if (not (cadr *XDIMDATA*)) 1.0 (cadr *XDIMDATA*))) (setq d (cdr (cd:XDT_GetXData el "xDimTextReplacment"))) (_UpdateDimText nil el (cdr (assoc 1040 d))(cdr (assoc 1041 d))) ) ) ) (princ "Anulowano. ") ) ) ; ------------------------------------------------------------------------------------------- ; (princ "\nPolecenie -XDIM") (princ) Mówcie jak działa. Cytuj
pawmal Opublikowano 12 Czerwca 2014 Zgłoś Opublikowano 12 Czerwca 2014 Witam Ja mam dwie rzeczy: 1. Po użyciu XDIM, pojawia się monit o podanie stałej wymiaru, wpisuję np. 100 oraz ENTER. Drugi monit, to prośba o podanie współ. (lub ENTER), ten ENTER nie wchodzi, potrzeba wpisać najpierw np. 1 i ENTER. Z tego co pamiętam w poprzedniej funkcji to działało. 2. W przypadku chęci aktualizacji wymiaru, polecenie można użyć tylko do wymiaru skażonego. W momencie, gdy jest zdefiniowana stała oraz współ. nic nie stoi na przeszkodzie, by użyć tego polecenia także do wymiaru nie skażonego np. gdy wymiar skażony został zresetowany (przywrócony). Według mnie nie ma sensu robić takiego ograniczenia. PS. Aczkolwiek ograniczenie z pkt. 2, można w zasadzie zastąpić funkcją Uzgodnij. Pozdrawiam Cytuj
kojacek Opublikowano 12 Czerwca 2014 Zgłoś Opublikowano 12 Czerwca 2014 Witam Ja mam dwie rzeczy: 1. Po użyciu XDIM, pojawia się monit o podanie stałej wymiaru, wpisuję np. 100 oraz ENTER. Drugi monit, to prośba o podanie współ. (lub ENTER), ten ENTER nie wchodzi, potrzeba wpisać najpierw np. 1 i ENTER. Z tego co pamiętam w poprzedniej funkcji to działało. 2. W przypadku chęci aktualizacji wymiaru, polecenie można użyć tylko do wymiaru skażonego. W momencie, gdy jest zdefiniowana stała oraz współ. nic nie stoi na przeszkodzie, by użyć tego polecenia także do wymiaru nie skażonego np. gdy wymiar skażony został zresetowany (przywrócony). Według mnie nie ma sensu robić takiego ograniczenia. PS. Aczkolwiek ograniczenie z pkt. 2, można w zasadzie zastąpić funkcją Uzgodnij. Pozdrawiam 1) W poprzedniej wersji (zapomnijmy o niej na marginesie) rzeczywiście zamiast współczynnika można było podać ENTER (domyślnie 1). W tej usunąłem ten mechanizm i wymagane jest podanie zawsze wartości. Pozostał jedynie poprzedni monit, które trzeba będzie poprawić - to moje niedopatrzenie. Chyba że chcecie w tej wersji mieć poprezdnie rozwiązanie. Decydujcie. 2) Należy odróżnić dwie opcje AKTUALIZUJ i UZGODNIJ. Pierwsza ma zastosowanie do wymiaru (zawsze skażonego) ale takiego, który w wyniku jakiejś edycji został zmieniony (np. rozciągnięty uchwytami). Program pobiera jego dane (współczynnik i stałą), ponownie odczytuje jego rzeczywistą długość, uwzględnia te dane i zmienia tekst wymiaru (aktualizuje) na oczekiwany. Druga zaś opcja ma zastosowanie w przypadku gdy w rysunku mamy wymiary o różnych współczynnikach (albo stałych). Pozwala ona przenościć te cechy (uzgadniać) z jednego wymiaru na drugi. Cytuj
pawmal Opublikowano 12 Czerwca 2014 Zgłoś Opublikowano 12 Czerwca 2014 Ok, dziękuję za wyjaśnienie. Wydawało mi się, że aktualizacja działa w oparciu o stałą i współczynnik aktualnie zdefiniowany. Jeśli każdy skażony wymiar "pamięta" stałą oraz współczynnik, to co innego. W tym wypadku dane te pobierane są z wymiaru skażonego. Zatem, funkcje według mnie działają OK ;) Pozdrawiam Cytuj
kojacek Opublikowano 12 Czerwca 2014 Zgłoś Opublikowano 12 Czerwca 2014 (edytowane) Ok, dziękuję za wyjaśnienie. Wydawało mi się, że aktualizacja działa w oparciu o stałą i współczynnik aktualnie zdefiniowany. Jeśli każdy skażony wymiar "pamięta" stałą oraz współczynnik, to co innego. W tym wypadku dane te pobierane są z wymiaru skażonego. Zatem, funkcje według mnie działają OK ;) Pozdrawiam Aktualna stała i współczynnik, wykorzystywane są do bieżącego rysowania wymiarów i są w rysunku rzeczą ulotną. Po utworzeniu wymiaru dane są przypięte do obiektu. Po zamknięciu dokumentu, i ponownym otwarciu, konieczne jest ponowne ustawienie parametrów do rysowania, natomiast istniejące wymiary "pamiętają" swoje nastawy. W celu ustawienia parametrów do rysowania w oparciu o istniejące obiekty służy opcja Pobierz z wymiaru, w Ustawieniach. Pozwala to rysować skażone wymiary, z takimi samymi danymi co wymiar wskazany, po godzinie, miesiąciu, czy roku... ;) Edytowane 12 Czerwca 2014 przez kojacek Cytuj
pawmal Opublikowano 12 Czerwca 2014 Zgłoś Opublikowano 12 Czerwca 2014 Przyznam się, że nie dostrzegłem tej opcji- faktycznie bajer ;) Pozdrawiam Cytuj
kojacek Opublikowano 12 Czerwca 2014 Zgłoś Opublikowano 12 Czerwca 2014 Przyznam się, że nie dostrzegłem tej opcji- faktycznie bajer ;) Pozdrawiam No fakt, czasem można nie zauważyć, bowiem bajer jest o tyle chytry że, pojawia się jedynie gdy można go zastosować... Gdy w rysunku nie ma żadnych wymiarów skażonych, bajer nie jest widoczny... :) Cytuj
KBR Opublikowano 13 Czerwca 2014 Zgłoś Opublikowano 13 Czerwca 2014 Dzisiaj wypróbowywałem procedurę wydaję się bardzo przydatna. Mam kilka uwag: - Wymiar opisuje się z dokładnością do 2 miejsc po przecinku co nie zawsze jest korzystne, lepiej by było że odczytywał dokładność z ze stylu, może być aktualnego. - W opisie program uwzględnia współczynnik wymiaru z aktualnego wymiaru co jest raczej błędem. Mało prawdopodobne jest aby użytkownik podając skalę wymiaru, uwzględniał że już w stylach ma skale podaną. Cytuj
kojacek Opublikowano 14 Czerwca 2014 Zgłoś Opublikowano 14 Czerwca 2014 Dzisiaj wypróbowywałem procedurę wydaję się bardzo przydatna. Mam kilka uwag: - Wymiar opisuje się z dokładnością do 2 miejsc po przecinku co nie zawsze jest korzystne, lepiej by było że odczytywał dokładność z ze stylu, może być aktualnego. - W opisie program uwzględnia współczynnik wymiaru z aktualnego wymiaru co jest raczej błędem. Mało prawdopodobne jest aby użytkownik podając skalę wymiaru, uwzględniał że już w stylach ma skale podaną. To można zrobić - ustawić tak jak ma styl wymiarowania. Inny problem w tej sytuacji to pomijanie zer kończących. Zwykle się je pomija, z tego co wiem przy tego typu "wymiarach skażonych", często się je zostawia. Więc powiedzcie jak to zrobić. Tylko ilość miejsc z wymiaru i niepomijanie zer (tak jak teraz) czy coś kombinujemy ponadto? Nie uważam tego za błąd - a wręcz przeciwnie. Wydaje mi się że użytkownik powinien zadbać o to aby wymiarować XDIM-em, wykorzystując styl bez skalowania długości. Albowiem sytuacja gdzie, rzeczywista długość jest już mnożona jednym współczynnikiem (ze stylu), a następnie kolejny raz mnożona przez nastawy użytkownika (w XDIM) może rodzić niejednoznaczności. Dlatego, jako zasadę przyjmuję że styl dla XDIM powinien mieć z natury współczynnik 1. Ale - jeśli uważacie że powinno się to zmienić - popatrzę ewentualnie jak to zmienić. Cytuj
KBR Opublikowano 14 Czerwca 2014 Zgłoś Opublikowano 14 Czerwca 2014 Z ty To można zrobić - ustawić tak jak ma styl wymiarowania. Inny problem w tej sytuacji to pomijanie zer kończących. Zwykle się je pomija, z tego co wiem przy tego typu "wymiarach skażonych", często się je zostawia. Więc powiedzcie jak to zrobić. Tylko ilość miejsc z wymiaru i niepomijanie zer (tak jak teraz) czy coś kombinujemy ponadto? Nie uważam tego za błąd - a wręcz przeciwnie. Wydaje mi się że użytkownik powinien zadbać o to aby wymiarować XDIM-em, wykorzystując styl bez skalowania długości. Albowiem sytuacja gdzie, rzeczywista długość jest już mnożona jednym współczynnikiem (ze stylu), a następnie kolejny raz mnożona przez nastawy użytkownika (w XDIM) może rodzić niejednoznaczności. Dlatego, jako zasadę przyjmuję że styl dla XDIM powinien mieć z natury współczynnik 1. Ale - jeśli uważacie że powinno się to zmienić - popatrzę ewentualnie jak to zmienić. 1. Ja bardzo często wymiaruję w mm lub w cm wtedy wymiar powinien być bez miejsc po przecinku, ( co prawda nie wiem czy takie narzędzie będzie mi potrzebne przy wymiarach w mm, ale by było bardziej uniwersalne) natomiast w [m] to oczywiście najlepiej do 2 miejsc. 2. U minie tak nie działa jeżeli wymiar aktualny skale ma ustawioną na 1 i Xdim na 10 to długość zmierzona 100 będzie 1000 jeżeli skala aktualnego stylu wymiaru będzie 0,1 to xdim będzie 100 jeżeli aktualna skala jest na 10 to z xdim otrzymamy 10000. Czyli za każdym razem xdim uwzględnia skalę aktualnego stylu wymiarowania. Lepiej by było żeby nie uwzględniaj tzn że jak w xdim jest ustawiona na 10 to w każdym przypadku powinna być 1000. Cytuj
kojacek Opublikowano 16 Czerwca 2014 Zgłoś Opublikowano 16 Czerwca 2014 Z ty 1. Ja bardzo często wymiaruję w mm lub w cm wtedy wymiar powinien być bez miejsc po przecinku, ( co prawda nie wiem czy takie narzędzie będzie mi potrzebne przy wymiarach w mm, ale by było bardziej uniwersalne) natomiast w [m] to oczywiście najlepiej do 2 miejsc. 2. U minie tak nie działa jeżeli wymiar aktualny skale ma ustawioną na 1 i Xdim na 10 to długość zmierzona 100 będzie 1000 jeżeli skala aktualnego stylu wymiaru będzie 0,1 to xdim będzie 100 jeżeli aktualna skala jest na 10 to z xdim otrzymamy 10000. Czyli za każdym razem xdim uwzględnia skalę aktualnego stylu wymiarowania. Lepiej by było żeby nie uwzględniaj tzn że jak w xdim jest ustawiona na 10 to w każdym przypadku powinna być 1000. Masz rację - jest tak jak mówisz, to ja czegoś chyba nie dopatrzyłem, gdy sprawdzałem. Powtórnie przeanalizowałem i jest tak jak na malunku. Rozumiem tedy że powinno być zawsze tak: długość rzeczywista * współczynnik XDIM + stała XDIM Zatem to trzeba będzie poprawić. Druga rzecz to ilość miejsc po przecinku, tu wezmę ze stylu wymiarowania rzeczonego wymiaru, i trzecia - jeśli nie zdecydujecie inaczej, pozostanę przy niepomijaniu zer kończących. Tak? Cytuj
KBR Opublikowano 16 Czerwca 2014 Zgłoś Opublikowano 16 Czerwca 2014 Masz rację - jest tak jak mówisz, to ja czegoś chyba nie dopatrzyłem, gdy sprawdzałem. Powtórnie przeanalizowałem i jest tak jak na malunku. Rozumiem tedy że powinno być zawsze tak: długość rzeczywista * współczynnik XDIM + stała XDIM Zatem to trzeba będzie poprawić. Druga rzecz to ilość miejsc po przecinku, tu wezmę ze stylu wymiarowania rzeczonego wymiaru, i trzecia - jeśli nie zdecydujecie inaczej, pozostanę przy niepomijaniu zer kończących. Tak? Dla mnie te założenie odpowiadają. Cytuj
kojacek Opublikowano 16 Czerwca 2014 Zgłoś Opublikowano 16 Czerwca 2014 Zatem papróbujta teraz. Zmiany: Zmienione zgłoszenie przy podaniu współczynnika Pobieranie ilości miejsc po przecinku ze stylu rysowanego wymiaru Poprawione działanie skalowania - bez względu na współczynnik skali w stylu wymiarowania, XDIM uwzględnia tylko rzeczywistą długość wymiaru Nadal bez obsługi błędów... ; =========================================================================================== ; ; XDim.lsp by kojacek ; ver. 16-06-2014 ; Wymaga biblioteki: CADPL-Pack-v1.lsp <http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html> ; =========================================================================================== ; (if (not cd:ACX_ADoc)(load (findfile "CADPL-Pack-v1.lsp"))) ; ------------------------------------------------------------------------------------------- ; (defun C:-XDIM (/ m k) (setq m (_MsgData t) k (cd:USR_GetKeyWord (strcat "\nWymiar skażony " m) '("Rysuj" "Uzgodnij" "Aktualizuj" "Przywróć" "uStawienia" "Wyjdź") (if (not *XDIMDATA*) "Rysuj" (caddr *XDIMDATA*)) ) ) (cond ( (= k "Wyjdź")(princ "\nAnulowano. ")) ( (= k "Rysuj")(C:XDIM)) ( (= k "Uzgodnij")(C:XDIMMAT)) ( (= k "Aktualizuj")(C:XDIMREG)) ( (= k "uStawienia") (_SetupDim)) ( (= k "Przywróć")(C:XDIMRES)) (t (princ "\nAnulowano. ")) ) (if (/= k "Wyjdź") (setq *XDIMDATA* (if *XDIMDATA* (list (car *XDIMDATA*)(cadr *XDIMDATA*) k) ) ) ) (princ) ) ; ------------------------------------------------------------------------------------------- ; (defun C:XDIMRES ()(_RestoreTextDim 0)(princ)) (defun C:XDIMREG ()(_RestoreTextDim 1)(princ)) (defun C:XDIMMAT ()(_MatchDim)(princ)) (defun C:XDIM ()(_DrawDynDim)(princ)) ; ------------------------------------------------------------------------------------------- ; (defun _MsgData (Val / s) (setq s (cdr (assoc 271 (entget (tblobjname "DIMSTYLE" (getvar "DIMSTYLE")))))) (if (listp Val) (strcat "(Stała = " (cd:CON_Real2Str (cdr (assoc 1040 Val)) 2 s) " / Współczynnik = " (cd:CON_Real2Str (cdr (assoc 1041 Val)) 2 s) ")" ) (if *XDIMDATA* (strcat "(Stała = " (cd:CON_Real2Str (car *XDIMDATA*) 2 s) " / Współczynnik = " (cd:CON_Real2Str (cadr *XDIMDATA*) 2 s) ")" ) "(Brak ustawień)" ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _SetupDim (/ s m l k) (setq s (null (ssget "_x" '((0 . "DIM*") (-3 ("xDimTextReplacment"))))) m (_MsgData T) l (if (= m "(Brak ustawień)")'("Zmień") '("Zmień" "Resetuj")) k (cd:USR_GetKeyWord (strcat "\nUstawienia wymiaru skażonego " m ": ") (if s (append l '("Wyjdź"))(append l '("Pobierz z wymiaru" "Wyjdź"))) "Wyjdź" ) ) (cond ( (= k "Wyjdź")(princ "\nAnulowano. ")) ( (= k "Zmień")(setq *XDIMDATA* nil)(_SetGlobalData "uStawienia")) ( (= k "Resetuj")(setq *XDIMDATA* nil)) ( (= k "Pobierz")(_FromDimData)) (t (princ "Anulowano. ")) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _FromDimData (/ i) (if (null (setq i (_GetSourceDim))) nil (progn (setq i (car i)) (setq *XDIMDATA* (list (cdr (assoc 1040 i))(cdr (assoc 1041 i))(caddr *XDIMDATA*) ) ) (princ (strcat "\nUstawienia: " (_MsgData t))) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _MatchDim (/ i e d m sel en x) (if (null (setq i (_GetSourceDim))) nil (progn (setq e (last i) d (car i) m (_MsgData d) ) (redraw e 3) (while (and (setq sel (entsel (strcat "\n" m " Wybierz wymiar docelowy: "))) (not (null (setq en (car sel)))) (= (cdr (assoc 0 (entget en))) "DIMENSION") ) (_PutXDimData en (cdr (assoc 1040 d))(cdr (assoc 1041 d))) (setq x (cdr (cd:XDT_GetXData en "xDimTextReplacment"))) (_UpdateDimText nil en (cdr (assoc 1040 x))(cdr (assoc 1041 x))) (princ "Uzgodniono wymiar. ") ) (redraw e 4) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _GetSourceDim (/ sel e d) (while (and (setq sel (entsel "\nWybierz wymiar źródłowy: ")) (not (null (setq e (car sel)))) (not (setq d (cdr (cd:XDT_GetXData e "xDimTextReplacment")))) ) ) (cond ( (not e) (princ "Nic nie wskazano. ") nil) ( (not d) (princ "Niewłaściwy obiekt. ") nil) (t (list d e)) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _RestoreTextDim (Mode / sel e d) (while (and (setq sel (entsel "\nWybierz wymiar: ")) (not (null (setq e (car sel)))) ) (if (setq d (cdr (cd:XDT_GetXData e "xDimTextReplacment"))) (progn (cond ( (= Mode 0)(_UpdateDimText t e nil nil)) ( (= Mode 1)(_UpdateDimText nil e (cdr (assoc 1040 d))(cdr (assoc 1041 d)))) (t nil) ) (princ (cond ( (= Mode 0) "Przywrócono pierwotny wymiar. ") ( (= Mode 1) "Zaktualizowano wymiar. ") (t nil) ) ) ) (if (= (cdr (assoc 0 (entget e))) "DIMENSION") (princ "Wymiar nie jest skażony. ") (princ "To nie jest wymiar. ") ) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _UpdateDimText (Mode Ent Con Fac / d x s l n nd) (setq d (entget Ent) x (entget (tblobjname "DIMSTYLE" (cdr (assoc 3 d)))) s (cdr (assoc 271 x)) l (_GetDimLin x (cdr (assoc 42 d))) ) (if Mode (progn (cd:XDT_RemoveXData Ent "xDimTextReplacment") (setq nd (subst (cons 1 "")(assoc 1 d) d)) ) (setq n (+ Con (* Fac l)) nd (subst (cons 1 (cd:CON_Real2Str n 2 s))(assoc 1 d) d) ) ) (entmod nd) ) ; ------------------------------------------------------------------------------------------- ; (defun _GetDimLin (Data Len / f) (setq f (cdr (assoc 144 Data)) f (if (not f) 1.0 f) ) (* (/ 1.0 f) Len) ) ; ------------------------------------------------------------------------------------------- ; (defun _PutXDimData (Ent VCon VFac) (cd:XDT_PutXData Ent "xDimTextReplacment" (list (cons 1040 VCon) (cons 1041 VFac) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _SetGlobalData (Key / v1 v2) (if (not *XDIMDATA*) (progn (initget (+ 1 2 4)) (if (setq v1 (getreal "\nPodaj stałą wymiaru: ")) (progn (initget (+ 1 2 4)) (setq v2 (getreal "\nPodaj współczynnik: ")) (setq *XDIMDATA* (list v1 (if (not v2) 1.0 v2)(if Key Key "Rysuj")) ) ) ) ) ) ) ; ------------------------------------------------------------------------------------------- ; (defun _DrawDynDim (/ pt Cmd e el d n) (_SetGlobalData nil) (if (setq pt (getpoint "\nOkreśl początek pierwszej pomocniczej linii wymiarowej: ") ) (progn (setq Cmd (getvar "CmdEcho") e (entlast) ) (setvar "CmdEcho" 0) (command "_.DimLinear" pt) (setvar "CmdEcho" Cmd) (while (= 1 (logand (getvar "CmdActive") 1)) (command "\\") ) (if (eq (setq el (entlast)) e) (princ "Anulowano. ") (progn (_PutXDimData el (car *XDIMDATA*)(if (not (cadr *XDIMDATA*)) 1.0 (cadr *XDIMDATA*))) (setq d (cdr (cd:XDT_GetXData el "xDimTextReplacment"))) (_UpdateDimText nil el (cdr (assoc 1040 d))(cdr (assoc 1041 d))) ) ) ) (princ "Anulowano. ") ) ) ; ------------------------------------------------------------------------------------------- ; (princ "\nPolecenie -XDIM") (princ) Nowym kodem, należy zastąpić stary w całości. Cytuj
KBR Opublikowano 20 Czerwca 2014 Zgłoś Opublikowano 20 Czerwca 2014 Gratulacje! U mnie wszystko chodzi jak chciałem. Wielkie dzięki! Do poprzedniej wersji jest drobna różnica -xdim nie wchodzi od razu do ustawienia stałej i skali (czyli nie resetuje tych wartości) tylko w ustawienia procedury. Ciekawe czy można by było zwykłe wymiary i wymiary xdim przeskalowywać i dodawać (zmieniać) stałą? Cytuj
kojacek Opublikowano 20 Czerwca 2014 Zgłoś Opublikowano 20 Czerwca 2014 Wymiary XDIM po przeskalowaniu nie zmieniają wartości. Opcja Aktualizuj polecenia -XDIM, nadaje wymiarowi poprawną wartość (współczynnik / stała). Aby nadać nową wartość (współczynnik / stała) wymiarowi XDIM, można użyć opcji Uzgodnij, pobierając dane z innego wymiaru. Cytuj
KBR Opublikowano 20 Czerwca 2014 Zgłoś Opublikowano 20 Czerwca 2014 (edytowane) Właściwie to racja, zawsze można skorzystać z funkcji uzgodnij, która działa również na wymiary nie skażone, więc jest ok. Edytowane 20 Czerwca 2014 przez KBR Cytuj
kojacek Opublikowano 20 Czerwca 2014 Zgłoś Opublikowano 20 Czerwca 2014 Nie ma technicznych przeszkód, uniemożliwiających dołączenie kolejnej opcji typu Edytuj (pozwalającej zmienić dane istniejącego wymiaru XDIM), wydaje się jednak że powinno to odpowiadać rzeczywistemu zapotrzebowaniu użytkowników. Myślę że, jeśli zachodzi (nawet rzadko) taka konieczność, łatwiej jest [1] uzgodnić wymiar, lub [2] usunąć stary i narysować nowy. Chyba że istnieje takie zapotrzebowanie - wtedy można rozważyć rozszerzenie narzędzia. Początkowo przecież myślałem że te zabawy z wymiarem są jakąś marginalną i niszową sprawą, a okazało się że rozwiązanie może być przydatne. Co cieszy :) Cytuj
kojacek Opublikowano 20 Czerwca 2014 Zgłoś Opublikowano 20 Czerwca 2014 Pozostawiając wątek wymiarów XDIM do dalszej ewentualnej dyskusji, powrócę do pobocznego tematu jaki się tutaj przy okazji pojawił. Na przykładzie rzutów architektonicznych, zaprezentowanych przez Martin_S'a, rozpoczęliśmy dyskusję na temat przechowywania danych (nierysunkowych) w rysunku. Aby nie zaśmiecać dyskusji wymiarowej, Administratora czy Moderatora proszę o założenie nowego wątku na ten temat. Następnie o przeniesienie doń tego, oraz postów #37-#41 z tego wątku. Gdy taki wątek powstanie, rychło przedstawię alternatywny (do przezentowanego) sposób zapisywania danych, wykorzystując do tego dane niegraficzne rysunkowej bazy danych. Według mnie sposób lepszy niż wielokrotne powielanie tych samych danych w atrybutach bloków. Manipulować danymi będziemy za pomocą (oczywiście) LISP-a. Cytuj
dmatusz3 Opublikowano 21 Czerwca 2014 Zgłoś Opublikowano 21 Czerwca 2014 Aby nie zaśmiecać dyskusji wymiarowej, Administratora czy Moderatora proszę o założenie nowego wątku na ten temat. Następnie o przeniesienie doń tego, oraz postów #37-#41 z tego wątku. http://forum.cad.info.pl/topic/1131-przechowywanie-danych-nierysunkowych-w-rysunku/ :) 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ą.