Diskuzní fórum, poradna
?CAD diskuze, rady, výměna zkušeností

|
Odpovědět ![]() |
archiv |
Autor | |
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() Zasláno: 25.led.2007 v 09:06 |
Potřebuji s tím pohnout:
... (setq LAY (getstring "\nZadejte hladiny, které budou ROZMRAŽENY /aktivní/ ve všech rozvrženích : " ) ) ;;pokud ve výkresu hladina jménem LAY není, tak proveď (command "_vplayer""_N" LAY "_F" LAY "_A" "") ;;pokud ve výkresu hladina jménem LAY už je, tak proveď (command "_vplayer" "_V" LAY "_T" "_T" LAY "_A" "") Jak se správně napíše tato podmínka? (if (not (8 . LAY))... je asi nesmysl, že... ![]() Upravil Ferdinand - 25.led.2007 v 09:08 |
|
-FerTh-
|
|
![]() |
|
Tomáš ![]() Diskutér ![]() Přihlášen: 12.říj.2005 Lokalita: Czech Republic Používám: AIS2008, AutoCAD2008 Stav: Offline Bodů: 71 |
![]() |
Já to řeším např. takhle:
Sub VytvorHlad() 'Vytvoří hladiny "PID_CHECK_START" a "PID_AUDIT" (pokud neexistují) Dim col As AcadAcCmColor Dim lrs As AcadLayers Dim lr As AcadLayer Set lrs = ThisDrawing.Layers Set col = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17") Call col.SetRGB(255, 0, 0) 'přidání hladiny "PID_CHECK_START" On Error Resume Next If IsEmpty(lrs.Item("PID_CHECK_START")) Then On Error GoTo 0 MsgBox "hladina PID_CHECK_START neexistuje a bude vytvořena" lrs.Add "PID_CHECK_START" Set lr = lrs.Item("PID_CHECK_START") lr.TrueColor = col lr.Lineweight = acLnWt050 lr.Lock = True End If Call col.SetRGB(0, 255, 0) 'přidání hladiny "PID_AUDIT" On Error Resume Next If IsEmpty(lrs.Item("PID_AUDIT")) Then On Error GoTo 0 MsgBox "hladina PID_AUDIT neexistuje a bude vytvořena" lrs.Add "PID_AUDIT" Set lr = lrs.Item("PID_AUDIT") lr.TrueColor = col lr.Lineweight = acLnWtByLwDefault lr.Lock = True End If 'MsgBox "KonecA" End Sub |
|
Konstruktér, projektant
Inventor 2008 SP2, AutoCAD 2008 SP2, XP Prof. SP2 ZPA Industry a.s. |
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
To není to pravé, já to chci do lispu, ne v makru (nebo - co to vůbec je?).
|
|
-FerTh-
|
|
![]() |
|
pavelstyl ![]() Zasloužilý člen ![]() Přihlášen: 06.říj.2004 Lokalita: Czech Republic Používám: AutoCAD Mech 2025, SolidEdgeE 2025 Stav: Offline Bodů: 229 |
![]() |
Co třeba takhle ...
(if (tblsearch "LAYER" "MOJE_HLADINA")
(progn
(alert "Hladina existuje")
)
(progn
(alert "Hladina neexistuje")
)
)
Pavel Štyl
)
|
|
![]() |
|
Vladimír Michl ![]() Profil člena
Odeslat soukromou zprávu
Najít příspěvky člena
Navštívit stránky člena
Přidat do seznamu známých
Moderátor ![]() ![]() ARKANCE Přihlášen: 09.zář.2004 Lokalita: ČR (JČ) Používám: Implementujeme řešení Autodesk Stav: Offline Bodů: 21951 |
![]() |
třeba
|
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
Děkuji, tento příkaz jsem neznal.
Ještě jedna věc: Když používám filtr pro výběr názvů hladin které obsahují shodný řetězec (např. HLA_OB1, HLA_OB2, ... HLA_OBn), tj. na výzvu (setq LAY (getstring "\nZadejte hladiny, které budou ROZMRAŽENY /aktivní/ ve všech rozvrženích : " ) ) bude zadáno HLA_OB* (anebo HLA_OB?), tak po vykonání příkazu(ů) _vplayer naskočí nadefinovaný (alert (strcat "Hladinu " "\n "" " LAY " "" " "\n jsem ve výkresu nenašel, byla nově vytvořena") ) což je na displeji Hladinu HLA_OB* (ev. HLA_OB?) jsem na výkresu nenašel, byla nově vytvořena ovšem název hladiny nemůže obsahovat znaky * ani ?, takže tyto hladiny vytvořeny defacto nebyly. Jak to lze ošetřit? Upravil Ferdinand - 25.led.2007 v 10:49 |
|
-FerTh-
|
|
![]() |
|
pavelstyl ![]() Zasloužilý člen ![]() Přihlášen: 06.říj.2004 Lokalita: Czech Republic Používám: AutoCAD Mech 2025, SolidEdgeE 2025 Stav: Offline Bodů: 229 |
![]() |
Na to bych 3el asi takto ...
(setq lay (getstring "\nHladina: "))
(setq hl (tblnext "LAYER" "T")) (while hl (setq jmeno (cdr (assoc 2 hl))) (if (wcmatch jmeno lay) (progn (prompt (strcat "\nZpracuj hladinu " jmeno)) ) ) (setq hl (tblnext "LAYER")) ) (princ) Pavel Štyl
|
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
Pavle, tak jsem to zkoušel:
"lay" - zadám z klávesnice např. HLA_OB* "hl" - vrací: ((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "CONTINUOUS")) "jmeno" - vrací: "0" (tj. zjistí název aktuální hladiny) Prompt "Zpracuj hladinu " se na p.ř. vůbec neobjevuje. Celá citovaná sekvence mi vrací nil. Původně jsem celý lisp měl takhle: ;;;############################################################### ;;; po zadání jména hladin(y), se ty(a)to hladiny(a) rozmrazí (=budou aktivní) ve všech rozvrženích výkresu (defun c:lay1 (/ LAY TM) (setq TM (getvar "tilemode")) (setvar "tilemode" 0) (setq LAY (getstring "\nZadejte hladiny, které budou ROZMRAŽENY /aktivní/ ve všech rozvrženích : " ) ) (if (tblobjname "layer" LAY) (command "_vplayer" "_V" LAY "_T" "_T" LAY "_A" "") (command "_vplayer" "_N" LAY "_T" LAY "_A" "") ) (alert (strcat "Hladinu " "\n "" " LAY " "" " "\n jsem ve výkresu nenašel, byla nově vytvořena") ) ;tady nechci aby mi to hlasilo nesmysly v pripade filtru (napr. HLA_OB*, HLA_OB?) (setvar "tilemode" TM) (princ) ) |
|
-FerTh-
|
|
![]() |
|
pavelstyl ![]() Zasloužilý člen ![]() Přihlášen: 06.říj.2004 Lokalita: Czech Republic Používám: AutoCAD Mech 2025, SolidEdgeE 2025 Stav: Offline Bodů: 229 |
![]() |
Chápu-li to dobře, tak mohou nastat dvě situace: 1. Zadám název hladiny (bez zástupných znaků). Pokud ta hladina existuje, provedu rozmražení, pokud neexistuje, tak ji vytvořím.
2. Zádám-li název hladiny se zástupnými znaky (*, ?), tak musím projít všechny hladiny ve výkrese a ta která vyhovuje, tak ji rozmrazím.
Pochopil-li jsem to dobře, tak bych to udělal takto:
Pavel Štyl
|
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
Jeto jaxi pomätený... Úvaha správná, ale nedělá mi to nic
![]() (if (tblobjname "layer" LAY) ... ![]() |
|
-FerTh-
|
|
![]() |
|
pavelstyl ![]() Zasloužilý člen ![]() Přihlášen: 06.říj.2004 Lokalita: Czech Republic Používám: AutoCAD Mech 2025, SolidEdgeE 2025 Stav: Offline Bodů: 229 |
![]() |
Tu funkci tblobjname jsem neradil já. Ani ji neznám. Na zjišťování existence hladiny vždy (10 let) používám formuli (if (tblsearch "LAYER" "hladina_1") ...
Zakomentářoval jsem výkonné příkazy (vplayer) a doplnil jsem nějaké alerty. Možná ještě zlobily velká/malá písmena u porovnávání názvů hladin, tak jsem to také upravil.
U mě níže uvedené funguje takto:
- mám výkres s hladinami: Hladina1, Hladina2, Hladina3
- Zavolám LAY, zadám Hladina1, našel ji
- Zavolám LAY, zadám Hladina5, nenašel ji, bude vytvářet
- Zavolám LAY, zadám H*, zahlásí zadání *, a vypíše zpracování Hladina1, Hladina2 a Hladina3
Pokus tohleto chování je OK, tak už zbývá pouze dodělat ten VPLAYER (ale tady nemohu sloužit, neb ten příkaz neznám, výkresový prostor totiž nepoužíváme)
Pavel Štyl
|
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
Fuřt nic
![]() ; error: too many arguments: (IF (TBLSEARCH "LAYER" LAY) (PROGN ( ... )) (ALERT ( ... )) ... ) Upravil Ferdinand - 29.led.2007 v 16:10 |
|
-FerTh-
|
|
![]() |
|
pavelstyl ![]() Zasloužilý člen ![]() Přihlášen: 06.říj.2004 Lokalita: Czech Republic Používám: AutoCAD Mech 2025, SolidEdgeE 2025 Stav: Offline Bodů: 229 |
![]() |
Jedna závorka se ztratila, snad už je to OK.
;;;###############################################################
;;; po zadání jména hladin(y), se ty(a)to hladiny(a) rozmrazí (=budou aktivní) ve všech rozvrženích výkresu (defun c:lay1 (/ LAY TM jmeno hl) (setq TM (getvar "tilemode")) (setvar "tilemode" 0) (if (or (vl-string-search "*" lay) (vl-string-search "?" lay)) (progn ;V nazvu hladiny je zastupny znak (alert "Zadana * nebo ?, tudiz prochazim existujici hladiny ...") ) ;progn
(progn ;;; Nazev hladiny je zadan bez zastupnych znaku ) ; progn
(setvar "tilemode" TM)
|
|
![]() |
Pro technickou podporu CAD
kontaktujte Helpdesk
Odpovědět ![]() |
|
Přejít na fórum | Oprávnění fóra ![]() Nemůžete vytvářet nová témata v tomto fóru Nemůžete odpovídat na témata v tomto fóru Nemůžete vymazávat vaše příspěvky v tomto fóru Nemůžete upravovat vaše příspěvky v tomto fóru Nemůžete vytvářet ankety v tomto fóru Nemůžete hlasovat v anketách v tomto fóru |
Stránka byla vygenerována za 0,593 sekund.