Forum użytkowników programów ZWCAD, KOMPAS-3D, Scan2CAD, PDF2CAD Strona Główna Forum użytkowników programów ZWCAD, KOMPAS-3D, Scan2CAD, PDF2CAD
Forum CAD.

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj

Poprzedni temat «» Następny temat
tworzenie zbioru w Lisp
Autor Wiadomość
KBR 

Dołączył: 12 Maj 2008
Posty: 156
Wysłany: Wto Cze 08, 10 08:55   tworzenie zbioru w Lisp

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?
 
     
kruszynski

Pomógł: 16 razy
Dołączył: 02 Sty 2009
Posty: 286
Wysłany: Sro Cze 09, 10 08:09   

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
 
     
KBR 

Dołączył: 12 Maj 2008
Posty: 156
Wysłany: Sro Cze 09, 10 12:38   

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.
 
     
kruszynski

Pomógł: 16 razy
Dołączył: 02 Sty 2009
Posty: 286
Wysłany: Sro Cze 09, 10 14:00   

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.
 
     
KBR 

Dołączył: 12 Maj 2008
Posty: 156
Wysłany: Sro Cze 09, 10 18:03   

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.
 
     
KBR 

Dołączył: 12 Maj 2008
Posty: 156
Wysłany: Czw Cze 10, 10 01:58   

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
Pobierz Plik ściągnięto 32 raz(y) 7.23 KB

 
     
kruszynski

Pomógł: 16 razy
Dołączył: 02 Sty 2009
Posty: 286
Wysłany: Czw Cze 10, 10 11:03   

Poinformowaliśmy producenta programu o tym problemie, kiedy otrzymamy jakieś informacje, przekażemy niezwłocznie.
Proszę o cierpliwość i wyrozumiałość
 
     
KBR 

Dołączył: 12 Maj 2008
Posty: 156
Wysłany: Czw Cze 10, 10 11:11   

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.
 
     
KBR 

Dołączył: 12 Maj 2008
Posty: 156
Wysłany: Czw Cze 10, 10 14:10   

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
Pobierz Plik ściągnięto 34 raz(y) 22.84 KB

 
     
kruszynski

Pomógł: 16 razy
Dołączył: 02 Sty 2009
Posty: 286
Wysłany: Pią Cze 11, 10 09:23   

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.
 
     
KBR 

Dołączył: 12 Maj 2008
Posty: 156
Wysłany: Wto Sie 03, 10 09:33   

zainstalowałem nową wersje ZWCAD, ale problem ze zmiana koloru dalej pozostał
 
     
dmatusz3
Site Admin

Pomógł: 22 razy
Dołączył: 20 Sty 2008
Posty: 606
Wysłany: Wto Sie 03, 10 20:54   

Sprawdzimy status błędu i poinformujemy Pana.

Pozdrawiam
 
     
Assgarth 
programista

Pomógł: 2 razy
Dołączył: 26 Sty 2009
Posty: 120
Skąd: Poznań
  Wysłany: Pon Paź 04, 10 12:18   

KBR napisał/a:
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:
Kod:
(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
 
     
2P

Dołączył: 18 Mar 2008
Posty: 91
Wysłany: Pon Paź 04, 10 16:31   

Cytat:
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ść :)
_________________
=2P=
 
     
Assgarth 
programista

Pomógł: 2 razy
Dołączył: 26 Sty 2009
Posty: 120
Skąd: Poznań
  Wysłany: Wto Paź 05, 10 06:53   

2P napisał/a:

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.n...color-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
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0.3 sekundy. Zapytań do SQL: 13