Vytisknout stránku | Zavřít okno

hledání bloků ve výkrese

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=5907
Datum vytištění: 03.čvc.2026 v 23:22


Téma: hledání bloků ve výkrese
Odeslal: Ferdinand
Předmět: hledání bloků ve výkrese
Datum odeslání: 30.led.2008 v 21:40
Nějak se nemohu dostat s tím dál... Představa: Potřebuji zjistit, jestli ve výkresech existují nějaké bloky s konkrétním názvem, pokud ne, tak výkres se uloží zvlášť do jiného podadresáře.
Příklad:
1. otevřený výkres se jmenuje 111.dwg, měl by obsahovat bloky s názvem 111-B, 111-N, 111-P (anebo alespoň jednoho z nich)
Hledám bloky s názvem 111_C, 111_C-B, 111_C-N, 111_C-N (tj. porovnávám 111-B <-> 111_C-B, ...)
Pokud  ve výkrese 111 některý blok tohoto názvu (s indexem _C) najde (tj. shoduje se "kořen" názvů 111), končí a otevře další výkres s názvem 222.dwg...
Pokud ve výkrese 111 nenajde ani jeden z těch bloků (s indexem _C), tak 111.dwg se uloží do podadresáře <AktualniAdresar>\neshoda-bloky\111.dwg, končí a otevře další výkres s názvem 222.dwg...
 
(defun S::STARTUP ()
...
;;;;;podrutina pro ziskani odkladaciho podadresare
  (defun C:ADR (/ D1 D2 DWG A1 A2 A3)
    (setq D1 (getvar "cdate"))  ;20071213.15 /akt. datum/
    (setq D2 (rtos (fix D1) 2 0)) ;"20071213"
    (setq DWG (cadr (fnsplitl (getvar "dwgname")))) ;nazev akt.vykresu
    (setq A1 (getvar "dwgprefix")) ;<AktualniAdresar>
    (setq A2 (strcat A1 "neshoda-bloky" D2 "\\")) ;nazev podadresare
    (setq A3 (strcat A2 DWG))  ;nazev akt. vykresu s plnou cestou
    (command "shell" (strcat "mkdir" " " A2)) ;zalozi podadresar A2
    (princ)
  )
...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;zacatek procedury
    (C:ADR)    ;ziskani podadresare
    (setq
      DWG-B    (strcat DWG "-B")
      DWG-N    (strcat DWG "-N")
      DWG-P    (strcat DWG "-P")
      DWG_C    (strcat DWG "_C")
      DWG_C-B  (strcat DWG_C "-B")
      DWG_C-N  (strcat DWG_C "-N")
      DWG_C-P  (strcat DWG_C "-P")
    )
    (setq SS1 (list DWG DWG-B DWG-N DWG-P))
    (setq SS2 (list DWG_C DWG_C-B DWG_C-N DWG_C-P))
    (if (and (tblsearch "insert" SS1) (tblsearch "insert" SS2))
      nil
      (command "_saveas" "" A3)
    )
...
 
...a tady to nevím jestli to takhle funguje a jak by to mělo být dál ...
Lisp je pojmenován acad2004.lsp, je umístěn v <AktualnimAdresari>. Proces startuje buď kliknutím na 1. výkres anebo napsáním "acad" do přík. řádku, výkresy se otvírají jeden po druhém a vyhodnocují se...


-------------
-FerTh-



Odpovědi:
Odeslal: pavelstyl
Datum odeslání: 31.led.2008 v 07:11
A čeho chcete dosáhnout?
Aby se vždy při každém otevření výkresu prováděla ta kontrola a nebo to budete spouštět přes nějaký script generátor ručně (např. 1x týdně)?
 
Pavel Štyl


Odeslal: Ferdinand
Datum odeslání: 04.úno.2008 v 15:21
Jde o to sladit/sjednotit názvy bloků naší nadstavby (cca. 1200 výkresů bloků) tj. splnění podmínky, že každý výkres použitého bloku smí obsahovat jen dílčí bloky s výše popsanými příponami. Důvod je návaznost některých aplikací na názvy těchto dílčích bloků. Jednorázově bych to chtěl zkontrolovat - při odchodu z práce bych to spustil, ráno by byly výkresy s "neuniformními" bloky odděleně uloženy.

-------------
-FerTh-



Vytisknout stránku | Zavřít okno