KBR Posted June 8, 2010 Report Share Posted June 8, 2010 Mam taki problem. W acadzie działała taka funkcja (if (/= e nil)(command "_leader" pt1 pt2 "" "" "b" name_bl pt6 sc1 "" "")) (COMMAND "change" "last" "" "p" "c" "m" "") To jest tylko fragment procedury (mogę zamieścić całą - służyła do opisywania rysunków z podkreśleniem za pomocą bloku). Zmieniany był kolor bloku name_bl na "m". W ZWCAD to nie działa, wg mnie nie działa "last". Czy ktoś może pomóc? Link to comment Share on other sites More sharing options...
kruszynski Posted June 9, 2010 Report Share Posted June 9, 2010 Witam Moim zdaniem problem nie leży w zbiorze wskazań, sprawdzałem tą procedurę na ZWCAD 2009i i tam przypisało we właściwościach, ale nie zmieniło koloru wyświetlanego elementu. więc raczej problem tkwi w odświeżaniu, a nie w zbiorze. Mam też dobrą wiadomość, sprawdziłem to też w najnowszej wersji ZWCAD 2010 (vernum 2010.05.31). W tym przypadku procedura działa bez zarzutu. Wersję tą można pobrać z adresu www.zwcad.pl Link to comment Share on other sites More sharing options...
KBR Posted June 9, 2010 Author Report Share Posted June 9, 2010 Sprawdziłem, procedura zmienia kolor odnośnika, a mnie chodziło o zmianę koloru bloku. Może być zmieniony i odnośnik i blok (kreska) , ale tekst powinien pozostać nie zmieniony. Link to comment Share on other sites More sharing options...
kruszynski Posted June 9, 2010 Report Share Posted June 9, 2010 Last wybiera tylko jeden - ostatnio utworzony element, a nie wszystkie utworzone w ostatniej funkcji. Więc jeśli zmienia odnośnik to chyba jest poprawnie. Przyznam, że nie bardzo rozumiem o co chodzi ze zmianą tekstu a bloku. Jeśli ma być zmienione wszystko, to może lepiej zmienić aktualny kolor, wywołać polecenie (command), a potem przywrócić stary bieżący kolor. Link to comment Share on other sites More sharing options...
KBR Posted June 9, 2010 Author Report Share Posted June 9, 2010 cała procedura wygląda tak ;***************************************************** ;* * ;* wstawianie opisu z leaderem, podkreślonego blokiem, ;* z ustawieniem skali * ;* * ;***************************************************** ; (defun c:dtt (/ pt1 pt2 e ) (setq osmode1 (getvar "osmode"))(setq osmode3 (getvar "osmode")) (If (= sc2 nil)(setq sc2 (getvar "dimscale"))) (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") (command "layer" "m" "opis" "" "" "" "") (command "osnap" "nea") (setq pt1 (getpoint "\n Start :")) (command "osnap" "non") (setq pt2 (getpoint "\n To point :")) (setq rad (angtof "90" 0)) (setq pt6 pt2) (setq name_bl "F:/A_block/b/podkreska.dwg") (if (<= (car pt1)(car pt2)) (progn (command "dtext" "_j" "_Bl" pt6 h 0) (setq e (entget (entlast))) (setq pt3 ( cadr (textbox e))) (setq pt4 '(0 0 )) (setq dl (distance pt4 pt3)) (setq sc1 dl) ) (progn (command "dtext" "_j" "_Br" pt6 h 0) (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 "" "" "b" name_bl pt6 sc1 "" "")) (COMMAND "change" "last" "" "p" "c" "8" "") (command "layer" "set" warstwa "") (command "osmode" osmode1 ) );defun blok to po prostu linia o jednostkowej długości. Link to comment Share on other sites More sharing options...
KBR Posted June 10, 2010 Author Report Share Posted June 10, 2010 Zainstalowałem najnowszą wersję i pewne lispy przestały prawidłowo chodzić np.: Wstawiania numeru elementu (defun c:nr (/ numerek pnt1 pnt2 sc name_bl) (setq sc (getvar "dimscale"))(setq osmode1 (getvar "osmode")) (command "osnap" "nea") (setq pnt1 (getpoint "\n Start :")) (command "osnap" "non") (setq pnt2 (getpoint "\n To point :")) (if (< (car pnt2)(car pnt1))(setq name_bl "F:/A_block/b/nrelem_l.dwg")(setq name_bl "F:/A_block/b/nrelem")) (if (not cl)(setq cl 1)) (initget 6) (setq numerek (getint (strcat "\nNumer <" (rtos cl 2 0) ">: "))) (if (= numerek nil)(setq numerek cl)) (setq cl (1+ numerek)) (setq warstwa (getvar "clayer")) (command "layer" "M" "opis" "" "" "" "") (command "_leader" pnt1 pnt2 "" "" "b" name_bl pnt2 sc "" "" numerek) (command "layer" "set" warstwa "")(command "osmode" osmode1 ) );defun atrybut "nr" występujący w bloku nrelem którego wartość jest wstawiona za pomocą zmiennej "numerek" do tej pory był wstawiany z kolorem jaki miał w bloku (niebieski) teraz wstawiany jest z Bylayer. Zauważałem że w innych procedurach jest tak samo. Ale tam gdzie wstawiany jest sam blok bez leadera to kolor pozostaje jak w bloku oryginalnym. nrelem.zip Link to comment Share on other sites More sharing options...
kruszynski Posted June 10, 2010 Report Share Posted June 10, 2010 Poinformowaliśmy producenta programu o tym problemie, kiedy otrzymamy jakieś informacje, przekażemy niezwłocznie. Proszę o cierpliwość i wyrozumiałość Link to comment Share on other sites More sharing options...
KBR Posted June 10, 2010 Author Report Share Posted June 10, 2010 Dziękuję. W powyższym przypadku można sobie poradzić przez zmianę aktualnego koloru, gorzej jeżeli w jednym bloku jest więcej atrybutów o różnych kolorach. Za każdym razem trzeba zmieniać ręcznie. Może trzeba przejść na rysowanie za pomocą grubości linii, ale to wiele zmian i nie wiem czy wszystko będzie ok. Link to comment Share on other sites More sharing options...
KBR Posted June 10, 2010 Author Report Share Posted June 10, 2010 Myślałem, że zrobię sobie szybką procedurę na zmianę koloru, ponieważ inny kolor dotyczy tylko numerów elementów. Założyłem, że pręty będą miały nazwę atrybutu nr, elementy stalowe - nre, a drewniane nrd. napisałem (DEFUN c:cn (/ ) (command "ATTEDIT" "" "" "nre" "" pause "" "c" "5" "Q") ) ale to nie działa ponieważ zmienia się zamiast atrybut "nre", atrybut pierwszy na liście w bloku. jeżeli w danym bloku nie ma atrybutu o nazwie "nre" to nic się nie zmienia. OpisBl.zip Link to comment Share on other sites More sharing options...
kruszynski Posted June 11, 2010 Report Share Posted June 11, 2010 Chyba jest poważniejszy problem z tymi atrybutami A może zdecydowałby Pan zmienić procedurę na używającą entmake, entmod albo nawet coś z rodziny VLAX. Więcej szczegółów prześlę na priv. Link to comment Share on other sites More sharing options...
KBR Posted August 3, 2010 Author Report Share Posted August 3, 2010 zainstalowałem nową wersje ZWCAD, ale problem ze zmiana koloru dalej pozostał Link to comment Share on other sites More sharing options...
dmatusz3 Posted August 3, 2010 Report Share Posted August 3, 2010 Sprawdzimy status błędu i poinformujemy Pana. Pozdrawiam Link to comment Share on other sites More sharing options...
Assgarth Posted October 4, 2010 Report Share Posted October 4, 2010 cała procedura wygląda tak;***************************************************** ;* * ;* wstawianie opisu z leaderem, podkreślonego blokiem, ;* z ustawieniem skali * ;* * ;***************************************************** ; (defun c:dtt (/ pt1 pt2 e ) (setq osmode1 (getvar "osmode"))(setq osmode3 (getvar "osmode")) (If (= sc2 nil)(setq sc2 (getvar "dimscale"))) (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") (command "layer" "m" "opis" "" "" "" "") (command "osnap" "nea") (setq pt1 (getpoint "\n Start :")) (command "osnap" "non") (setq pt2 (getpoint "\n To point :")) (setq rad (angtof "90" 0)) (setq pt6 pt2) (setq name_bl "F:/A_block/b/podkreska.dwg") (if (<= (car pt1)(car pt2)) (progn (command "dtext" "_j" "_Bl" pt6 h 0) (COMMAND "change" "last" "" "p" "c" "8" "") ;lub (command "_.chprop" (entlast) "" "_la" warstwa "_c" 1 "") (setq e (entget (entlast))) (setq pt3 ( cadr (textbox e))) (setq pt4 '(0 0 )) (setq dl (distance pt4 pt3)) (setq sc1 dl) ) (progn (command "dtext" "_j" "_Br" pt6 h 0) (COMMAND "change" "last" "" "p" "c" "8" "") ;lub (command "_.chprop" (entlast) "" "_la" warstwa "_c" 1 "") (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 "" "" "b" name_bl pt6 sc1 "" "")) (COMMAND "change" "last" "" "p" "c" "8" "") (command "layer" "set" warstwa "") (command "osmode" osmode1 ) );defun blok to po prostu linia o jednostkowej długości. Biorąc pod uwagę powyższą postać kodu, aby uzyskać kolor dla atrybutu bloku, należałoby umieścić w odpowiednim miejscu właściwy kod (zaznaczyłem kolorem czerwonym). Można również użyć innej funkcji: (command "_.chprop" (entlast) "" "_la" warstwa "_c" 1 "") W ten sposób każdy z atrybutów jednego bloku, może mieć nadany inny kolor. Można też pobawić się zmienną systemową "CECOLOR" i zmieniać jej wartość tuż przed wywołaniem polecenia tworzącego obiekt np. atrybut czy blok, a potem przywracać do postaci wejściowej. Aby natomiast móc zmienić kolor samego bloku, blok powinien być utworzony na warstwie "ByLayer", w przeciwnym przypadku zmiana kolorów bloku może być niemożliwa (to samo dotyczy wersji na AutoCAD). pozdrawiam Link to comment Share on other sites More sharing options...
2P Posted October 4, 2010 Report Share Posted October 4, 2010 Aby natomiast móc zmienić kolor samego bloku, blok powinien być utworzony na warstwie "ByLayer", w przeciwnym przypadku zmiana kolorów bloku może być niemożliwa (to samo dotyczy wersji na AutoCAD). Witam! Rozumiem, że autorowi chodziło o utworzenie bloku z kolorem ByLayer, a nie "na warstwie ByLayer". Sugerowałbym jednak utworzenie bloku o kolorze ByBlock, a nie ByLayer. Wydaje mi się to bardziej użyteczne. *** I odbiegnę trochę od tematu. Wg mnie definiowanie kolorów w bloku to bardzo zła praktyka (dotyczy to również kolorów atrybutów). Podobnie jak ustawianie elementów bloku na jakiejś konkretnej warstwie (zamiast na "0"). Bardzo to utrudnia życie innym osobom które muszą wykorzystać rysunek z takimi blokami. Padła już wyżej przez autora Lispa deklaracja o możliwości (próbie?) przejścia na definiowanie grubości linii nie za pomocą kolorów. Polecam - pora to uczynić, to przyszłość :) Link to comment Share on other sites More sharing options...
Assgarth Posted October 5, 2010 Report Share Posted October 5, 2010 Witam! Rozumiem, że autorowi chodziło o utworzenie bloku z kolorem ByLayer, a nie "na warstwie ByLayer". Sugerowałbym jednak utworzenie bloku o kolorze ByBlock, a nie ByLayer. Wydaje mi się to bardziej użyteczne. W takim przypadku odsyłam do tematu: http://forum.projektuje.net/zmienna-cecolor-vt303.htm Co do kolorowania atrybutów w bloku, to może i nie jest to najlepsze dla programów obsługujących takie bloki, ale na pewno dla użytkowników, którym to wręcz pomaga. Co do wydruku, to kwestia właściwego przypisania grubości do warstw i kolorów - zaawansowany użytkownik nie ma z tym najmniejszego problemu i zazwyczaj działa zawsze na, przez siebie stworzonym, szablonie, gdzie wszystko ma zdefiniowane. pozdrawiam Link to comment Share on other sites More sharing options...
2P Posted October 5, 2010 Report Share Posted October 5, 2010 Ponieważ z dyskusji o niuansach Lispa wyłonił się zupełnie inny temat o kolorach w bloku - wydaje mi się, że ciekawy do dyskusji, żeby nie śmiecać tego wątku tworzę osobny... Link to comment Share on other sites More sharing options...
Recommended Posts