Diskuzní fórum a databáze tipů a utilit pro AutoCAD, Inventor a další produkty Autodesk - od firmy CAD Studio [www.cadforum.cz]
Česky Slovensky English Deutsch
Přihlášení:
 právě čte: 1392 
RSS tipy RSS kanál - CAD tipy
RSS diskuze RSS kanál - CAD diskuze

Diskuze Diskuzní fórum

NápovědaCAD diskuze

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 a dalšími CAD 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.
Fórum nenahrazuje technický support firmy CAD Studio - přímá podpora pro zákazníky funguje na helpdesk.cadstudio.cz
  FAQ FAQ  Prohledat fórum   Události   Registrovat Registrovat  Přihlásit Přihlásit

Téma uzavřenoBATCH

 Odpovědět Odpovědět
Autor
splonk Zobrazit panel
TOP uživatel
TOP uživatel


Přihlášen: 25.lis.2006
Lokalita: ČR (Pha)
Používám: ACA 2010
Stav: Offline
Bodů: 269
Přímý odkaz na tuto zprávu Téma: BATCH
    Zasláno: 25.led.2012 v 16:43
Dobry den pane Michl,
mohl byste se mi, prosim podivat na tento LISPik. Jedna se o Batch ktery po oznaceni "rootove" slozky otevira vsechny *.dwg soubory v ni. Pri otevirani provede prikazy ktere ma nadefinovane v Apploads.
Mam problem v tom ze mi nefunguje na Win7x64 :(. Na XPx86 SP3 to bezi bezproblemu.
 
Jedna se o nasledujici:
 



(defun c:batch (/ dir files total ct docs doc)
(defun listAllFiles (path ext /)
(apply 'append
(cons
(mapcar
(function (lambda(x) (strcat path "\\" x)))
(vl-directory-files path ext 1)
)
(mapcar
(function (lambda(x) (listAllFiles (strcat path "\\" x) ext)))
(cddr (vl-directory-files path nil -1)) ; to exclude "." and ".."
)
)
)
)
(if (and
(setq dir (getfiled "Select a directory to process..." "Start here" "" 33))
(setq dir (vl-filename-directory dir))
)
(if (setq files (listAllFiles dir "*.dwg"))
(progn
(vl-load-com)
(setq total (itoa (length files))
ct 0
docs (vla-get-documents (vlax-get-acad-object))
)
(foreach file files
(setq doc (vla-open docs file)
ct (1+ ct)
)
(prompt (strcat "\r" (itoa ct) " of " total " drawings processed."))
(command "_.delay" "1000")
(vla-close doc :vlax-false)
)
(vlax-release-object doc)
(vlax-release-object docs)
)
(prompt (strcat "\nNo files of that type found in " dir " !"))
)
(prompt "\nNo path specified!")
)
(princ)
)
;;Add the .lsp file you're going to use to process the drawings to the startup suite (command: APPLOAD or Tools>Load Application). This .lsp file should end with (command "qsave") to save the drawing. DO NOT have (command "close") anywhere in the file, as this will cause an access violation and crash AutoCAD, because AutoCAD sucks.
 
 
Predem dekuji
JASponza
 
JASponza

ACA 2010 SP2, AutoCAD 2010

WinXP x86, Win7 x64
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
CAD Studio - Autorizovaný dealer Autodesk
CAD Studio a.s.

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám: Dodáváme produkty Autodesk
Stav: Offline
Bodů: 10859
Přímý odkaz na tuto zprávu Zasláno: 25.led.2012 v 17:06
Na první pohled tam nic systémově závislého nevidím. Máte v obou případech nastavené stejně SDI a hlavně adresáře a seznam pro načítání sady APLČTI?
Vladimír Michl (moderátor)
CAD Studio a.s. - www.cadstudio.cz
(podporu najdete na helpdesk.cadstudio.cz)
Zpět nahoru
splonk Zobrazit panel
TOP uživatel
TOP uživatel


Přihlášen: 25.lis.2006
Lokalita: ČR (Pha)
Používám: ACA 2010
Stav: Offline
Bodů: 269
Přímý odkaz na tuto zprávu Zasláno: 25.led.2012 v 17:47
SDI mam na obou 0 (nula)
Adresare mam stejne.
Problem je na zacatku, zkusim popsat:
  • v APPLOAD nastavim lisy ktere chci aby se vykonali
  • do PRAZDNEHO vykresu naloaduju vyse zmineny lisp
  • zadam prikaz BATCH
  • vyskoci okenko (Windowsacke) kde browsuju na danou slozku :

  • Připojené náhledyPřihlaste se pro zobrazení plné verze - 20120125_174432_2012-01-25_1724.png

  • slozku vyberu, a kliknu na Otevrit
  • Okenko se zmeni na:

  • Připojené náhledyPřihlaste se pro zobrazení plné verze - 20120125_174549_2012-01-25_1719.png

  • Pak kliknu na Ulozit, a nic se nedeje :(, okenko tam porad vysi a nejde s tim nic delat...

Pritom, na XP se proces normalne spusti a toto prazdne DWGcko zacne postupne "otevirat" vsechny DWG soubory v one slozce.

Myslim si tedy, ze problem bude nekde v one smycce pri vybirani slozek... Ja tomu zase tak moc nerozumim :).
 
Dekuji :)
PS. Omluva za drobny dodatecny edit tohoto prispevku...
JASponza

ACA 2010 SP2, AutoCAD 2010

WinXP x86, Win7 x64
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
CAD Studio - Autorizovaný dealer Autodesk
CAD Studio a.s.

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám: Dodáváme produkty Autodesk
Stav: Offline
Bodů: 10859
Přímý odkaz na tuto zprávu Zasláno: 25.led.2012 v 22:39
Aha, ten (getfiled) je nějaký divný, zkuste tam:
 
(setq dir (getfiled "Select a directory to process..." "Start here" "dwg" 8))
Vladimír Michl (moderátor)
CAD Studio a.s. - www.cadstudio.cz
(podporu najdete na helpdesk.cadstudio.cz)
Zpět nahoru
Seiner Zobrazit panel
TOP uživatel
TOP uživatel


Přihlášen: 01.říj.2004
Lokalita: ČR (PA)
Používám: Mechanical 2013, Inventor 2013 a starší
Stav: Offline
Bodů: 1468
Přímý odkaz na tuto zprávu Zasláno: 26.led.2012 v 07:40
Jak se na to tak dívám, jedná se zřejmě o nedorozumnění. Dialog sice říká "Vyber složku pro začátek", ale ve skutečnosti chce vybrat jeden soubor dwg ze složky a z toho si pak určí cestu do složky. Asi je to tím, že autor nevěděl, jak se dotázat přímo na složku. (Já to nevím momentálně taky).
 
BTW. Je to sice excelentní ukázka programování ve vLispu a jsem rád, že už vím, že to jde. Ale stejně zůstanu asi u generátoru dávky (http://www2.chrudim.cz/seiner/programy/Davka.zip) - přijde mi, že mi dává víc možností.
Vítězslav Seiner
Chrudim
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 2009 a 2011, Inventor, SE 22 a NX 7,5
Stav: Offline
Bodů: 153
Přímý odkaz na tuto zprávu Zasláno: 26.led.2012 v 08:01
Já pro nalistování složky používám následující kód:
(defun get_folder (d txt / Dir Item Path l)
 (if (> (strlen d) 4)
  (progn
   (setq l (substr d (strlen d) 1))
   (if (or (= l "\\") (= l "/"))
    (setq d (substr d 2))
   )
  )
 )
 (cond
  ((setq Dir (vlax-invoke (vlax-get-or-create-object "Shell.Application") 'browseforfolder 0 txt 1 d))
   (cond
    ((not (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke-method (list Dir 'Items))))
     (setq Item (vlax-invoke-method (vlax-invoke-method Dir 'Items) 'Item))
     (setq Path (vla-get-path Item))
    )
   );end cond
  )
 );end cond
 (if Dir (vlax-release-object Dir))
 (if Path (setq Path (vl-string-translate "/" "\\" Path)))
 (if Path (setq DwgPath Path))
 (if path (if (= (substr path (strlen path) 1) "\\") (setq path (substr path 1 (- (strlen path) 1)))))
 path
)
 
Volám to
(setq adresar (get_folder "" "Zadej adresar")) 
Ten první parametr měl být pokus o zadání výchozí cesty, ale nějak to nefunguje a tak tam jsou ty prázdné úvozovky :-)
 
Třeba to někomu pomůže.
 
Pavel Štyl
Zpět nahoru
Seiner Zobrazit panel
TOP uživatel
TOP uživatel


Přihlášen: 01.říj.2004
Lokalita: ČR (PA)
Používám: Mechanical 2013, Inventor 2013 a starší
Stav: Offline
Bodů: 1468
Přímý odkaz na tuto zprávu Zasláno: 26.led.2012 v 08:11

Ještě: domnívám se, pane Michle, že flag 8 není úplně to pravé. Pokud by byla z nějakého důvodu nastavena cesta do pracovního adresáře, přiřadí se do proměnné dir pouze jméno vybraného souboru bez cesty a následující příkaz neurčí správně složku.

Flag 33 mi taky není úplně jasný - vysvětluji si to, že to chce název nového souboru, ale neupozorňuje na přepsání.

Upravil Seiner - 26.led.2012 v 08:15
Vítězslav Seiner
Chrudim
Zpět nahoru
alfred Zobrazit panel
TOP uživatel
TOP uživatel


Přihlášen: 14.říj.2004
Lokalita: ČR (JČ)
Používám: AutoCad MAP 2011
Stav: Offline
Bodů: 1400
Přímý odkaz na tuto zprávu Zasláno: 26.led.2012 v 08:16
To je dobré. ClapClap
Já používám pro výběd adresáře funkci "dos_getdir" z knihovny DOSLIB
http://www.en.emea.mcneel.com/doslib.htm

Ještě odtud používám dialog pro možnost výběru více souborů najednou - nemáte nějaký podobný příklad pro tuto příležitost? Bohužel GETFILED umožní výběr pouze jednoho souboru.
Předpokládám, že se by se pouze v řádku

(setq Dir (vlax-invoke (vlax-get-or-create-object "Shell.Application") 'browseforfolder 0 "zadej adresar" 1 ""))

browseforfolder zamění za nějaké jiné kouzelné slovo Embarrassed




Upravil alfred - 26.led.2012 v 08:23
Zpět nahoru
Seiner Zobrazit panel
TOP uživatel
TOP uživatel


Přihlášen: 01.říj.2004
Lokalita: ČR (PA)
Používám: Mechanical 2013, Inventor 2013 a starší
Stav: Offline
Bodů: 1468
Přímý odkaz na tuto zprávu Zasláno: 26.led.2012 v 10:15
A ještě poznámečka. Otestoval jsem původní kód na Mechnicalu 2012 na stanici s Win7-64 a na stanici XP-32. Na obou pracuje bez problémů. Zakopanej pes bude někde jinde...
Vítězslav Seiner
Chrudim
Zpět nahoru
splonk Zobrazit panel
TOP uživatel
TOP uživatel


Přihlášen: 25.lis.2006
Lokalita: ČR (Pha)
Používám: ACA 2010
Stav: Offline
Bodů: 269
Přímý odkaz na tuto zprávu Zasláno: 26.led.2012 v 15:10
Dobry den damy a panove,
Jsem rad, kdyz na CADForu vidim jak se vyvyji diskuze. To je urcite dobre. A o nejakem "svrbeni" nemuze byt ani rec :-).
Dekuji za vsechny zaslane podnety, priklady,.... Bouzel, moje znalosti programovani jsou omezene... Jsou omezene na ono "Ctrl+C, Ctrl+V" + "trochu zdraveho rozumu" s tim, ze obzvlast ta druha komponenta je cim dal hure dohledatelna. A hlavne, casova slozka je ten nejbolestnejsi clanek v celem procesu... Sice tusim o cem pisete ale urcite to neni tak, ze bich ted rovnou z mista nahradil cas puvodniho kodu napr. tim, co zaslal pan PavelStyl :-(. Kazdopadne dekuju / odivuju / a taktrochu zavidim :-).
 Ale abych se vratil na zacatek. Vyzkousel jsem radu pana Michla, funguje to, jenom musim vybrat nejkae dwg v danem souboru - to dwg tam ale v realu nemusim mit (pravda muzu ho tam umele vytvorit...). Jinak to funguje OK.
 Pan Seiner me ale, svym poslednim prispevkem,  navedl na myslenku to zkusit jeste jednou. A zakopanej pes je, zda se,v me "blbosti"... V onom druhem dialogovem okenku (vyz vyse 2nd. PrintScreen) staci kdyz do kolonky "Nazev souboru" napisu cokoliv a dam otevrit, pak to bezi bez problemu :-). Puvodne (a i na XP x86) mstcilo odkliknout s onim "Start here.*"... zrejmne drobny rozdil v UI dvou OS. A to mi (prozatim) staci :-)!!!
Tim nerikam, ze bi mi vadilo, kdyby nekdo vymenil cast puvodniho kodu za neco, co funguje lip a vyvesil to tady na CADForu ;-).
 
Kazdopadne, dekuji vsem za pomoc, moc!!!!!!
 
PS. LISP uveden na zacatku prosim pouzivat "na vlastni" nebezpeci. Zaprve, kazdy BATCH je tak trochu "ohubu" a zadruhe, kdyz spustim tento LISP v nejakem vykresu, akce probehne, pak uz zadny LISP do toho vykresu nemuzu nacist :-(. Proto ho vzdicky spoustim v onom "Drawing 1" :-)
 
Zdravim
JASponza
JASponza

ACA 2010 SP2, AutoCAD 2010

WinXP x86, Win7 x64
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 8424:Dávkový tisk několika výkresů a kopií, i na různé tiskárny.
Tip 4705:Dávková konverze DWG výkresů do starších formátů AutoCADu.
Tip 1171:Jak lze provést hromadné dávkové vykreslení (batchplot) několika výkresů v AutoCADu LT?
Tip 9100:VIPSnadná externí modifikace iVlastností souborů Inventoru, bez Inventoru.
Tip 7472:VIPHromadný tisk různých výkresových listů Inventoru do PDF.


 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 1,738 sekund.