Diskuzní fórum, poradna
CAD diskuze, rady, výměna zkušeností |
Výběrová množina přes VBA |
Odpovědět | archiv |
Autor | |
Radek Pícha
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
Diskutér Přihlášen: 04.říj.2004 Lokalita: Czech Republic Používám: Inventor Stav: Offline Bodů: 66 |
Téma: Výběrová množina přes VBA Zasláno: 07.bře.2006 v 06:41 |
Dobrý den,
potřebuji přidat entitu do výběrové množiny oSS2 a nedaří se mi to. Vycházel jsem z lekcí na http://www.cadforum.cz/cadforum/tema.asp Zde je moje procedura: 'pokusy s tvorbou sSS2 jsou za ' protože nefungují 'lze vytvořit filtr tak, že vybere bloky se jménem "RADEKROZ"? Sub VyberRadkyKusovniku() Dim oSS As AcadSelectionSet 'Dim oSS2 As AcadSelectionSet Dim oBlok As AcadEntity Dim iFilterCode(0) As Integer Dim vFilterValue(0) As Variant Dim i As Integer Dim Dotaz As String 'Dim ssobjs As AcadEntity 'Errorhandler (vymaže případně již existující výběrovou množinu) On Error Resume Next Application.ActiveDocument.SelectionSets("Bloky").Delete Application.ActiveDocument.SelectionSets("Radky").Delete On Error GoTo 0 'vytvoř výběrovou množinu nazvanou "Bloky" Set oSS = Application.ActiveDocument.SelectionSets.Add("Bloky") 'Set oSS2 = Application.ActiveDocument.SelectionSets.Add("Radky") iFilterCode(0) = 0: vFilterValue(0) = "insert" 'oSS.SelectOnScreen iFilterCode, vFilterValue 'pouze vybrané bloky oSS.Select acSelectionSetAll, , , iFilterCode, vFilterValue 'všechny bloky i = 0 If oSS.Count Then For Each oBlok In oSS 'zpracovat všechny entity výběrové množiny "Bloky" &nbs p; With oBlok &nbs p; If UCase(.Name) = "RADEKROZ" Then &nbs p; 'oSS2.AddObject i, oBlok &nbs p; 'Set ssobjs(i) = oBlok &nbs p; i = i + 1 &nbs p; End If &nbs p; End With &nbs p; Next oBlok &nbs p; 'oSS2.AddItems ssobjs &nbs p; Dotaz = MsgBox("Ve výkrese je " + Str(i) + " řádků rozpisky." + Chr(13) + _ &nbs p; "Chceš je nyní exportovat?", 4) &nbs p; If Dotaz = vbYes Then &nbs p; MsgBox "Ještě to nemám, nyní bych chtěl exportovat a vymazat bloky z oSS2 ..." &nbs p; End If &nbs p; End If End Sub |
|
Radek Pícha
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
Diskutér Přihlášen: 04.říj.2004 Lokalita: Czech Republic Používám: Inventor Stav: Offline Bodů: 66 |
Zasláno: 07.bře.2006 v 16:50 |
Omlouvám se, zapoměl jsem napsat dotaz:
Jak lze přidat entitu oBlok do výběrové množiny oSS2? |
|
Radek Pícha
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
Diskutér Přihlášen: 04.říj.2004 Lokalita: Czech Republic Používám: Inventor Stav: Offline Bodů: 66 |
Zasláno: 14.bře.2006 v 13:36 |
Opravdu nikdo neví, jak pracovat s výběrovými množinami ve VBA?
Věděl by někdo, jak napsat filtr, aby se vytvořila výběrová množina bloků s určitým názvem? Když v: oSS.Select acSelectionSetAll, , , iFilterCode, vFilterValue použiju: vFilterValue(0) = "insert" Vloží se do oSS všechny bloky. Moc děkuji za odpověď. |
|
Chop
Diskutér Přihlášen: 13.srp.2005 Lokalita: Czech Republic Stav: Offline Bodů: 64 |
Zasláno: 17.bře.2006 v 08:19 |
Zkuste vyzkoušet: Sub VybirejVesele() Dim pomset As AcadSelectionSet For Each pomset In ThisDrawing.SelectionSets |
|
Radek Pícha
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
Diskutér Přihlášen: 04.říj.2004 Lokalita: Czech Republic Používám: Inventor Stav: Offline Bodů: 66 |
Zasláno: 23.bře.2006 v 15:07 |
Velmi děkuji, stačilo nakopnout!
Nechápal jsem, co je "FilterCode". Příklad mi pomohl, již studuji skupinové kódy dxf z programátorské příručky. |
|
Radek Pícha
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
Diskutér Přihlášen: 04.říj.2004 Lokalita: Czech Republic Používám: Inventor Stav: Offline Bodů: 66 |
Zasláno: 23.bře.2006 v 15:49 |
A jak zadám součin filtrů? Například, když chci vybrat všechny bloky,
které se jmenují "RADEKROZ" a jsou vloženy v hladině "RAZITKO"?
Set oSS = Application.ActiveDocument.SelectionSets.Add("Bloky") FiltrTyp(0) = 0 FiltrData(0) = "insert" oSS.Select acSelectionSetAll, , , FiltrTyp, FiltrData 'všechny bloky Set oSS = Application.ActiveDocument.SelectionSets.Add("RADEKROZ") FiltrTyp(0) = 2 FiltrData(0) = "RADEKROZ" oSS.Select acSelectionSetAll, , , FiltrTyp, FiltrData 'entity zvané "RADEKROZ" Set oSS = Application.ActiveDocument.SelectionSets.Add("RAZITKO") FiltrTyp(0) = 8 FiltrData(0) = "RAZITKO" oSS.Select acSelectionSetAll, , , FiltrTyp, FiltrData 'entity v hladině "RAZITKO" Set oSS = Application.ActiveDocument.SelectionSets.Add("Bloky2") FiltrTyp(0) = ??? FiltrData(0) = ??? 'všechny bloky "RADEKROZ" v hladině "RAZITKO" oSS.Select acSelectionSetAll, , , FiltrTyp, FiltrData |
|
Chop
Diskutér Přihlášen: 13.srp.2005 Lokalita: Czech Republic Stav: Offline Bodů: 64 |
Zasláno: 27.bře.2006 v 05:45 |
Samozřejmě podmínky lze libovolně kombinovat, ale k vyhodnocení musí dojít najednou. Pak to má vypadat takhle: Dim FiltrTyp(2) as integer ' podle počtu podmínkových "dvojic" od 0 tj. 0,1,2… FiltrTyp(0)=0 oSS.Select acSelectionSetAll, , , FiltrTyp, FiltrData |
|
Radek Pícha
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
Diskutér Přihlášen: 04.říj.2004 Lokalita: Czech Republic Používám: Inventor Stav: Offline Bodů: 66 |
Zasláno: 28.bře.2006 v 13:30 |
Díky, funguje. Problém jsem měl právě v Dim ...(2)
|
|
Radek Pícha
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
Diskutér Přihlášen: 04.říj.2004 Lokalita: Czech Republic Používám: Inventor Stav: Offline Bodů: 66 |
Zasláno: 30.bře.2006 v 09:59 |
Jak můžu procházet po jednotlivých entitách výběrové množiny?
|
|
Chop
Diskutér Přihlášen: 13.srp.2005 Lokalita: Czech Republic Stav: Offline Bodů: 64 |
Zasláno: 30.bře.2006 v 10:58 |
Pokud máte z předchozích příkladů nadefinován výběr oSS, tak by to mělo fungovat takhle: Dim oobj As Object |
|
Greenhorn
Nováček Přihlášen: 28.bře.2006 Stav: Offline Bodů: 6 |
Zasláno: 30.bře.2006 v 19:19 |
Zdravim,
mam problem s určením mena entity resp. bloku pre zistenie mena objektu použijem ThisDrawing.Blocks.Item(i).Name toto ide bez problemov problem nastane keď chcem určiť meno entity pri výbere z množiny objektou cez ent = ThisDrawing.ModelSpace.Item(j) následne použijem meno = ent.Name Pri použití .Name dostanem chybovú hlášku o tom že daný objekt nepovoľuje túto možnosť Možno je problém vo verzii autocadu (používam Autocad 2002) Vie mi niekto poradiť ako určiť meno entity resp objektu pri použití ModelSpace ? |
|
Chop
Diskutér Přihlášen: 13.srp.2005 Lokalita: Czech Republic Stav: Offline Bodů: 64 |
Zasláno: 31.bře.2006 v 06:55 |
Blok skutečně má svoje jméno a tak je možno je načíst. Ve výběrové množině ale nemusí být jen bloky a objekt AcadEntity nebo AcadObject jméno (Name) tudíž nepodporuje. Musíte procházet množinu po entitě, zjistit její Object.Name a podle toho pak zpracovat např. jen bloky a těm již Name přečíst lze. Dim oobj As Object |
|
Greenhorn
Nováček Přihlášen: 28.bře.2006 Stav: Offline Bodů: 6 |
Zasláno: 06.dub.2006 v 08:26 |
Ešte Jedna otázočka,
Autocad 2002 nepodporuje vlastnosť krivky "polyline.length" Potreboval by som zistiť dĺžku krivky bez rozloženia objektu na výkrese. Skúšal som rozložiť objekt pomocou .explode ale neviem prísť na spôsob určenia vlastnosti vráteného poľa objektou. |
|
Chop
Diskutér Přihlášen: 13.srp.2005 Lokalita: Czech Republic Stav: Offline Bodů: 64 |
Zasláno: 12.dub.2006 v 08:26 |
2002 již nemám, nemohu ověřit. Skutečně Vám nefunguje ani toto? Dim oobj As Object |
|
Greenhorn
Nováček Přihlášen: 28.bře.2006 Stav: Offline Bodů: 6 |
Zasláno: 19.dub.2006 v 14:46 |
Ďakujem za odpoveď, medzičasom som problém vyriešil trochu iným spôsobom
váš je o niečo elegantnejší tak keď bude trochu času vyskúšam. |
|
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 1,352 sekund.