kruszynski Opublikowano 13 Stycznia 2022 Zgłoś Udostępnij Opublikowano 13 Stycznia 2022 1. Nie ma gotowego automatu, trzeba poskładać. możemy sprawdzić co jest zaznaczone trzeba z tego odfiltrować bloki z nich można odczytać nazwy. Dim sset As ZcadSelectionSet Dim ssobject As ZcadEntity Dim nazwa As String Set sset = ThisDrawing.PickfirstSelectionSet For Each ssobject In sset nazwa = ssobject.ObjectName If ssobject.ObjectName = "AcDbBlockReference" Then Dim blok As ZcadBlockReference Set block = ssobject Dim punkt As Variant punkt = block.InsertionPoint End If Next ssobject 2. Jest możliwość wybierania we wskazanym punkcie z filtrami określającymi co ma być wybrane np tylko bloki: Dim FilterType(0) As Integer Dim FilterData(0) As Variant FilterType(0) = 0 FilterData(0) = "Insert" Dim ssetObj As ZcadSelectionSet Set ssetObj = ThisDrawing.SelectionSets.Add("1") Dim point(0 To 2) As Double point(0) = 820.4691: point(1) = 954.628: point(2) = 0 ssetObj.SelectAtPoint point, FilterType, FilterData Z tego zbioru trzeba odczytać nazwy. O zaznaczaniu było tutaj 3. Ta konstrukcja jest dla mnie zbyt skomplikowana. W moim pojęciu zaintegrowanie w blok to właśnie jego edycja. Gdzie jest różnica? co ma się dziać? a co nie? dlaczego edycja nie jest odpowiednią operacją? Np zmiana koloru elementów w bloku to właśnie jego edycja. Możemy wszystkim elementom w definicji ustawić kolor na "JakBlok" i wstawionemu blokowi zmienić kolor. To wystarczy? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 13 Stycznia 2022 Autor Zgłoś Udostępnij Opublikowano 13 Stycznia 2022 Co do 3. Może nie edytujmy bloku, bo zaraz wszystkie bloki o tej nazwie będą miały zmieniony kolor a mi zależy tylko na jednym. Może da się zatem zmienić tylko kolor jego atrybutów? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adam_x Opublikowano 14 Stycznia 2022 Zgłoś Udostępnij Opublikowano 14 Stycznia 2022 W dniu 13.01.2022 o 07:48, pop3k napisał: Może da się zatem zmienić tylko kolor jego atrybutów? Witam tutaj przykład programu na zmianę koloru atrybutu bloku : On Error Resume Next ThisDrawing.SelectionSets.Item("grupa1").Delete Dim sset1 As ZcadSelectionSet Dim ent As ZcadEntity Dim blk As ZcadBlockReference Set sset1 = ThisDrawing.SelectionSets.Add("grupa1") Dim att1 As Variant ThisDrawing.Utility.Prompt ("wskaż obiekt(y) bloki z atrybutami") sset1.SelectOnScreen For Each ent In sset1 If ent.ObjectName = "AcDbBlockReference" And ent.HasAttributes = True Then Set blk = ent att1 = blk.GetAttributes att1(0).color = "3" 'tutaj trzeba wpisać nr. atrybutu gdzie 0 to pierwszy itd... a 3 to nr. koloru End If Next PS. Może by lepiej było stworzyć jakąś tabelkę ?, który by wyciągał potrzebne informację z bloku dynamicznego. np. mamy 50 takich bloków "zbrojenia" czyli 50 wierszy z kolumnami "długość pręta", "rozpiętość", "współrzędna x", "współrzędna y" dodatkowo w kolumnie by był numer unikatowy bloku "thisdrawing.ModelSpace.Item(numer)" czy uchwyt bloku wtedy można by taką tabelkę aktualizować. (pobierał by numer z tabelki do vba). + najlepiej z datą ostatniej modyfikacji (jeżeli w ogóle zwcad posiada takie dane) ale nie wiem czy takie makro w ogóle można stworzyć ? więc to takie moje teoretyczne rozważania Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 14 Stycznia 2022 Autor Zgłoś Udostępnij Opublikowano 14 Stycznia 2022 Dziękuję bardzo za pomoc, spróbuję poskładać wszystko do kupy i stworzyć mój superblok. Co do zliczania pozycji to już mam takie makro (ewentualnie korzystam z już dostępnych) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.