Zobrazit plnou verzi příspěvku: Vyskova kota (GGmenu)
Dobry den,chcem sa vas opytat, ci by mi niekto z vas vedel pomoct s naprogramovanim lispu, ktory by vkladal blok s hodnotami ako je uvedene na prilozenom obrazku. Mam na mysli ten cerveny.Cize dany text by vyjadroval vlastne hodnotu y pred lomitkom a hodnotu x za lomitkom.Klasicka vyskova kota (na obr. v lavo) sa da vlozit pomocou GGmenu prikazom VKS ktory vklada blok 'Kota_vysky_R_GG.dwg'.Kedze ide o nieco podobne, mozno by stacilo len mierne poupravit uz existujuci script GGmenu, a vytvorit novy jednoduchy blok aby bol dosiahnuty cerveny vysledok z obrazku.To vsak uz sam nedokazem, preto vas ziadam o pomoc.Dakujem za tipy.
DodoSVK2011-10-22 07:58:50
Vladimír Michl
22.10.2011, 08:49
Na běžnou "kačenu" není třeba nic programovat. Ani na takovouto výškovou kótu. Viz dynamický blok "Dodo":http://www.cadforum.cz/catalog/block.asp?blk=8114
Dobrý den,součástí GGmenu a i samostatných výškových kót je nejen statická, ale i dynamická výšková kóta. Blok této výškové kóty stačí poupravit, případně se můžete inspirovat textovým polem, které automaticky odečítá výšku a vložit jej do bloku vlastního (viz Váš obrázek). Dynamická kačena má ale i své nevýhody, které jsou blíže popsány v dokumentaci pro výškové kóty (viz odkaz výše) nebo v sérii článků AutoCAD ve stavební praxi, 6.díl na autodeskclubu.Pokud byste si chtěl upravit lisp a přitom zachovat příkaz výškových kót z GGmenu, tak jej zduplikujte a přejmenujte si v lispu spouštěcí příkazy na jiné názvy. Pak si upravte blok, případně dodejte vlastní, a v lispu nahraďte název používaného bloku za ten Váš.
Dakujem obom za tipy.Nakolko vsak potrenujem, aby kota bola staticka, pouzitie textovych poli pre mna nieje vhodne.Musim sa teda vybrat upravou bloku Kota_vysky_R_GG a nasledne upravou lispu kotvysk.lspViem teda ze je nutne vytvorit novy blok s nazvom napr. Kota_vysky_R_GG_Y/X s potrebnym obsahom, a v kotvysk.lsp doplnit o novy odsek s (defun C:YX .... ktory by riadil atributy v novoytvorenom bloku, cim by som dosiahol moj ciel.Chapem to zatial spravne? pomaly sa do toho dostavam, no zatial neviem presne ocom pisem :) je to premna vsetko nove.Ked som vsak otvoril zdrojovy kod lispu, ktory treba poupravit, zatocila sa mi hlava :) je to premna zatial bohuzial este poriadny gulas.Vedel by mi niekto este pomoct s vytvorenim noveho bloku a upravou lispu? bol by som velmi vdacny, snazim sa postupne vsetko naucit aj sam, no toto by sa mi zislo skor mat hotove ako som schopny sa to naucit, preto ak by to niekto vedel spravit rychlo, popripade zislo by sa to aj jemu, bol by som velmi vdacny za pomoc.
DodoSVK2011-10-23 14:29:54
Utilita kotvysk.lsp neni tak slozita, ale obsahuje nekolikrat velmi podobnou utilitu lisici se jen v detailu. Finalni verze obsahuje dva popisy - cesky a anglicky v zavislosti na konfiguraci v zahlavi. Je v ni osetreno docela mnoho ruznych moznosti kde muze vzniknout chyba a to asi potrebovat nebudete. Take pracuje s dynamickym blokem, coz je trochu slozitejsi nez blok jednoduchy a to predpokladam Vy nepotrebujete. I kdyz pokud nebudete potrebovat aktualizace, tak to je stejne. Utilitu by bylo asi lepsi zkusit napsat od zacatku. Nevim jak moc
komplikovane by to bylo, ale asi moc ne. Kliknete do bodu, nactete souradnice, zformatujete si popis a vlozite blok. Pokud nebudete chtit aktualizovat pri zmene,
ale pouze vkladat nove bloky do mista kam kliknete, tak to neni tak slozite. Take je dulezite zda nebudete chtit vkladat automaticky napriklad podle krivky. Zkuste se do toho pustit, pokud narazite na konkretni problem, zkuste dotaz upresnit.Blok si vytvorte novy a dejte prosim hlavne jiny nazev nez je u kotvyk.lsp aby se to nejak nepletlo - hlavně aktualizace vyskovych kot. Pokud utilitu kotvysk pouzivate, tak by jste si pripravil komplikace hlavne Vy. Nevim jestli budete potrebovat jeden nebo dva atributy.
Mozno sa opytam hlupost ale predpokladam ze niekde v tomto retazci sa zistuje vyska ktora sa nakoniec objavi ako hodnota atributu vkladaneho bloku vyskovej koty.Ak by som chcel aby retazec zistil nie vysku (y suradnicu), ale x-ovu suradnicu, co je nutne zmenit? Predpokladam ze to staci pozmenit minimalne. Ide mi hlavne o to miesto v retazci, kde lisp kaze nacitat tu ypsilonovu suradnicu...dakujem za radu a usmernenie....(defun zjisti_vysku (ko nasobitel prefix / k y HODNOTA_KOTY format_cisla format_koty olddimzin2) ;nasobitel: ; - pro mm nasobitel=1000; pro ; - pro m nasobitel=1; pro (setq y (cdr (assoc 10 (entget ko)))) ;nacte do y hodnotu bodu (setq y (trans y 0 1)) ; prevede z globalniho do aktualniho USS (setq y (cadr y)) (if (< (abs y) 1e-011)(setq y 0)) ; melo by korigovat nepresnosti AutoCadu (setq HODNOTA_KOTY (/ y nasobitel)) ;(setq y (/ (cadr (cdr (assoc 10 (entget ko)))) 1000)) ; zakomentovany puvodni prikaz (setq format_koty (getvar "DIMLUNIT")) (setq format_cisla 2) (cond ((= format_koty 1) (setq format_cisla 1)) ;Scientific ((= format_koty 2) (setq format_cisla 2)) ;Decimal ((= format_koty 3) (setq format_cisla 3)) ; Engineering (feet and decimal inches) ((= format_koty 4) (setq format_cisla 4)) ; Architectural (feet and fractional inches) ((= format_koty 5) (setq format_cisla 5)) ;Fractional ((= format_koty 6) (setq format_cisla 2)) ;Decimal ) ; cond (if (and (= 1 (getvar "INSUNITS" )) (= 4 (getvar "DIMLUNIT"))) (progn (setq olddimzin2 (getvar "dimzin")) (setvar "dimzin" 1) ) ) (cond ((> y 0) (setq text (strcat prefix (rtos HODNOTA_KOTY format_cisla (getvar "LUPREC"))))) ((= y 0) (setq text (strcat "%%P" (rtos 0.0 format_cisla (getvar "LUPREC"))))) ((< y 0) (setq text (rtos HODNOTA_KOTY format_cisla (getvar "LUPREC")))) ) ; cond (setq k (entnext ko)) (setq k (entget k)) (setq k (subst (cons '1 (vl-string-subst "," "." text)) (assoc 1 k) k)) (entmod k) (entupd ko) (if olddimzin2 (progn (setvar "dimzin" olddimzin2)(setq olddimzin2 nil))) (princ)) ; defun
V radku:(setq y (cdr (assoc 10 (entget ko)))) ;nacte do y hodnotu bodu se nacita vlastnost vkladaciho bodu bloku. (assoc 10 (entget ko))vrati vlastnost ve formatu LIST - neco jako (10 X-souradnice Y-souradnice Z-souradnice)funkci (nth) nactete n-tou hodnotu z listu. Lze pouzit i funkce (car) (cadr), ale ty z hlavy nevimNemam moznost to ted vyzkouset, ale zkuste:(setq y (nth (assoc 10 (entget ko)) 1))nazornejsi by bylo nazvat promennou "X", ale to by jste musel upravit i zbytek funkce
vdaka za tip, no bud som spravil chybu ja alebo to nieje dobrevymenil som (setq y (cdr (assoc 10 (entget ko))))za(setq y (nth (assoc 10 (entget ko)) 1))ale nefunguje to. Blok sa vlozi s vychodzou hodnotou atributu, a v prikazovom riadku sa napise:Ukažte bod umístění kóty :"nesprávný typ argumentu: consp 1"
DodoSVK2011-10-23 19:52:11
Hmm, smula. Bez vyzkouseni to bude slozitejsi. Kouknete do napovedy na funkci (nth)Nejlepsi je spistit si VisualLisp (prikaz [CMD]VLIDE[/CMD] (_VLIDE) ) a tam mate jak pristupnou napovedu, tak konzoli na zkouseni prikazu, moznost debugovat a koukat se na hodnoty promennych za behu programu (nastroj kukatko).U funkce (nth) si nejsem si jist s poradim parametru. Bud je: (nth poradi list)nebo (nth list poradi)Pokud jsem to prevratil tak by bylo spravne(setq y (nth 1 (assoc 10 (entget ko))))
v napovede sa pise ze sprane je to takto (nth n lst)ked som zadal (setq y (nth 1 (assoc 10 (entget ko))))tak to nefungovalo tiez ale chybove hlasenie bolo uz ine.Ukažte bod umístění kóty :"nesprávný typ argumentu: 2D/3D bod: 6560.7"hodnota 6560.7 bola skutocne X suradnica, ale nezapisalo ju do hodnoty atributu. Zrejme treba poupravit koli zmene ktoru som urobil este neaku inu cast scriptu, aby to cele prebehlo bez chyboveho hlasenia. Je to tak? ci ani (setq y (nth 1 (assoc 10 (entget ko)))) nie je spravne kedze to nefunguje a zmenu treba hladat stale v tomto kratkom retazci?
DodoSVK2011-10-23 21:02:09
A co vlastne potrebujete? Potrebujete jen vkladat ty bloky dle kliknuti? A nebo potrebujete take pozdejsi aktualizaci? Potrebujete vkladat blok v zavislosti na meritku kotovaciho stylu a s formatem dle nastaveni jednotek (metry, mm, palce?Pokud tohle vsechno nepotrebujete tak je lepsi napsat trivialni novou utilitu. Ta bude velice prehledna. Pokud zacnete upravovat se slozitejsi utilitou, jako je na vkladani vyskovych kot, tak jen promazani zbytecnych radku Vam zabere mnohem vice casu!
No, je pravda ze zrejme je jednoduhsie napisat novu utilitu, no priznam sa ze Autolisp som dnes otvoril prvy krat v zivote, takze aj trivialna vec je premna problem.V uz existujucom scripte mam aspon ako taku sancu sa zorientovat a upravit ju, lebo kedysi davno som skusal programovat v inom programovacom jazyku, tak aspon to mi pomoha...Dosiahnut chcem toto:chem vkladat bloky len podla kliknutia, a najlepsie by bolo keby boli rovno v tvare ako som ukazoval v obrazku pri otvoreni temy.neskorsiu aktualizaciu nepotrebujem, respektive sa jej chcem vyhnut, co sa pouzitim POLI neda.Je dolezite premna aby atributy mali hodnoty podla mojho USS, nie podla globalneho.Tiez by bola fajn ta zavislost na meritku kotovacieho stylu.
Zkuste tohle: blok: uploads/20111023_214400_stanic-XY.dwgLISPuploads/20111023_214455_stanic-XY.LSPTo meritko podle kot to neumi. PS. Zkuste ten VisualLisp - pokud jste uz programoval, tak to hodne pomuze. Je to prijemne prostredi se syntaxi, debugerem, ... , proste vsim co pro vyvoj ve VisualLispu potrebujete.
Zapomnel jsem, ze pri uploadu na server CadForum se prejmenuji soubory.Takze jeste dodam, ze blok se musi jmenovat "stanic-XY" a utilita se spousti "stanic-XY"
Martin Bielina
23.10.2011, 22:09
Doplnění předchozího příspěvku - odpověď na otázku co je nutné změnit
změnit je nutné původní (řádek č.7):(setq y (cadr y))na nové(setq y (car y))
[QUOTE=Martin Bielina]Doplnění předchozího příspěvku - odpověď na otázku co je nutné změnit
změnit je nutné původní (řádek č.7):(setq y (cadr y))na nové(setq y (car y))[/QUOTE]skusil som to este upravit podla toho co pisete vyssie, ale nepomohlo...stale to iste chybove hlasenie aj tak vdaka.
[QUOTE=alfred]Zapomnel jsem, ze pri uploadu na server CadForum se prejmenuji soubory.Takze jeste dodam, ze blok se musi jmenovat "stanic-XY" a utilita se spousti "stanic-XY"
[/QUOTE]dakujem velmi pekne, vpodstate toto som chcel dosiahnut tazke mi to velmi pomoze.Akurat neviem preco ked dany blok vkladam tak sa mi vypnu vsetky uchopy ktore mam prednastavene a zakazdym si musim zvolit nanovo neaky, co je dost neprakticke a este koty X-ove by som chcel mat v absolutnej hodnote, tzn. 234.12/5.55 a nie 234.12/-5.55inak je to uz takmer dokonale dobra praca
[QUOTE=DodoSVK]Akurat neviem preco ked dany blok vkladam tak sa mi vypnu vsetky uchopy ktore mam prednastavene a zakazdym si musim zvolit nanovo neaky, co je dost neprakticke a este koty X-ove by som chcel mat v absolutnej hodnote, tzn. 234.12/5.55 a nie 234.12/-5.55inak je to uz takmer dokonale dobra praca [/QUOTE]Vypnuti uchopu byla chyba. Posilam opravu.uploads/20111023_230831_stanic-XY.LSPPokud potrebujete absolutni hodnotu x tak si za (setq x (nth 0 point))pridente radek: (setq x (abs x))Ale zda se mi to divne. Nevim co to ma delat, ale predpokladam, ze se jedna o staniceni a pokud jste v zaporne oblasti, tak to ma psat zaporna cisla, ne?
alfred2011-10-23 23:11:40
Dakujem za opravu.
No a ide o kotovanie jednoduchych priecnych rezov cesty - koty su vzhladom ku osi, to znamena ze ked mam nieco okotovane na lavo od osi, matematicky je spravne ak tam to minus je, ale z pohladu na rez je zrejme ze kotovany bod je na lavo od osi takze to minus tam netreba, lebo je to zrejme aj bez neho a doteraz som to kotoval tak, tak uz chcem zachovat rovnaky styl. Avsak ak by tam to minus ostalo, chyba by to nebola...
Dakujem velmi pekne za pomoc a ochotu.
Nevyrieslo by vsetky tvoje problemy pouzitie RoadCAD1 menu a prikaz vyska/vzdialenost - skratka "VKOTN", pred tym treba iba zadefinovat porovnavaciu rovinu prikazom "RBI"
praveze tejto funkcii som sa chcel vyhnut...jednak je tam problem s nastavenim fontu, niekedy blbnu uchopy, ciarky ktore sa kreslia v mieste bodu ktory chces vytycit sa niekedy nevykreslia korektne a hlavne aspon u mna to nechce fungovat pokial mam vykres v mierke 1:1 kresleny...ked to mam takto teraz je to omnoho flexibilnejsie a mozes si upravovat blok presne tak ako ti vyhovuje...takze to mozes nastavit lepsie pre svoje potreby....