KBR Opublikowano 13 Czerwca 2013 Zgłoś Udostępnij Opublikowano 13 Czerwca 2013 Witam ma taki lisp zrobiony jeszcze kiedy pracowałem na autocadzie. Procedura działa na ZWCAD 2012 ale nie dział na ZWCAD2012+ Już dawno nie pisałem lispów więc trudno mi znaleść błąd. Lisp wywala się prawdopodobnie na poleceniu mtext chyba nie umie kreślić punktu wstawienia mtextu Może koś umie pomóc? ;**********************************************************************************;Opis za pomocą mtekstu ze stałą skalą raz przyjetą;***************************************************************************************(defun c:tt (/ pt1 pt2 e )(setq osmode1 (getvar "osmode"))(setq osmode3 (getvar "osmode"))(If (= sc2 nil)(setq sc2 (getvar "dimscale")))(if (= sc3 nil)(progn(setq sc3 (getreal (strcat "\nPodaj skalę rysunku <" (rtos sc2 2 0) ">: ") ))(if (= sc3 nil)(setq sc3 sc2))(setq sc2 sc3)))(command "textstyle" "standard")(setq h (/ (* sc3 25) 10))(setq h1 (* sc3 0.5))(setq warstwa (getvar "clayer"))(command "ortho" "on")(setq war "opis")(if (null C:tlyr)(load "F:/a_block/lay/tlyr"))(command "tlyr" "")(command "layer" "m" "opis" "" "" "" "")(command "osnap" "nea")(setq pt1 (getpoint "\n Start :"))(command "osnap" "non")(setq pt2 (getpoint "\n To point :"))(setq radx (angtof "0" 0));(setq rady (angtof "90" 0));(setq rad45 (angtof "45" 0));(setq rad60 (angtof "60" 0));(setq rad30 (angtof "30" 0));(setq rad300 (angtof "300" 0))(setq w (* (* sc3 25) 10))(setq pt6 (polar pt2 radx w))(if (<= (car pt1)(car pt2)) (progn (command "mtext" pt2 "H" h "J" "Bl" "W" w "") (setq e (entget (entlast))) (setq pt3 ( cadr (textbox e))) (setq pt4 '(0 0 )) (setq dl (distance pt4 pt3)) (setq sc1 dl) ) (progn (command "mtext" pt2 "H" h "J" "Br" "W" w "") (setq e (entget (entlast))) (setq pt3 ( cadr (textbox e))) (setq pt4 '(0 0 )) (setq dl (distance pt4 pt3)) (setq sc1 (- 0 dl)) ))(if (/= e nil)(command "_leader" pt1 pt2 "" "" "" ""))(COMMAND "change" "last" "" "p" "c" "8" "")(command "layer" "set" warstwa "")(command "osmode" osmode1 ));defun onentelof 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 13 Czerwca 2013 Zgłoś Udostępnij Opublikowano 13 Czerwca 2013 Witam Problem może być spowodowany przez dwie przyczyny 1. Plik korzysta z czegoś jeszcze: (load "F:/a_block/lay/tlyr") Czy to jest dostępne i czy w takiej postaci bez rozszeżenia jest poprawne? 2. ZWCAD+ w polskiej wersji językowej nie posiada zdefiniowanych poleceń w języku angielskim. Można korzystać z domyślnych poleceń, które są zgodne z angielskimi, ale poprzedzone znakiem _ czyli przy każdym użyciu poleceń (command ...) nazwa polecenia i parametry powinny zaczynać się od _ co daje uniwersalność objawiającą się w możliwości uruchamiania poleceń na dowolnej platformie językowej. Przykład: (command "change" "last" "" "p" "c" "8" "") Powinno być (command "_change" "_last" "" "_p" "_c" "8" "") Pozdrawiam Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KBR Opublikowano 13 Czerwca 2013 Autor Zgłoś Udostępnij Opublikowano 13 Czerwca 2013 W oknie F2 pokazują sie Command: TTtextstyleEnter new value for TEXTSTYLE <"Standard">: standardCommand: ortho Enter mode [ON/OFF] <ON>: onCommand: layerCurrent layer: "opis"Enter an option[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:mEnter name for new layer (becomes the current layer) <opis>: opis Enter anoption[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:Command: TT Unknown command "TT". Press F1 for help.Command: TT Unknown command "TT". Press F1 for help.Command: TT Unknown command "TT". Press F1 for help.Command: -osnap Enter list of object snap modes: neaCommand: Start :-osnapCurrent osnap modes: NearEnter list of object snap modes: nonCommand: To point :-mtext Current text style: "Standard" Text height: 250Specify first corner:Specify opposite corner or [Height/Justify/Line spacing/Rotation/Style/Width]:_HSpecify height <250>: 250.0000000000000Specify opposite corner or [Height/Justify/Line spacing/Rotation/Style/Width]:_JEnter justification [TL/TC/TR/ML/MC/MR/BL/BC/BR] <TL>: _BlSpecify opposite corner or [Height/Justify/Line spacing/Rotation/Style/Width]: WSpecify width: 25000.00000000000MText:Command: ; error: bad argument type: 2D/3D point: nil Wydaje mi się że jest problem z drugim pinktem okna mtextu. próbowałem go podawać wcześnij definiją albo podając wspórzędne albo jeszcze jedno oczekiwanie na dane "" ale ni poradziłe sobie. Pracuje na wesji angielskiej z polskim menu, ponieważ w wersji poskiej nie mogłem się przyzwyczaić do skrutu "k" w uchwytach. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 14 Czerwca 2013 Zgłoś Udostępnij Opublikowano 14 Czerwca 2013 Witam Problem nie leży w punktach wskazanych ale w użyciu funkcji (setq pt3 ( cadr (textbox e))) textbox zwraca nil jeszcze niezupełnie rozumiem dlaczego. Postaram się to ustalić. Z tego co widzę w kolejnych liniach kodu, na podstawie punktów obliczonych z (textbox) obliczana jest długość, która nigdzie dalej nie jest użyta. Może więc można to zwyczajnie usunąć? czy może coś jeszcze gdzieś korzysta z wartości tu obliczonych? Pozdrawiam Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 14 Czerwca 2013 Zgłoś Udostępnij Opublikowano 14 Czerwca 2013 Im więcej to poznaję, tym mniej rozumiem. Z zamieszczonego przykładu wynika, że tworzony jest pusty tekst, bez treści, który jest mierzony. ZWCAD zwraca tutaj ((0.0 0.0 0.0) (0.0 0.0 0.0)) ZWCAD+ nil. To powoduje dalsze komplikacje. Mogę się mylić, dawno tego nie używałem, ale z tego co pamiętam, to textbox powinien określać granice tekstu, ale tylko jednowierszowego. Dla tekstów wielowierszowych należałoby raczej użyć bardziej uniwersalnej funkcji: vla-getboundingbox. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kojacek Opublikowano 14 Czerwca 2013 Zgłoś Udostępnij Opublikowano 14 Czerwca 2013 Im więcej to poznaję, tym mniej rozumiem. Z zamieszczonego przykładu wynika, że tworzony jest pusty tekst, bez treści, który jest mierzony. ZWCAD zwraca tutaj ((0.0 0.0 0.0) (0.0 0.0 0.0)) ZWCAD+ nil. To powoduje dalsze komplikacje. Mogę się mylić, dawno tego nie używałem, ale z tego co pamiętam, to textbox powinien określać granice tekstu, ale tylko jednowierszowego. Dla tekstów wielowierszowych należałoby raczej użyć bardziej uniwersalnej funkcji: vla-getboundingbox. Prawda i nie(cała)prawda. Rzeczywiście (i tu prawda) textbox ma zastosowanie tylko dla obiektów typu TEXT. Dla tekstów wielowieszowych zaś (obiekty MTEXT), vla-getboundingbox, zwraca ramkę określającą obszar samego obiektu (nie zaś obszar dla rzeczywistej treści). Przypadki gdy szerokość tekstu wielowierszowego jest wielokrotnie większa niźli szerokość jego treści, są dość powszechne. kojacek Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KBR Opublikowano 20 Czerwca 2013 Autor Zgłoś Udostępnij Opublikowano 20 Czerwca 2013 Dzięki za odpowiedzi. Procedurę przerobiłem z procedury do robienia opisów tekstem jednowierszowym z podkreśleniem i długość teksu używałem do określenia długości podkreślenia. W tekscie wielowierszowym jest mi to nie potrzebne. Wiele się nie zastanawiałem bo do tej pory działało. Wykasowałem linie odpowiedzialne za mierzenie tekstu ale nadal nie działa. Więc coś nie tak z poleceniem mtext pokazuje się taki komunikat: Command: TTUnknown command "TT". Press F1 for help.Unknown command "TT". Press F1 for help.Unknown command "TT". Press F1 for help. Start : To point :Current text style: "Standard" Text height: 62.5 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 20 Czerwca 2013 Zgłoś Udostępnij Opublikowano 20 Czerwca 2013 Witam Problem z MTextem jest taki, że w starszej wersji ZWCADa (command "mtext" pt2 "H" h "J" "Bl" "W" w "") Tworzyło tekst i prosiło Użytkownika o wpisanie treści. Wersji 2012+ MText w tej postaci kończy działanie. Jedyny sposób jaki znam, by w tej sytuacji poprosić Użytkownika o wpisanie tekstu jest użycie funkcji (getstring) Niestety nie pozwala ona na użycie wbudowanego edytora a jedynie podanie treści, która będzie użyta jako wartość tekstu. Kolejna sprawa to funkcja: (command "layer" "m" "opis" "" "" "" "") gdzie "" kończy polecenie a kolejne "" powtarzają ostatnio użyte polecenia. Funkcja powinna mieć raczej postać: (command "layer" "m" "opis" "") Całość kodu mogłaby wyglądać tak (defun c:tt (/ pt1 pt2 e ) (setq osmode1 (getvar "osmode"))(setq osmode3 (getvar "osmode")) (If (= sc2 nil)(setq sc2 (getvar "dimscale"))) (if (= sc3 nil) (progn (setq sc3 (getreal (strcat "\nPodaj skalę rysunku <" (rtos sc2 2 0) ">: ") )) (if (= sc3 nil)(setq sc3 sc2)) (setq sc2 sc3) )) (command "_textstyle" "standard") (setq h (/ (* sc3 25) 10)) (setq h1 (* sc3 0.5)) (setq warstwa (getvar "clayer")) (command "_ortho" "on") (setq war "opis") ;(command "layer" "m" "opis" "" "" "" "") (command "_layer" "m" "opis" "") (command "_osnap" "nea") (setq pt1 (getpoint "\n Start :")) (command "_osnap" "non") (setq pt2 (getpoint "\n To point :")) (setq radx (angtof "0" 0)) ;(setq rady (angtof "90" 0)) ;(setq rad45 (angtof "45" 0)) ;(setq rad60 (angtof "60" 0)) ;(setq rad30 (angtof "30" 0)) ;(setq rad300 (angtof "300" 0)) (setq w (* (* sc3 25) 10)) (setq pt6 (polar pt2 radx w)) (setq wartosc (getstring "podaj treść" )) ;(if (<= (car pt1)(car pt2)) ; (progn ; (command "_mtext" pt2 "H" h "J" "Bl" "W" w wartosc "") ; ) ; (progn ; (command "_mtext" pt2 "H" h "J" "Br" "W" w wartosc "") ; ) ;) ;(if (/= e nil) (command "_leader" pt1 pt2 "a" wartosc "") (command "_regen") (COMMAND "_change" "last" "" "p" "c" "8" "") (command "_layer" "set" warstwa "") (command "_osmode" osmode1 ) );defun Pozdrawiam KBR 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KBR Opublikowano 21 Czerwca 2013 Autor Zgłoś Udostępnij Opublikowano 21 Czerwca 2013 Dziękuję za pomoc. Jednak jednak opisywanie bez okna dialogowego nie jest zbyt wygodne. Będę stosował opis tekstem jednowierszowym łątwiejsza i szybsza edycja. Jest takie polecenie mleader. Może za pomocą tego polecenia zamiast mtext można zrobić podobną procedurę? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 24 Czerwca 2013 Zgłoś Udostępnij Opublikowano 24 Czerwca 2013 Witam Oczywiście procedurę można przerobić na używającą mleader. Wynik będzie następujący: (defun pt2txt (Px / ) (strcat (rtos (car Px)) "," (rtos (cadr Px)) "," (rtos (caddr Px))) ) (defun c:tt (/ pt1 pt2 e ) (setq osmode1 (getvar "osmode"))(setq osmode3 (getvar "osmode")) (If (= sc2 nil)(setq sc2 (getvar "dimscale"))) (if (= sc3 nil) (progn (setq sc3 (getreal (strcat "\nPodaj skalę rysunku <" (rtos sc2 2 0) ">: ") )) (if (= sc3 nil)(setq sc3 sc2)) (setq sc2 sc3) )) (command "_textstyle" "standard") (setq h (/ (* sc3 25) 10)) (setq h1 (* sc3 0.5)) (setq warstwa (getvar "clayer")) (command "_ortho" "on") (setq war "opis") (command "_layer" "m" "opis" "" ) (command "_osnap" "nea") (setq pt1 (getpoint "\n Start :")) (command "_osnap" "non") (setq pt2 (getpoint "\n To point :")) (command "_mleader" (pt2txt pt1) (pt2txt pt2) pause ) ;(command "_change" "last" "" "p" "c" "8" "") (command "_layer" "set" warstwa "") (command "_osmode" osmode1 ) );defun Dalej treść można wpisywać jedynie w linii poleceń bez uruchomienia okna edycji mtext Pozdrawiam Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
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ą.