Zobrazit plnou verzi příspěvku: Nahradenie textu v kóte

michaelflyer
19.06.2008, 12:56
Dobrý deň.

Chcel by som poradiť ohľadom nahradenia niečoho za niečo iné...
Chcem nahradiť text z jednej kóty za druhý z druhej kóty. Chýba mi len ten príkaz....

(defun c:VY ()
(prompt "\nVyber kotu:")
(setq ent1 (ssget))
(prompt "\nVyber kotu NA ZMENU:")
(setq ent2 (ssget))

(setq entita1 (ssname ent1 0))
(setq entita2 (ssname ent2 1))

(setq zoznam_ent (entget entita1))
(setq a (cdr (assoc 42 zoznam_ent)))


(setq     ent2 ?????
               (cons 1 a)
      )
)


Vopred ďakujem.

Ferdinand
19.06.2008, 13:32
K čemu je to dobré? Vy snad nekreslíte v měřítku 1:1 ?  Přepisovat skutečné kóty silně nedoporučuji! Ferdinand2008-06-19 13:33:06

michaelflyer
19.06.2008, 13:37
Keď niečo odrežem a skrátim tak, aby sa mi to vošlo na výkres, treba zakótovať skutočnú dĺžku

Rostislav Říha
19.06.2008, 13:52
[QUOTE=Ferdinand]K čemu je to dobré? Vy snad nekreslíte v měřítku 1:1 ?  Přepisovat skutečné kóty silně nedoporučuji! [/QUOTE] my třeba kreslíme v měřítku 1:1 a přesto - co si budem nalhávat - je občas třeba kótu upravit. Od kohosi máme lisp, který umí všechny kóty, které jsou přepsané, buď barevně zvýraznit, nebo hodit do extra hladiny, nebo jejich text podtrhnout. takže přepisujeme úplně klidně, protože máme prostředek, jak to po sobě pak zkontrolovat....

Rostislav Říha
19.06.2008, 13:55
[QUOTE=michaelflyer]Keď niečo odrežem a skrátim tak, aby sa mi to vošlo na výkres, treba zakótovať skutočnú dĺžku [/QUOTE] pokial mate na mysli to, ze trebars dlhy tram zobrazite s tou vlnovkou v strede, akoze je skrateny, a pomedzi vlnovkami sa neodohrava nic zaujimave, tak odporucam nerobit to "natvrdo" skratenim prvku, ale skor vykreslit prvok cely, zakotovat realisticky a vo vykresovom priestore spravit zodva vyrezy vedla seba, troska ich odsadit a tie vlnovky spravit tam.
 
PS: jak se ty "vlnovky" jmenují odborně?

michaelflyer
19.06.2008, 14:11
Keby to bol len jeden dielec, tak by to šlo. Ale je toho veľa. Potrebujem to vytlačiť aj tak M 1:1 a hlavne aby sa toho zmestilo na výkres čo najviac. A tá skutočná dĺžka bude len v kusovníku (ten dielec už niekde nemám vykreslený, lebo to nepotrebujem. Ide len o detail koncov, ako ich treba urobiť).

PS: Myslíte polyline, alebo (toto skôr) spline

pavelstyl
19.06.2008, 14:14
Zkuste toto:
 
[CODE]
(defun c:VY (/ ent1 ent2 entita1 entita2 text1)  (prompt "\nVyber kotu:")  (setq ent1 (ssget))  (prompt "\nVyber kotu NA ZMENU:")  (setq ent2 (ssget))   (setq entita1 (ssname ent1 0))  (setq entita2 (ssname ent2 0))   (setq zoznam_ent1 (entget entita1))  (setq zoznam_ent2 (entget entita2))   (setq text1 (cdr (assoc 1 zoznam_ent1))) (setq zoznam_ent2 (subst (cons 1 text1) (assoc 1 zoznam_ent2) zoznam_ent2))
 (entmod zoznam_ent2) (command "_regen") (princ) ) [/CODE]
 
Pavel Štyl
 

michaelflyer
19.06.2008, 14:40
Takto to nefunguje

Možno to asi nechápem, ale nie je mi jasné prečo to chcete vtlačiť do zoznamu entity. Ono to podľa mňa musí prepísať a nie pridať ďalší "list" riadok. Možno preto nechce urobiť to čo chcem...

Ale ďakujem za pomoc.

vbehun
19.06.2008, 14:56





"Vlnovky" jako čára přerušení řezu nebo obrazu?   U rotačních rotačních částí se ještě kreslí taková jako osmička s jedním šrafovaným a jedním polovičním bříškem (dvě symetricky zrcadlené proti sobě).Jinak vlnovka v textu je "tilda" . Čára přerušení se dá rovněž nakreslit jako složená čára s textovým znakem "tilda/vlnovka".[QUOTE=Rostislav Říha]PS: jak se ty "vlnovky" jmenují odborně?[/QUOTE]vbehun2008-06-19 19:21:22

cestár
19.06.2008, 15:38
[/QUOTE] PS: jak se ty "vlnovky" jmenují odborně?[/QUOTE]
Nie je reč o breakline? (po česky/slovensky to neviem)

Rostislav Říha
19.06.2008, 15:52
je. dik.
takze: jaky je cesky preklad slova "breakline"?:)

Mrázek
19.06.2008, 16:00
Jak už použil pan Běhunčík - čára přerušení. Při ručním kreslení se používalo leccos (nejčastěji čára od ruky, u hřídelů zmíněná vlnovka apod.), při konstruování na počítači se asi nejvíce ujala "cik-cak" čára. I když občs někdo použije spline apod.

michaelflyer
19.06.2008, 19:44
Vie mi ešte niekto poradiť, s mojím problémom???

michaelflyer
20.06.2008, 08:00
Konečne som prišiel na to prečo to nefunguje!!!
Tuto bola drobná chyba:

(setq text1 (cdr (assoc 42 zoznam_ent1)))

a tu je pes zakopaný:

(cons 1 text1)

ten text1 treba dať do úvodzoviek. Napíše to takto (1 . 1030), ale keď text1 dám do úvodzoviek tak mi napíše (1 . "text1") Ako by sa dali doplniť tie úvodzovky??? Potrebujem dostať tvar (1 . "1030").
"pavelstyl": Ospravedlňujem sa vám za môj skepticizmus!

Vopred ďakujme.

Vladimír Michl
20.06.2008, 09:14
nevím sice přesně důvod, ale uvozovky k TEXTu přidáte např. pomocí:
[CODE](strcat (chr 34) TEXT (chr 34))[/CODE]

Sedláček
20.06.2008, 09:32
Nejde spíše o převod z čísla na text? Pak funkce ITOA nebo RTOS.

michaelflyer
20.06.2008, 10:38
Ďakujem všetkým za pomoc.

Vyriešil som to. Mali ste pravdu, treba to premeniť na text :)
Tak, definitívne ak by to niekto chcel použiť:

(defun c:VY (/ ent1 ent2 entita1 entita2 text1)
(prompt "\nVyber kotu:")
(setq ent1 (ssget))
(prompt "\nVyber kotu NA ZMENU:")
(setq ent2 (ssget))

(setq entita1 (ssname ent1 0))
(setq entita2 (ssname ent2 0))

(setq zoznam_ent1 (entget entita1))
(setq zoznam_ent2 (entget entita2))

(setq text1 (rtos (cdr (assoc 42 zoznam_ent1))))
(setq zoznam_ent2 (subst (cons 1 text1) (assoc 1 zoznam_ent2) zoznam_ent2))

(entmod zoznam_ent2)
(command "_regen")
(princ)
)

michaelflyer
20.06.2008, 11:37
Ešte by som sa chcel opýtať, ako by som dosiahol, aby bolo číslo iba s jedným desatinným miestom. Zaokrúhľovať to nemusí. Ale ak aj to niekto viete tak, som samé ucho, teda oko michaelflyer2008-06-20 11:39:05

pavelstyl
20.06.2008, 12:01
Pokud si vzpominam, na počet desetinných míst má vliv proměnná LUPREC.
Zkusil bych před ten řádek s funkcí rtos přidat (setvar "LUPREC" 1) a za tím rtos zase vrátit na původní hodnotu.
 
Jinak k programu jedna připomínka.
Je tam použita funkce ssget, která umožní vybrat jednu i více entit. Program ale zpracuje pouze první vybranou. Buď bych místo ssget použil entsel nebo bych program upravil tak, aby opravil všechny entity ve výběru. Takhle je to trošku matoucí.
 
Pavel Štyl
 

Ferdinand
20.06.2008, 12:08
Nastavit jednotky na 1 desetinné místo - příkazem _units, myslím že to řídí proměnná luprec.

Ferdinand
20.06.2008, 12:26
Na čáru přerušení je příkaz breakline v Expresech.
Osobně ze zásady nikdy nepoužívám "nereálné" anebo upravované kóty.
To Říha: Vy to sice budete vědět, ale jakmile takový výkres dwg předáte dál (myslím externě) jako podklad k dalšímu zpracování, dotyčný tam bude sice vidět "různobarevné" kóty, ovšem asi ho bude zlobit, když si odměří vzdálenosti na výkresu a ty nebudou v korespondenci s kótama...Pak nastává (zbytečně) zdlooouhavý proces prověřování všech kót výkresu hezky jednu po druhé - poněvadž on už ten dotyčný nástroj nemá/nezná...Anebo (což je velmi pravděpodobný) má pouze LTčko a všechny "bleskurychlé" pomocníci z rodiny Lispů jsou mu k ničemu.Ferdinand2008-06-20 12:28:10

michaelflyer
20.06.2008, 14:26
Ďakujem za radu.
Čo sa týka toho ssget, tak sa mi na ňom páči to, že my vybraný objekt zvýrazní. Tak viem, že som ho vybral. Ale u entsel neviem, či som objekt trafil a zároveň vybral, alebo nie.

Sedláček
20.06.2008, 14:41
Počet desetinných míst je jedním z parametrů funkce RTOS, takže asi (nezkoušel jsem)
(setq text1 (rtos (cdr (assoc 42 zoznam_ent1))2 1))

michaelflyer
20.06.2008, 15:02
Mne sa to zdalo, že to nejaká ta funkcia má, len som si nebol istý a bál som sa, že budem písať blbosti!michaelflyer2008-06-20 15:03:01

Sedláček
20.06.2008, 15:17
Ještě jste psal o zaokrouhlování, na to je jednoduchá finta, před použitím funkce RTOS přípočtěte k číslu 0,05 (pokud zaokrouhlujete na jedno desetinné číslo) a druhé desetinné číslo "odříznete"

michaelflyer
22.06.2008, 08:47
Ak som to pochopil správne tak táto funkcia sa stará aj o to zaokrúhľovanie:
(setvar "LUPREC" 1)
Hádam som to pochopil správne od kolegov (tu na fóre).

michaelflyer
22.06.2008, 10:32
Tu som to upravil tak, aby užívateľ mohol vybrať viac kót na zmenu podľa prvého výberu. Len neviem, či by nebolo lepšie to naprogramovať tak, aby užívateľ vybral prvú kótu ako smerodajnú a ostatné k tomu. Všetko by bolo obsiahnuté iba v jednom výbere ssget (ent1).

(defun c:VY (/)
(prompt "\nVyber kotu:")
(setq ent1 (ssget))
(prompt "\nVyber koty NA ZMENU:")
(setq ent2 (ssget))

(setq entita1 (ssname ent1 0))
(setq entita2 (ssname ent2 0))
(setq cislo_posled_entity2 (sslength ent2))
(setq meno_posled_entity2 (ssname ent2 (1- cislo_posled_entity2)))

(setq zoznam_ent1 (entget entita1))
(setq n 0)

(while (<= n (1- cislo_posled_entity2))

    (setq entita2 (ssname ent2 n))
    (setq zoznam_ent2 (entget entita2))

    (setq text1 (setvar "LUPREC" 1)
          text1 (rtos (cdr (assoc 42 zoznam_ent1))))
    (setq zoznam_ent2 (subst (cons 1 text1) (assoc 1 zoznam_ent2) zoznam_ent2))
    (entmod zoznam_ent2)

    (setq n (1+ n))
    (princ n)
)
(princ)
)

michaelflyer
01.07.2008, 13:13
Chcel by som vylepšiť to prepisovanie kót takto:
Vyberiem smerodajnú (prvú) kótu a zvýrazni mi ju, zmení sa kurzor myši a vyberám ostane kóty (kóty na zmenu). Chcem to spraviť na spôsob ako je príkaz: '_matchprop
Dá sa to???? Alebo vedel by mi niekto pomôcť???