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.098.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řenob.lsp

 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: b.lsp
    Zasláno: 24.dub.2008 v 17:01
Vracím se k lispu b.lsp (od Pavla). Potřebuji zakomponovat do lispu, ve kterém používám vygenerovaný script z b.lsp, výběr pouze některých bloků. V b.lsp je to řešeno ručním výběrem, což v mém případě nejde - chtěl bych tam dostat výběrovou množinu bloků se specifickou částí názvu  - tj. aby ten výběr byl možný bez ručního zásahu (bez dialogu). Abych byl konkrétní:
;;vyber vsech Bloku s retezcem "_C" v nazvu
(setq B_C (ssget "X"(list(cons 0 "INSERT")(cons 2 "*_C"))))
nyní script je ve tvaru
;;puv.barva=6(magenta), nova.barva=ByBlock
(block_edit 2 6  0 0 "" "" 0 "" "")
což se provede na celý výkres...
-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.dub.2008 v 08:57

Jestli tomu dobře rozumím, tak by jste chtěl funkci

(block_edit_ss B_C 2 6  0 0 "" "" 0 "" "")
 
Jestli ano, tak to bude mít jeden háček. Představ te si, že máte ve výkrese vložen jeden blok dvakrát. A do toho výběru zahrnete jenom jednu instanci. Potom ten program ale změní obě dvě, protože obě ty instance mají stejnou definici.
 
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: 25.dub.2008 v 12:38
To je OK - to by mi nevadilo, ale mne zajímá, zda to lze takhle provést (tj. konkrétně na výb. mn. B_C)?
-FerTh-
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: 20.kvě.2008 v 09:09
Jde o to, že chci v blocích zachovat 3 druhy čar a 3 barvy, kterými jsou charakteristické typové bloky s názvem obsahujícím příponu _C. Pokud na to pustím ten lisp, tak ten provede změnu všech entit najednou - a to mi nevyhovuje. Chtělo by to tam vpašovat výběrový filtr dle vlastnosti entit... Příklad: Chci změnit vlastnosti pouze těch entit bloku, které jsou nakresleny typem čáry Center a mají barvu buď ByLayer anebo ByBlock (tj. blok má i další entity s jinými vlastnostmi) a to tak, aby pak výsledné vlastnosti byly Linetype=ByBlock, Color=ByBlock.
-FerTh-
Zpět nahoru
Martin Bielina Zobrazit panel
Zasloužilý člen
Zasloužilý člen

Přihlášen: 04.led.2007
Lokalita: ČR (Pha)
Používám:
AutoCAD True view 2016
Stav: Offline
Bodů: 100
Přímý odkaz na tuto zprávu Zasláno: 20.kvě.2008 v 09:24
Já používám třeba takovýto způsob filtrování v lispu

;výběr entit k záměně (úsečka ležící v jedné ze tří určených hladin)
(setq ent_sel (ssget "_X" '((-4 . "<AND")
                                (0 . "LINE")
                                (-4 . "<OR")
                                  (8 . "HLADINA 1")
                                  (8 . "HLADINA 2")
                                  (8 . "HLADINA X...")
                                (-4 . "OR>")
                             (-4 . "AND>")
                             )
                            )
                          )

Kombinovat se dají i jiné typy požadavků (barva, název entity, souřadnice atd. viz referenční příručka nápovědě). Toto je jen příklad, který přímo Váš problém nevyřeší, bude to potřeba trochu upravit na konkrétní požadavky.
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: 20.kvě.2008 v 10:00
To je OK, filtrované výběry samostatních entit (mimo blok) běžně používám taky. Ale jak na ty bloky? V podstatě jde o jakýsi přepis dialogového příkazu refedit do lispové podoby (což už jsme probírali v jiném mnou založeném tématu myslím že se to jmenovalo hromadný refedit) - vzešlo z toho skvělá pomůcka od Pavla a zda by ji o tuto možnost (pokud je to možné) rozšířil.

Upravil Ferdinand - 20.kvě.2008 v 10:07
-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: 20.kvě.2008 v 10:00

Dobrý den,
 píši to z hlavy bez odzkoušení. Zkuste do b.lsp přidat následující procedurku viz níže. První parametr je výběrová množina, ve které by měly být bloky.

Pavel Štyl
 
(defun block_edit_ss (ss co1 co2 co3 lt1 lt2 lt3 la1 la2 la3 / b i eg)
 (setq _BLOCK_CO_TYP co1)
 (setq _BLOCK_CO_2 co2)
 (setq _BLOCK_CO_3 co3)
 (setq _BLOCK_LT_TYP lt1)
 (setq _BLOCK_LT_2 lt2)
 (setq _BLOCK_LT_3 lt3)
 (setq _BLOCK_LA_TYP la1)
 (setq _BLOCK_LA_2 la2)
 (setq _BLOCK_LA_3 la3)
 
 (setq _BLOCK_LIST nil i 0)
 (while (< i (sslength ss))
  (setq eg (entget (ssname ss i)))
  (if (= (cdr (assoc 0 eg)) "INSERT")
   (setq _BLOCK_LIST (append _BLOCK_LIST (list (cdr (assoc 2 eg)))))
  )
  (setq i (1+ i))
 )
 (block_change)
 (command "_regen")
)
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: 20.kvě.2008 v 10:13
Projeví se to nějak i v dialogu / ve skriptu ?
-FerTh-
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: 30.kvě.2008 v 14:52
Potřebuji pomoct s provedením následujících (pro sjednocení vzhledu bloků v naší nadstavbové databázi - cca. 1200 souborů) - tj. aplikovat "hromadný" _refedit :
1- najdi v akt. výkresu bloky, které mají ve svém názvu řetězec *_C-*
- vyber jejich entity, které mají současně tyto vlastnosti:
-- mají barvu "ByBlock"
-- mají typ čáry "center"
- změň vlastnosti těchto entit na:
-- barva=ByBlock
-- typ čáry=ByBlock
- nastav vlastnosti těchto bloků na:
-- barva=6
-- typ čáry=center
 
2- najdi v akt. výkresu bloky, které neobsahují ve svém názvu řetězec  *_C-*
- vyber jejich entity s těmito vlastnostmi:
-- mají barvu "ByLayer"
-- mají typ čáry "ByLayer"
- změň vlastnosti těchto entit na:
-- barva=ByBlock
-- typ čáry=ByBlock
- nastav vlastnosti těchto bloků na:
-- barva=ByBlock
-- typ čáry=ByBlock
 
Potíž je v tom, že Pavlův program b.lsp řeší vlastnosti všech bloků, a to globálně.
-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: 02.čer.2008 v 06:59
No vždyť kvůli tomu jsem posílal tu funkci "block_edit_ss", jejíž první parametr je výběrová množina. Potom to přebarvení se provede jenom na bloky v té výběrové množině.
 
Podle mě by stačilo něco jako:
(setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 "*_C-*"))))
(block_edit_ss ss ......)
 
PS: Jestli plácám nesmysly, tak se omlouvám. Právě jsem se vrátil z dovolené :-)
 
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: 03.čer.2008 v 15:48
Je to nějak zacyklovaný - pořád to dělá ten 1 a samý výkres (v uzavřeném cyklu) a CAD musím sestřelit TaskManagerem...
-FerTh-
Zpět nahoru
Seiner Zobrazit panel
CAD/BIM manager
CAD/BIM manager

Přihlášen: 01.říj.2004
Lokalita: ČR (PA)
Používám:
Mechanical 2017, Inventor 2017 a starší
Stav: Offline
Bodů: 1662
Přímý odkaz na tuto zprávu Zasláno: 03.čer.2008 v 15:54
Omlouvám se, nesledoval jsem. Ale jak chcete otevírat další výkresy? V lispu to já teda neumím. Na to požívám scripty (demo) a generátor scriptů.
Vítězslav Seiner

Chrudim
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: 04.čer.2008 v 08:09
Je to řešeno formou
(defun S::STARTUP ()
(již jsem o tom psal v minulosti na jiném místě...)
pak se sestaví seznam dwg v akt. adresáři a pak z něj se berou výkres za výkresem (je to práce kolegy, takže podrobnosti musím vynechat).


Upravil Ferdinand - 04.čer.2008 v 08:10
-FerTh-
Zpět nahoru
Seiner Zobrazit panel
CAD/BIM manager
CAD/BIM manager

Přihlášen: 01.říj.2004
Lokalita: ČR (PA)
Používám:
Mechanical 2017, Inventor 2017 a starší
Stav: Offline
Bodů: 1662
Přímý odkaz na tuto zprávu Zasláno: 04.čer.2008 v 09:18
No to jste mi toho moc nesdělil. Pak (se) nechtějte radit. Předpokládám, že máte nějakou uživatelskou funkci, která dělá, co chcete. Je celkem zbytečné dělat ji jako startatup. Jestliže ji odladíte na jednom výkrese a funguje, je druhým krokem aplikovat to na nějaký seznam výkresů. A já jsem toho názoru, že tady je cesta jen přes script. A ten není nutné psát ručně, ale je možné použít generátor.
  Já používám svůj generátor a tajnosti s ním nedělám http://www2.chrudim.cz/seiner/programy/Davka.zip
 
Vítězslav Seiner

Chrudim
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 5109:Jak spustit funkci z načtené LSP aplikace.
Tip 6326:VIPPořadí načítání souborů ACAD.LSP, ACADDOC.LSP, ACAD20xxDOC.LSP, MENU.MNL a dalších
Tip 8924:Znáte příkaz AI_DOWNLOAD_LANGUAGE_PACKS?
Tip 2836:Jak snadno zjistit směr (orientaci) křivky?
Tip 3489:Přestaly mi fungovat příkazy ROZLOŽ/EXPLODE, XREF a XVAŽ/XBIND.
Tip 6719:Jak vybrat všechny bloky stejného jména?


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