Vytisknout stránku | Zavřít okno

ActiveSelectionSet po Query.Execute

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: Civil 3D, Map, InfraWorks, GIS
Popis fóra: Otázky kolem mapových a GIS aplikací AutoCAD Map 3D, Civil 3D, Raster Design a InfraWorks
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=1939
Datum vytištění: 18.čer.2026 v 09:05


Téma: ActiveSelectionSet po Query.Execute
Odeslal: MarianA
Předmět: ActiveSelectionSet po Query.Execute
Datum odeslání: 12.led.2006 v 14:22

Zdravim,  

mam problem vo VBA pri ziskani objektov po Query.Execute do SelectionSet-u pomocou ThisDrawning.ActiveSelectionSet. V pripade, ze query vyberie nejake objekty ActiveSelectionSet ich vrati v SelectionSet-e. 

 Ked Query.Execute nevyberie ziadny objekt ActiveSelectionSet vrati objekty vybrate v poslednom SelectionSet-e. A nie prazdny SelectionSet ako ocakavam.

Vdaka za kazdu radu, pomoze mi tiez rada ako dostat vo VBA objekty pomocou Query do SelectionSet-u.

                                                   Marian




Odpovědi:
Odeslal: MarianA
Datum odeslání: 17.led.2006 v 09:24

na upresnenie posielam kod.

1. v pripade ze v pripojenom vykrese sa nachadzaju objekty s layer = 0 SelectionSet po query vrati objekty s layer = 0. Ak sa nenachadza, vrati  vsetky objekty z predchadzajuceho SelectionSet-u.

2. taktiez v danom pripade nefunguje Query.Execute, ale iba ThisDrawing.SendCommand "_MAPWSQUERYEXECUTE "

Sub QueryToSelectionSet()
    Dim oQry As Query
    Dim oQLeaf As QueryLeaf
    Dim oQBranch As QueryBranch
    Dim oProject As Project
    Dim oUtil As AcadUtility
    Dim sLayer As String
   
    sLayer = "0"
  
    Dim oProjectOptions As ProjectOptions
    Dim oAcadSelSet As AcadSelectionSet
   
    Set oUtil = ThisDrawing.Utility
    Set oProject = ThisDrawing.Application.GetInterfaceObject("AutoCADMap.Appli cation").Projects(ThisDrawing)
    Set oProjectOptions = oProject.ProjectOptions
   
    Set oAcadSelSet = ThisDrawing.SelectionSets.Add("AllObjectsSelected")
    If Not Nothing Is oAcadSelSet Then
        oAcadSelSet.Select acSelectionSetAll
        oUtil.Prompt "Before _MAPWSQUERYEXECUTE oAcadSelSet.Name = " & oAcadSelSet.Name & vbCrLf
        oUtil.Prompt "Before _MAPWSQUERYEXECUTE oAcadSelSet.Count = " & CStr(oAcadSelSet.Count) & vbCrLf
        oAcadSelSet.Clear
        oAcadSelSet.Delete
    End If
   
    oProjectOptions.MkSelSetWithQryObj = True
   
    Set oQry = oProject.CurrQuery
    oQry.Clear
    Set oQBranch = oQry.QueryBranch
   
    Set oQLeaf = oQBranch.Add(kPropertyCondition, kOperatorAnd)
    If True = oQLeaf.SetPropertyCond(kLayer, kCondEq, sLayer) Then
        oQry.Mode = kQueryDraw
        If True = oQry.Define(oQBranch) Then
'           ;  If False = oQry.Execute( ) Then
'           ;      ThisDrawing.Utility.Prompt "Query.Execute fail"
'           ;  End If
             ThisDrawing.SendCommand "_MAPWSQUERYEXECUTE "
             oUtil.Prompt "Execute Query for Layer = " & sLayer & vbCrLf
        End If
    End If
   
    Set oAcadSelSet = ThisDrawing.ActiveSelectionSet
    If Not Nothing Is oAcadSelSet Then
        oUtil.Prompt "After _MAPWSQUERYEXECUTE oAcadSelSet.Name = " & oAcadSelSet.Name & vbCrLf
        oUtil.Prompt "After _MAPWSQUERYEXECUTE oAcadSelSet.Count = " & CStr(oAcadSelSet.Count) & vbCrLf
        oAcadSelSet.Clear
        oAcadSelSet.Delete
    End If
   
    oQry.Clear
    Set oUtil = Nothing
    Set oQry = Nothing
    Set oQBranch = Nothing
    Set oQLeaf = Nothing
    Set oAcadSelSet = Nothing
   
End Sub



Odeslal: MarianA
Datum odeslání: 18.led.2006 v 11:32

Zdravim,

podobny kod som nasiel ako odpoved na Query so Selection Setu na adn.autodesk.com. Je v podstate identicky, akurat volanie query je

ThisDrawing.SendCommand "(ade_qryexecute)" & Chr(13)

No aj tak to neriesi problem, ked je pocet objektov, ktore vyberie query rovne nule. Je nejaka moznost zistit vo VBA pocet objektov, ktore vrati Query?

dik

 




Vytisknout stránku | Zavřít okno