pop3k

Użytkownik forum
  • Postów

    71
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez pop3k

  1. Super robota! Dziękuję
  2. Super!
  3. Ten addselected jakby jeszcze pobierał skalę, szerokość i rodzaj linii to byłoby super
  4. 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)
  5. 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?
  6. Tak też o tym myślałem. Tak będę kombinował Do stworzenia superbloku potrzebne mi jeszcze kilka patentów. 1. Jaka komenda vba poda mi współrzędne zaznaczonego bloku? 2. Czy istnieje możliwość podania współrzędnych w jakiejś funkcji a funkcja zwróci nazwy wszystkich bloków występujących w tym punkcie i je zaznaczy? 3. Czy jest możliwość zaingerowania w blok nie edytując go. Na przykład po spełnieniu określonego warunku wszystko co jest wewnątrz bloku zmieni kolor na żółty.
  7. Tak jak pisałem, chcę odczytać tę wartość i zapisać ją w atrybucie bloku (odczytywać to, co jest w czerwonej ramce i zapisywać w niebieskiej - patrz 9 post) za każdym razem, gdy blok zostanie zmieniony.
  8. No dobra, pomożecie powalczyć z reaktorem? Plik z blokiem dynamicznym - bohaterem w załączniku Procedura: Private Sub ZcadDocument_ObjectModified(ByVal Object As Object) Dim att As ZcadAttributeReference Dim atts As Variant If TypeOf Object Is ZcadBlockReference Then Set blk = Object If blk.EffectiveName = "Konstruktor_dozbrojenia" Then atts = blk.GetAttributes For j = 0 To UBound(atts) Set att = atts(j) If j = 0 Then MsgBox "Udało się" & att.TextString Next End If End If End Sub OK, trochę dziwnie wygląda odniesienie się do atrybutu tego bloku, ale działa.. Procedura powoduje wywalenie msgboxa z pokazaniem atrybutu po każdorazowej zmianie bloku. Zmieniona procedura: Private Sub ZcadDocument_ObjectModified(ByVal Object As Object) Dim att As ZcadAttributeReference Dim atts As Variant If TypeOf Object Is ZcadBlockReference Then Set blk = Object If blk.EffectiveName = "Konstruktor_dozbrojenia" Then atts = blk.GetAttributes For j = 0 To UBound(atts) Set att = atts(j) 'If i = 0 Then MsgBox "Udało się" & att.TextString Dim ss As ZcadSelectionSet Dim ent As ZcadEntity Dim bname As String Dim props() As ZcadDynamicBlockReferenceProperty Dim pvalue As Variant Dim blkref As ZcadBlockReference With ThisDrawing.SelectionSets While .Count > 0 .item(0).Delete Wend Set ss = .Add("$DynBlocks$") End With Dim ftype(0 To 1) As Integer Dim fdata(0 To 1) As Variant ftype(0) = 0: ftype(1) = 66 fdata(0) = "INSERT": fdata(1) = 1 ss.SelectOnScreen ftype, fdata If ss.Count = 0 Then MsgBox "Nie wybrano bloku...Kończymy" Exit Sub End If Set blkref = ss.item(0) 'Dim i As Integer props = blkref.GetDynamicBlockProperties MsgBox props(0).Value Dim prop As ZcadDynamicBlockReferenceProperty 'For i = LBound(props) To UBound(props) - 1 Set prop = props(0) pvalue = prop.Value Dim asTxt As String asTxt = CStr(pvalue) MsgBox (asTxt) 'Next i Next End If End If End Sub Na chama wrzucone to co Kruszynski wymyślił. Tym razem procedura pokazuje długość pręta po każdorazowej zmianie. Niestety mogę się odnieść jedynie do pierwszej długości props(0), wyłączyłem pętle, bo przy props(1) wywala już błąd. CEL: Po zmianie długości pręta lub wymiaru, chcę podmienić atrybut. Czuję, że jestem już blisko, ale działam na ślepo. Pomożecie? blok.dwg
  9. Witam, czy znajdę funkcję podobną do addselected z autocad? Funkcja pobiera warstwę, kolor, grubość i typ linii z wybranego obiektu a następnie chce ją rysować. A może ma ktoś lispa który to robi?
  10. Ok, znalazłem. Za dużo pętli w For I = 0 To ssetObj.Count powinno być For I = 0 To ssetObj.Count -1 Dziękuję bardzo. Ładnie działa!
  11. Jeżeli ssetObj jest moim oSset to wyskakuje mi błąd Run-time error '-2147467259 (80004005)': Method 'Item" of object "IZcadSelectionSet' failed -> Set ent = oSset.item(i)
  12. Dzięki wszystkim za odpowiedzi. Ten etap już mamy ogarnięty. Teraz chciałem wywoływać jakąś funkcję (choćby MsgBox) VBA za każdym razem jak ten właśnie blok zmodyfikuję (rozszerzę, wydłużę)
  13. Cześć, używam kodu do zaznaczania bloków i filtruje je aby pobierało tylko te z nazwą "test". Czasem bloki te grupuję. Czy makro może wychwycić, że dany blok o nazwie "test" jest już w jakiejś grupie, wyrzuci mi błąd (msgbox) i wyjdzie z funkcji? Dim oSset As ZcadSelectionSet With ThisDrawing.SelectionSets While .count > 0 .item(0).Delete Wend Set oSset = .Add("*") End With ftype(0) = 2: fdata(0) = "test" dxfCode = ftype: dxfValue = fdata oSset.SelectOnScreen dxfCode, dxfValue
  14. Aha, elegancko. Teraz jak już mam dostęp do bloku dynamicznego, jego parametrów i atrybutów to chodzi mi po głowie takie makro, które byłoby wczytywane wraz z oknem zwcada i śledziłoby zmianę któregokolwiek parametru (lub atrybutu) bloku o nazwie "Test_blok" i za każdym razem wyrzucałoby Msgbox typu "parametr bloku o współrzędnych x,y został zmieniony" lub "atrybut bloku o współrzędnych x,y został zmieniony". Byłby to blok superdynamiczny, który mógłby reagować na każdą zmianę Jest to w ogóle możliwe? Czy takie makro ciągle działające w tle nie zajmowałoby za dużo zasobów? Co o tym myślicie?
  15. Chodziło mi o pobranie danych z czerwonej ramki. Z niebieskiej już miałem opanowane.
  16. OK, więc w pliku blok dynamiczny, który posiada parametry rozciągania długości o nazwach Rozstaw i Dlugosc_preta (na zdjęciu w czerwonej ramce), blok będzie posiadał również atrybuty do przechowywania informacji itp. (niebieska ramka), ale o nich proszę nie myśleć - wiem jak się do nich dostać przez VBA. Teraz pytanie, czy mogę wczytać wartości z czerwonej ramki z pod VBA i wyświetlić je w msgBox, a może mogę je też podmienić? PS. Na początku chodziło mi o to, żeby któryś z atrybutów (z niebieskiej ramki) podczytywał na żywo po każdej zmianie długości (z czerwonej ramki) forum_cad_blok.dwg
  17. Kiedyś rozmawiałem z e-cadem, chyba mają za dużo pracy żeby wprowadzać nowe pomysły
  18. Mam e-cad, jednak tworzę coś na własne potrzeby. A co do mojego pytania?
  19. Nie nie, nie o to chodzi. No dobrze.. a można wczytać wartość długości rozciąganych elementów do VBA? To znaczy, mam blok dynamiczny, w którym rozciągam dwie prostopadłe linie. Wartości te są edytowalne i można je zmieniać poprzez kliknięcie myszką lub wpisanie wartości. Te wartości są sobie tożsame. Czy można stworzyć makro VBA w którym to klikamy na blok i np. msgbox podaje nam wartości długości tych dwóch linii?
  20. Chcę zrobić blok dynamiczny pręta do zbrojenia płyty. Pręt ma określoną długość, którą mogę rozciągać (a więc zmieniać jego długość) a prostopadle do niego mam linię wymiarową określającą jego rozstaw, którą też mogę rozciągać (też mam długość rozkładu). Po środku stoi blok z atrybutami. Czy mogę powiązać atrybuty bloku ze zmiennymi atrybutami? Aby blok wiedział, że zmieniła się długość pręta i wciągała do siebie jego wartość? Macie jakiś pomysł czy można to zautomatyzować?
  21. Słuchajcie, działa! zamiast "_SELECT" należy wpisać "_.pSELECT" Dzięki za pomoc! Jesteście MISTRZAMI
  22. 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
  23. To u mnie polecenie _SELECT i wybraniu nawet ręcznie obiektów nie zmienia nic w oknie Właściwości. Ciągle jest "brak wyboru". Hmmm 😕
  24. 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).