ARKANCE - globální Platinum partner Autodesk ARKANCE | KONTAKT - CZ | SK | EN | DE
Registrujte se na 22. ročník konference CADfórum 2025 - 30.9. Zámek Valeč.
Přes 118.500 registrovaných u nás, celkem 1.096.000 registrovaných (CZ+EN), přes 53.000 CAD/BIM bloků. Vyzkoušejte nový přesný Inženýrský kalkulátor a aktualizovaný Generátor čarových kódů.
Registrujte se na konferenci CADfórum 2025 - automatizace navrhování
RSS kanál - CAD tipy RSS tipy
RSS diskuze

Diskuze Diskuzní fórum, poradna

?
CAD diskuze, rady, výměna zkušeností

CAD Fórum - Homepage Veřejné diskuzní fórum k CAD aplikacím - ptejte se na libovolné otázky týkající se oboru CAx, podělte se o vaše znalosti a zkušenosti s programy AutoCAD, Inventor, Revit, Fusion, 3ds Max, Vault a s dalšími CAD/BIM/PDM aplikacemi. Zaregistrujte se nebo se přihlašte a zašlete váš příspěvek do odpovídajícího fóra. Viz další informace o CAD Fóru. Nechcete se registrovat? Zeptejte se v naší Facebook poradně.
Fórum nenahrazuje technický support firmy ARKANCE (CAD Studio) - přímá podpora pro zákazníky funguje na helpdesk.arkance-systems.cz
  FAQ FAQ  Prohledat fórum   Události   Registrovat Registrovat  Přihlásit Přihlásit

Téma uzavřenopodíl vybraných čísel

 Odpovědět Odpovědět archiv
Autor
Kackac Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 11.úno.2006
Lokalita: ČR (Pha)
Používám:
AutoCAD
Stav: Offline
Bodů: 469
Přímý odkaz na tuto zprávu Téma: podíl vybraných čísel
    Zasláno: 25.srp.2007 v 23:23
Dobrý den,
napsala jsem si lisp, který vydělí dvě čísla, která coby text vyberu, a výsledkem přepíše třetí vybranou položku. Ale:

1) mám pocit, že jdu s kanónem na mravence, šlo by to nějak jednodušeji?
2) neumím
na (entsel) aplikovat filtr na výběr textu, umím to jen na (ssget) pomocí (ssget ":s" '((0 . "TEXT"))), ale to mi u (entsel) hází "chyba: příliš mnoho argumentů". Když vyberu něco jiného, funkce se zhroutí. Ale (ssget) zase nechci použít, protože u něj neumím použít zadání výzvy, jestli to vůbec jde, jiný uživatel než já nebude vědět, co má vybrat, když ho autocad vyzve svým obecným "vyberte objekty". Tedy jak filtrovat výběr pomocí (entsel)?
3) neumím ošetřit, aby mi funkce nespadla, když se s vybráním netrefím a kliknu do prázdna. Chtěla bych, aby mi program dával tak dlouho šanci, dokud se netrfím na text.
4) nevím, jak a kde použít "blipmode", aby mi vysvítil vybranou hodnotu. Takhle má člověk pocit, že nic nevybral, když to není vidět.

Pro programátora je to asi prkotina, ale já v tom pořád strašně tápu. Prosím poraďte...

Zdrojový kód:
;vypocte pomer dvou cisel pro efektivitu podlazi
(defun c:pomer_ploch ()
;citatel
  (setq cst (car (entsel "\nvyberte cistou plochu " ))) ;vybere jeden prvek
  (setq e1data (entget cst)) ;data prvku
  (setq e1sez (assoc 1 e1data)) ;podseznam - textova hodnota
  (setq cista (cdr e1sez)) ;hodnota textoveho retezce
  (setq ccista (atof cista)) ;prevede text na cislo
  (princ (strcat "\ncista plocha je: " cista))
;jmenovatel
  (setq zst (car (entsel "\nvyberte zastavenou plochu " ))) ;vybere jeden prvek
  (setq e2data (entget zst)) ;data prvku
  (setq e2sez (assoc 1 e2data)) ;podseznam - textova hodnota
  (setq zast (cdr e2sez)) ;hodnota textoveho retezce
  (setq czast (atof zast)) ;prevede text na cislo
  (princ (strcat "\nzastavena plocha je: " zast))
;vypocet podilu
  (setq pom (/ ccista czast)) ;vypocte pomer dvou cisel
  (setq pomer (rtos pom 2 2)) ;prevede cislo na text
  (princ (strcat "\nefektivita je: " pomer " %"))
;prepsani textu
  (setq ef (car (entsel "\nvyberte text s efektivitou k prepsani " ))) ;vybere jeden prvek
  (command "_change" ef "" "" "" "" "" "" pomer) ;kdyz to otaci text pridat "" (bude tam 6x "" )
  ;__misto posledniho radku s prikazem "_change" lze pouzit nasledujicich 5 radek
  ;(setq e3data (entget e3)) ;data prvniho prvku mnoziny
  ;(setq oldtxt (assoc 1 e3data)) ;podseznam - textova hodnota
  ;(setq ef (cons 1 pomer)) ;zkonstruovani noveho podseznamu klice 1
  ;(setq e3data (subst ef oldtxt e3data)) ;nahrazeni stareho podseznamu novym (natoceni 0)
  ;(entmod e3data) ;modifikace seznamu
)
Kackac
Zpět nahoru
chlebovsky Zobrazit panel
Zasloužilý člen
Zasloužilý člen
Avatar

Přihlášen: 18.čer.2007
Lokalita: ČR (JM)
Používám:
Autocad R9 - 2022
Stav: Offline
Bodů: 112
Přímý odkaz na tuto zprávu Zasláno: 26.srp.2007 v 21:41
u výběru můžete použít jak entsel s potřebnou hláškou kterou napíšete rovnou do příkazu (entsel "Hláška"), ale můžete tak vybrat cokoliv, pak je třeba napsat podmínku kdy kontrolujete parametr  0-nula v entget aby byl "TEXT", nebo "LINE" "CIRCLE".....
teď to dát do cyklu
(setq ent1 nil)
(while (or (not ent1)(and ent1 (/= (cdr (assoc 0 (entget (car ent1)))) "TEXT")))
(setq ent1 (entsel "\nVyber ....."))
)
ted máte zaručeno že máte vybraný text.
 
Pak je ještě ale druhý způsob pomocí Vašeho SSGET, jen je třeba před tento výběr na monitor vypsat hlášku o výběru čeho :
takže
(princ "\nZpráva")
(setq ent (ssget........))
to \n znamená na nový řádek
\r zase znamená na téže řádek....
to jestli máte zadanou hodnotu či né, je lehké ošetřit :
 
(setq ent (entsel......))
(if (not ent) ;;; když není ent
  (alert "Nebylo nic vybráno") ;;; dá hlášku
  (progn  ;;; tady pokračuje když je podmínka neplatná
     .....
     .....a tady může být další vložená podmínka
      (setq ent2 (entsel))
      (if (not ent2)
          (alert "Nebyla vybrána druhá entita")
          (progn
              ......
           )
      )
     .....
   )
)
 
to co jsem ale popisoval na začátku, ten malý lispek, tak ten nedovolí nevybrat, jedině když to zrušíte Escapem.
 
co se týče toho zvýraznění tak já používám :
(redraw ent 3)  zvýrazní
2 - vypne úplně viditelnost
1 - tu viditelnost vráti do viditelné podoby
3 - jakože vybere
4 - to vybrání zruší
 
a vložil bych to hned za cyklus while když už máte jasný výběr, ale pozor ent musí být jen jméno entity kód -1 takové to <Jméno entity: 7efc8dd8>
nikoliv celý seznam (entget ) takže (cdr (assoc -1 (entget (car entsel))))
 
Snad vše :-)
 
Zdravím
Ing. Martin Chlebovský

www.kde-je-auto.cz

GPS monitoring provozu vozidel a osob.

WebDeveloper.

Programátor aplikací pro Autocad a MS Office.

Tvorba WWW aplikací.

Modelování domů a staveb.&l
Zpět nahoru
Kackac Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 11.úno.2006
Lokalita: ČR (Pha)
Používám:
AutoCAD
Stav: Offline
Bodů: 469
Přímý odkaz na tuto zprávu Zasláno: 29.srp.2007 v 23:13
To je paráda, ono to funguje! Dokonce se mi povedlo i ošetření výběru čísla a ne slova, při slovech to padalo na dělení nulou. Sice mi těch pět řádků trvalo asi hodinu a půl, než to bylo funkční, ale teď se z toho raduju o to vícSmile
Původně odeslal(a) chlebovsky chlebovsky napsal(a):

(while (or (not ent1)(and ent1 (/= (cdr (assoc 0 (entget (car ent1)))) "TEXT")))

Tady mi to házelo chybu qůli tomu car, ale když jsem ho vyhodila a nechala tam jen (entget ent1), tak je to v pohodě. Akorát se nějak nemůžu vyznat ve významu AND, NOT a OR. Mám sice u ruky knížečku, kde je napsáno, co to dělá, ale když se snažím přeložit ten řádek v citaci, hrozně se do toho zamotám. Nemohl byste mi ještě, prosím, nějak jednoduše přechroustat tu sekvenci?
Kackac
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
ARKANCE

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Implementujeme řešení Autodesk
Stav: Offline
Bodů: 21950
Přímý odkaz na tuto zprávu Zasláno: 30.srp.2007 v 00:05
V "člověčině" je to:
Opakuj pokud je ent1 prázdná nebo pokud typ ent1 není TEXT
Vladimír Michl (moderátor)
ARKANCE CZ - arkance.world
(podpora viz helpdesk.arkance-systems.cz)
Zpět nahoru
chlebovsky Zobrazit panel
Zasloužilý člen
Zasloužilý člen
Avatar

Přihlášen: 18.čer.2007
Lokalita: ČR (JM)
Používám:
Autocad R9 - 2022
Stav: Offline
Bodů: 112
Přímý odkaz na tuto zprávu Zasláno: 30.srp.2007 v 08:32
Jo je to tak, ale ještě bych doplnil :
Opakuj (pokud je ent1 prázdná) nebo (pokud ent1 je vybrána a je různá od text)
 
a závorkově :
(nebo (ent1 je prázdná)(a (ent1 je vybrána)(ent1 není text)))
 
Tímto si ale nedovoluju opravovat předešlý mejlík... nechtěl bych učit orla létat
Big%20smile
Ing. Martin Chlebovský

www.kde-je-auto.cz

GPS monitoring provozu vozidel a osob.

WebDeveloper.

Programátor aplikací pro Autocad a MS Office.

Tvorba WWW aplikací.

Modelování domů a staveb.&l
Zpět nahoru
Kackac Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 11.úno.2006
Lokalita: ČR (Pha)
Používám:
AutoCAD
Stav: Offline
Bodů: 469
Přímý odkaz na tuto zprávu Zasláno: 28.zář.2007 v 23:26
Omlouvám se za odmlku, nějak nebyl čas...
Vysvětlení p. Chlebovského je to co jsem potřebovala; to co psal p. Michl jsem tak nějak celkově chápala, nešly mi samostatně ty závorky, knížka totiž o AND, OR, NOT pojednává způsobem, že popíše v kterých případech jaký příkaz vrátí TRUE a kdy NIL a to pro neprogramátora je naprostá španělština, takže mě vůbec nenapadlo to chápat doslova přeloženo jako spojky a s konvencí matematických operací:)
Tedy díky
Kackac
Zpět nahoru
Ferdinand Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (JM)
Používám:
AutoCAD2004 (EN) na Windows XP
Stav: Offline
Bodů: 1906
Přímý odkaz na tuto zprávu Zasláno: 09.říj.2007 v 14:31
Původně odeslal(a) Kackac Kackac napsal(a):

...když ho autocad vyzve svým obecným "vyberte objekty". ...
Lze použít vlastní výzvy Smile (pokud nastavíte cmdecho=0)
...a před výkonem funkce lze napsat (prompt "\nMojevýzva1...")
-FerTh-
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 8301:Jak vykázat plochu oken jako procentuální podíl plochy místnosti?
Tip 14444:Zadání hodnoty výrazem mi nefunguje, výraz zčervená.
Tip 6725:Jak upravit čísla příčných řezů.
Tip 11692:Problém uzlové editace na křivkách - posun.
Tip 4676:Rychlé určení bodu v aplikaci Civil 3D.
Tip 7172:Snadný převod bodů Civilu na bloky s atributy.


 Odpovědět Odpovědět

Přejít na fórum Oprávnění fóra Zobrazit panel



Stránka byla vygenerována za 0,555 sekund.