Recommended Posts

Posted

Witam, poszukuję informacji jak napisać kod w VBA, który zaznaczy mi bloki (zaznaczy tak, jakbym jeździł po modelu i klikał LPM dany blok) o określonej nazwie, które dodatkowo w swoim pierwszym atrybucie mają nazwę "pozycja". 

Da się coś takiego w ogóle zrobić? Czytałem gdzieś, że w ogóle nie ma możliwości zwykłego zaznaczenia obiektów poprzez VBA

Posted

Wybitnie brzydki i nieintuicyjny fragment kodu. Tak przyjmuję wszelką krytykę z pokorą. Ale zaznacza wszystkie bloki w tym przypadku o nazwie "A-1".

Public Sub Test()
    Dim ssh As ZcadSelectionSet
    Dim Ftyp(1) As Integer
    Dim Fdat(1) As Variant
    Dim BlockName As String
    BlockName = "A-1"
    Dim F1, F2 As Variant
    Ftyp(0) = 0: Fdat(0) = "Insert"
    Ftyp(1) = 2: Fdat(1) = BlockName
    Set sstest = ThisDrawing.SelectionSets.Add("sstest")
    F1 = Ftyp
    F2 = Fdat
    sstest.Select zcSelectionSetAll, , , Ftyp, Fdat
     
    Dim GroupName As String
    GroupName = "sstest"

    Dim group As ZcadGroup
    Set group = ThisDrawing.Groups.Add(GroupName)
    For Each Item In sstest
        group.AppendItems (Item)
    Next
    sstest.Delete
    ThisDrawing.SendCommand ("_SELECT" + vbCr + "G" + vbCr + GroupName + vbCr + vbCr)
    group.Delete
End Sub

Pozostaje odfiltrować bloki po atrybucie. Iteracyjnie, w pętli trzeba sprawdzić wartość każdego atrybutu w każdym zaznazconym bloku.

Który atrybut jest pierwszy? ten który został wcześniej wstawiony do rysunku? a może ten najwyżej? Raczej posługiwałbym się tu nazwą atrybutu (TagString) niż tym który jest pierwszy. ale... to już temat na inna historię.

 

Posted

Dla mnie kod piękny. Z tym, że komenda _select nie jest tym samym co lewy klik myszy na obiekt (nie pojawia się okienko właściwości do ewentualnych zmian). 

Posted

Chwila bo czegoś nie rozumiem. Może mamy coś inaczej.
U mnie okienko właściwości jest otwarte cały czas. Po uruchomieniu takiej funkcji we właściwościach pojawiają mi sie zaznaczone bloki z możliwością zmian.

2021-02-08 14_14_50-Window.png

Posted

vernum = "2019.11.06(51422)_Win32" (tylko do odczytu) 

testuję na 2 zaznaczeniach. Po usunięciu 

group.Delete

widzę, że grupa tworzy się prawidłowo, można ją kliknąć. Ale to tylko pośrednie roziwązanie

Posted

Na VBA się nie znam, na lispie też, ale jak coś ostatnio próbowałem robić to też miałem problem z zaznaczaniem.

Obiekty były wybrane ale nie były podświetlone. Może to pomoże?

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...