|
obrázek v dialogu.
do dialogu DCL musíte vytvořit záznam o tom obrázku :
: image {key = "IMG";height = 10;width = 20;}
pak musíte vytvořit samotný obrázek, to si jej nakreslete v autocadu na obrazovce a pomoci příkazu _mslide sejmete obrazovku do souboru SLD, něco jako printscreen....
ten si uložte někam na disk.
dále do lispu mezi (new_dialog...) a (start_dialog) napište definici pro doplnění toho obrázku
(start_image "IMG") ;;; otevírám image pro editaci (fill_image 0 0 (dimx_tile "IMG") (dimy_tile "IMG") 0) ;;; image vybarvím barvou 0 = pozadí (slide_image 0 0 (dimx_tile "IMG") (dimy_tile "IMG") "I:\\LSP\\CadForum\\ENst.sld") ;;; do image dosadím obrázek sld kde dimx_tile a y je získání max. velikosti obrázku v pixelech je to vlastně rozměr odkud kam má být ten obrázek v tom image vložený (end_image) ;;; zavírá obrázek pro editaci
tak to je k tomu obrázku vše.
k IF :
samotná sintaxe je
(IF (podmínka)
(progn
(toto se provede když podmínka je TRUE)
(toto se provede když podmínka je TRUE)
(toto se provede když podmínka je TRUE)
)
(progn
(toto se provede když podmínka je FALSE)
(toto se provede když podmínka je FALSE)
(toto se provede když podmínka je FALSE)
(toto se provede když podmínka je FALSE)
(toto se provede když podmínka je FALSE)
(toto se provede když podmínka je FALSE)
(toto se provede když podmínka je FALSE)
)
tím progn docílíte toho že můžete mít více kroků co se dá udělat.....
teď podmínka pokud požadujete zjistit zda je to celé číslo tak ta vaše
(= n int) nelze protože int není vůbec definováno a neznamená to integer....
pokud by to měla být funkce pak by byl zápis podmínky takový :
(int n) to by vracelo buď true nebo false ale musela by být někde definovaná funkce int
já ale používám toto :
(if (= 0 (- n (fix n)))
(progn ;;; je celé
)
(progn ;;; je reálné
)
)
funguje to tak že třeba )120.5 - (zaokr 120.5)) = 0.5 a to není 0 proto je to reálné
co se týče hladin a typů čar, tak záleží na tom jak vytváříte ty obdélníky. dle vaší zprávy vidím že používate komandovou metodu, což já už nepoužívám, je hodně nedokonalá... já používám (entmakex....) ale vysvětlím tu Vaší. to co nakreslíte je vždy nakresleno tak jak je nastaveno aktuálně třeba hladina, barva.....
teď jak to změnit :
barva : (command "_cecolor" 125) kde 125 je barva
0 = dleblok
256 = dlehlad
v rgb "RGB:125,58,54" atd...
hladina :
totéž ale příkaz clayer
typčáry :
rovněž to samé ale příkaz celtype :
musí ale ta hladina a typ čáry existovat...
co se týče nakreslení obdélníku tak doporučuju toto
;;; zadání prvního bodu
(setq b1 (getpoint "\nZadej počáteční bod"))
;;; výpočet souřadnice b2 pomoci polárních souřadnic
(setq b2 (polar b1 0.0 70.0))
;;; kde polar je funkce, 0.0 je úhel 70.0 = délka
;;; pozor uhel je v radianech
;;; třetí bod spočítáme přídavkem od předchozího (např)
(setq b3 (list
(car b2) ;;; získá x z bodu b2
(+ (cadr b2) 140.0) ;;; získá y z bodu b2 a přičte 140)
))
;;; tady získáme bod složením pomoci list souřadnic (list x y z) kde x získáváme z b2, y z b2 + 140 a z je zbytečné.
;;; poslední souřadnici obdobně jako b3
(setq b4 (list (car b1)(cadr b3)))
;;; snad je to jasný, x získáme z b1 a y z b3
no a můžeme kreslit :
(command "_line" b1 b2 b3 mailto:b4@-70,0" rel="nofollow - b4 "_c" "")
doporučuju to "c" psát s podtržítkem
"c" funguje jen v ANG cadu
"_c" funguje všude ale to písmenko musí být z ang
nelze "_u" kde u=uzavřít... to nejde....
jak jsem zmínil před tím tak existuje i druhá metoda a ta by vypadala takto
(setq ent (entmakex (list
(cons 0 "LINE")
(cons 8 "HLADINA")
(cons 62 BARVA)
(cons 10 b1)
(cons 11 b2)
)
;;; je to složitější ale naprosto ovladatelné a navíc mám jméno té entity v proměnné ent
takže (entdel ent) mi ju smaže
ten zápis a jak se tvoří doporučuju toto :
(entget (car (entsel))) a klikněte na libovolnou entitu, vypíše vám seznam parametru....
co se týče té rotace tak to je trošku problém protože musíte určit co chcete rotovat, a odkud a o kolik.
a pokud používate command tak získáte jen poslední entitu....
ale když budete používat zadávání polární tak je to všecko vyřešené...
(setq uhel 0.15) ;;; v radianech uhel o kolik natočit
(setq stred (list 0.0 10.0 0.0)) je bod kolem kterého požaduji otočit
(setq b1 (list 10.0 20.0 0.0)) je libovolný bod na obdelníku
tak já ho teď přepočtu
(setq b1 (polar stred (+ uhel (angle stred b1)) (distance stred b1))) tím je už bod otočený jak potřebujete a obdelnik se rovnou otočeně kreslí....
a teď teprve (command "_line" b1 b2......)
pokud se chcete trošku naučit v lispu, doporučuju koukat do cadu na lsp soubory, a hlavně používejte editační prostředí.....
to vám hodně po,ůže.
v cadu napište VLIDE a jste v programování.... dost dobrý, kontroluje závorky, barevně odlišuje......
jinak klidně koukněte na mé stránky http://www.vchlebovska.eu" rel="nofollow - www.vchlebovska.eu do stahuj mám tam pár (3) drobnosti taky koukněte na lsp.... já se tak učit...
jo jinak v tom vlide je skvělej help.... F1
Jinak kdyby jste chtěl nějaké prográmky vytvořit, není problém, i nějaké školení bych dokázal provést.
Klidně se obraťte, mám na stránkách i email....
Zdravím Martin.
|