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 119.000 registrovaných u nás, celkem 1.097.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ů.
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řenopodmínka jména

 Odpovědět Odpovědět archiv
Autor
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 Téma: podmínka jména
    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...Embarrassed


Upravil Ferdinand - 25.led.2007 v 09:08
-FerTh-
Zpět nahoru
Tomáš Zobrazit panel
Diskutér
Diskutér

Přihlášen: 12.říj.2005
Lokalita: Czech Republic
Používám:
AIS2008, AutoCAD2008
Stav: Offline
Bodů: 71
Přímý odkaz na tuto zprávu Zasláno: 25.led.2007 v 09:23
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.
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: 25.led.2007 v 09:52
To není to pravé, já to chci do lispu, ne v makru (nebo - co to vůbec je?).
-FerTh-
Zpět nahoru
pavelstyl Zobrazit panel
Zasloužilý člen
Zasloužilý člen

Přihlášen: 06.říj.2004
Lokalita: Czech Republic
Používám:
AutoCAD Mech 2025, SolidEdgeE 2025
Stav: Offline
Bodů: 229
Přímý odkaz na tuto zprávu Zasláno: 25.led.2007 v 10:05
Co třeba takhle ...
 
(if (tblsearch "LAYER" "MOJE_HLADINA")
 (progn
  (alert "Hladina existuje")
 )
 (progn
  (alert "Hladina neexistuje")
 )
)
 
Pavel Štyl
)
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ů: 21951
Přímý odkaz na tuto zprávu Zasláno: 25.led.2007 v 10:06
třeba

(if (tblobjname "layer" LAY)
 (command .....); je tam
 (command .....); není tam
)
Vladimír Michl (moderátor)
ARKANCE CZ - arkance.world
(podpora viz helpdesk.arkance-systems.cz)
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: 25.led.2007 v 10:46
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-
Zpět nahoru
pavelstyl Zobrazit panel
Zasloužilý člen
Zasloužilý člen

Přihlášen: 06.říj.2004
Lokalita: Czech Republic
Používám:
AutoCAD Mech 2025, SolidEdgeE 2025
Stav: Offline
Bodů: 229
Přímý odkaz na tuto zprávu Zasláno: 25.led.2007 v 10:58
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
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: 26.led.2007 v 15:36
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-
Zpět nahoru
pavelstyl Zobrazit panel
Zasloužilý člen
Zasloužilý člen

Přihlášen: 06.říj.2004
Lokalita: Czech Republic
Používám:
AutoCAD Mech 2025, SolidEdgeE 2025
Stav: Offline
Bodů: 229
Přímý odkaz na tuto zprávu Zasláno: 29.led.2007 v 12:34

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:

;;;###############################################################
;;; 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)
  (setq    LAY
     (getstring
       "\nZadejte hladiny, které budou ROZMRAŽENY /aktivní/ ve všech rozvrženích : "
     )
  )
  (if (or (vl-string-search "*" lay) (vl-string-search "?" lay))
   (progn ;V nazvu hladiny je zastupny znak
    (setq hl (tblnext "LAYER" "T"))
    (while hl
     (setq jmeno (cdr (assoc 2 hl)))
     (if (wcmatch jmeno lay)
      (progn
       (command "_vplayer" "_V" jmeno "_T" "_T" jmeno "_A" "")
       (prompt (strcat "\nZpracovavam hladinu " jmeno))
      )
     ) ; if
     (setq hl (tblnext "LAYER"))
    ) ; while
   ) ;progn
 
   (progn ;;; Nazev hladiny je zadan bez zastupnych znaku
    (if (tblsearch "LAYER" LAY)
     (progn
      (command "_vplayer" "_V" LAY "_T" "_T" LAY "_A" "")
     )
     (progn
      (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?)
     ) ; progn
    ) ; if
   ) ; progn

  ) ; if
  (setvar "tilemode" TM)
  (princ)
)
 
Pavel Štyl
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: 29.led.2007 v 15:21
Jeto jaxi pomätený... Úvaha správná, ale nedělá mi to nic Shocked. Není třeba tam (kde?) použít onu funkci
(if (tblobjname "layer" LAY)
...
Question
-FerTh-
Zpět nahoru
pavelstyl Zobrazit panel
Zasloužilý člen
Zasloužilý člen

Přihlášen: 06.říj.2004
Lokalita: Czech Republic
Používám:
AutoCAD Mech 2025, SolidEdgeE 2025
Stav: Offline
Bodů: 229
Přímý odkaz na tuto zprávu Zasláno: 29.led.2007 v 15:51
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
 

;;;###############################################################
;;; 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)
  (setq    LAY
     (getstring
       "\nZadejte hladiny, které budou ROZMRAŽENY /aktivní/ ve všech rozvrženích : "
     )
  )
  (if (or (vl-string-search "*" lay) (vl-string-search "?" lay))
   (progn ;V nazvu hladiny je zastupny znak
    (alert "Zadana * nebo ?, tudiz prochazim existujici hladiny ...")
    (setq hl (tblnext "LAYER" "T"))
    (while hl
     (setq jmeno (cdr (assoc 2 hl)))
     (if (wcmatch (strcase jmeno) (strcase lay))
      (progn
;       (command "_vplayer" "_V" jmeno "_T" "_T" jmeno "_A" "")
       (alert (strcat "Zpracovavam hladinu " jmeno))
      )
     ) ; if
     (setq hl (tblnext "LAYER"))
    ) ; while
   ) ;progn
 
   (progn ;;; Nazev hladiny je zadan bez zastupnych znaku
    (if (tblsearch "LAYER" LAY)
     (progn
;      (command "_vplayer" "_V" LAY "_T" "_T" LAY "_A" "")     )
      (alert (strcat "Hladina " LAY " existuje, pouze ji zmodifikuji ... "))
     (progn
;      (command "_vplayer" "_N" LAY "_T" LAY "_A" "")
      (alert (strcat "Hladinu " "\n ""  " LAY "  "" " "\n jsem ve výkresu nenašel, byla nově vytvořena"))
     ) ; progn
    ) ; if
   ) ; progn

  ) ; if
  (setvar "tilemode" TM)
  (princ)
)
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: 29.led.2007 v 16:09
Fuřt nic Ouch Díval jsem se na to v lisp editoru, kde mi hlásí

; error: too many arguments: (IF (TBLSEARCH "LAYER" LAY) (PROGN ( ... )) (ALERT ( ... )) ... )




Upravil Ferdinand - 29.led.2007 v 16:10
-FerTh-
Zpět nahoru
pavelstyl Zobrazit panel
Zasloužilý člen
Zasloužilý člen

Přihlášen: 06.říj.2004
Lokalita: Czech Republic
Používám:
AutoCAD Mech 2025, SolidEdgeE 2025
Stav: Offline
Bodů: 229
Přímý odkaz na tuto zprávu Zasláno: 29.led.2007 v 16:16
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)
  (setq    LAY
     (getstring
       "\nZadejte hladiny, které budou ROZMRAŽENY /aktivní/ ve všech rozvrženích : "
     )
  )

  (if (or (vl-string-search "*" lay) (vl-string-search "?" lay))

   (progn ;V nazvu hladiny je zastupny znak

    (alert "Zadana * nebo ?, tudiz prochazim existujici hladiny ...")
    (setq hl (tblnext "LAYER" "T"))
    (while hl
     (setq jmeno (cdr (assoc 2 hl)))
     (if (wcmatch (strcase jmeno) (strcase lay))
      (progn
;       (command "_vplayer" "_V" jmeno "_T" "_T" jmeno "_A" "")
       (alert (strcat "Zpracovavam hladinu " jmeno))
      )
     ) ; if
     (setq hl (tblnext "LAYER"))
    ) ; while

   ) ;progn

 

   (progn ;;; Nazev hladiny je zadan bez zastupnych znaku
    (if (tblsearch "LAYER" LAY)
     (progn
;      (command "_vplayer" "_V" LAY "_T" "_T" LAY "_A" "")     )
      (alert (strcat "Hladina " LAY " existuje, pouze ji zmodifikuji ... "))
     )
     (progn
;      (command "_vplayer" "_N" LAY "_T" LAY "_A" "")
      (alert (strcat "Hladinu " "\n ""  " LAY "  "" " "\n jsem ve výkresu nenašel, byla nově vytvořena"))
     ) ; progn
    ) ; if

   ) ; progn


  ) ; if

  (setvar "tilemode" TM)
  (princ)
)

 

Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 8994:Jak ve Vaultu vyhledat všechny (popř. "jen mnou") vydané soubory?
Tip 13877:Nefunguje nám spolupráce na jednom projektu při otevření ze dvou různých Revitů.
Tip 11980:Jak pomocí iLogic kódu vyplnit do iVlastností jméno uživatele?
Tip 6415:Jak rychle najít součást v rozsáhlé sestavě?
Tip 9056:V jakém pořadí se uplatní počáteční podmínky v Simulation CFD?
Tip 10333:Licence pro domácí použití (Home Use) u CAD pronájmů.


 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,346 sekund.