pop3k Posted April 25, 2023 Report Posted April 25, 2023 Pracuję już długo na swoim makrze. Wszystko działało na Zwcad 2020 do czasu przejścia na Zwcad 2023 SP2. Doszedłem do tego, że object.Mirror nie działa prawidłowo na blokach. Niby odbija lustrzanie blok ale nie jego atrybuty. Wszystko nagrałem na poniższym filmiku. Macie jakieś porady jak to naprawić? '******** bigle ********* '------------------------ If typ = "bigle" Then BlockAttributes(0).TextString = ilosc & "%%c" & srednica & "-U-co" & d If typ = "bigle" And PIERWSZY(0) < DRUGI(0) And blizszyKierunek = "poziom" Then pt1(0) = TRZECI(0) pt1(1) = TRZECI(1) pt2(0) = pt1(0) pt2(1) = CZWARTY(1) MsgBox "pt1(" & pt1(0) & "," & pt1(1) & ")" & vbNewLine & "pt2(" & pt2(0) & "," & pt1(2) & ")" Set objDrawingObject = BlockRef.Mirror(pt1, pt2) MsgBox "Set objDrawingObject = BlockRef.Mirror(pt1, pt2)" objDrawingObject.Update MsgBox "objDrawingObject.Update" BlockRef.Delete End If http://cloud.movavi.com/show/ae358aa9-062f-42d0-a41c-308042aa56db Quote
pawmal Posted April 25, 2023 Report Posted April 25, 2023 Może ma na to wpływ zmienna MIRRTEXT, którą można ustawić na 0, aby tekst atrybutu po odbiciu był czytelny. Zmienna ustawiona na 1, powoduje, że atrybut jest w odbiciu lustrzanym. Quote
pop3k Posted April 25, 2023 Author Report Posted April 25, 2023 Trochę tak, ale wtedy literki w bloku są w odbiciu lustrzanym 😕 Quote
pawmal Posted April 25, 2023 Report Posted April 25, 2023 Zależy co to są za litery, bo sam tekst zawsze będzie odbity w lustrzanym odbiciu. Zmienna MIRRTEXT ma wpływ na atrybut. Quote
kruszynski Posted April 25, 2023 Report Posted April 25, 2023 Nie jestem pewien czy dobrze rozumiem jak powinien wyglądać wynik. Czy może Pan udostępnić fragment rysunku na którym widać jak to działa w wersji 2020 gdzie jest poprawnie? Quote
pop3k Posted April 25, 2023 Author Report Posted April 25, 2023 Na filmiku - blok górny został przygotowany tak jak ma być finalnie. Niestety nie mam już dostępu do wersji 2020 bo miałem jakiś błąd prze który musiałem przeinstalować i wybrałem aktualizację (przy okazji) do wersji 2023. Na słowo - musicie mi uwierzyć, że blok był prawidłowo odbijany tak, jakby go zrobić lustrem w opcjach cadowskich. Quote
kruszynski Posted April 25, 2023 Report Posted April 25, 2023 Wierzę na słowo. Ale biorę też poprawkę na to że już tyle razy inaczej rozumiałem słowo "prawidłowo" że przestałem wierzyć własnym ocenom i wolę porównywać twarde dane. 7 minut temu, pop3k napisał: blok górny został przygotowany tak jak ma być finalnie Zdecydowanie to ważna informacja 53 minuty temu, pop3k napisał: Niby odbija lustrzanie blok ale nie jego atrybuty Za to ta informacja nas zmyliła. Zrozumieliśmy że właśnie atrybuty - literki chce Pan odbijać lustrzanie, stąd pomysł o MIRRTEXT Przygotowałem przykład z własnym blokiem i rzeczywiście metoda object.Mirror uruchomiona w VBA działa inaczej niż polecenie ZWCADa. Efekt do zobaczenia na obrazku. Czyli różnica jest w tym, że tekst powinien być przesunięty jeszcze o jego szerokość w tym przypadku w lewo ( odbijałem to po prawej na lewo). Dobrze to rozumiem? Quote
pop3k Posted April 25, 2023 Author Report Posted April 25, 2023 Faktycznie lepiej będzie przedstawić to na obrazku. Skróciłem blok i zwymiarowałem jego punkty charakterystyczne. To, jak było w ZWCAD 2020 i jak jest w 2023. Widać, że w 2023 (drugi atrybut tekstowy) funkcja mirror dokładnie odbija wskazane punkty a nie tak jak funkcja lustro i w 2020 czyli jakby dopasowuje do wielkości tekstu i tam wstawia punkt charakterystyczny Quote
kruszynski Posted April 25, 2023 Report Posted April 25, 2023 Myślę, że teraz wszystko jasne. Przekażę zgłoszenie do ZWSOFT. Niestety nie przychodzi mi do głowy żadne rozwiązanie tymczasowe. Quote
pop3k Posted April 25, 2023 Author Report Posted April 25, 2023 A mi przychodzi. Tylko nie wiem jak. Czy można wywołać funkcję lustra z poziomu vba? tak, żeby podczas wykonywania linii sam sobie napisał wywołanie funkcji, podał 2 punkty charakterystyczne dla lustra i kontynuował kod VBA? Quote
pop3k Posted April 25, 2023 Author Report Posted April 25, 2023 Drugie pytanie: czy funkcja vba object.mirror znajduje się w bibliotece ZWCAD 2021 Type Library? A może w innej? A może mogę podmienić biblioteki? Nie wiem, plik? Quote
kruszynski Posted April 25, 2023 Report Posted April 25, 2023 23 minuty temu, pop3k napisał: A mi przychodzi. Tylko nie wiem jak. Czy można wywołać funkcję lustra z poziomu vba? tak, żeby podczas wykonywania linii sam sobie napisał wywołanie funkcji, podał 2 punkty charakterystyczne dla lustra i kontynuował kod VBA? Można. W skrócie składnia byłaby taka. Myślę że zamiana współrzędnych z liczbowych na tekst to już prosta sprawa. Dim entity As String entity = "(handent " & Chr(34) & ref.handle & Chr(34) & ")" ThisDrawing.SendCommand "_MIRROR" & vbCr & entity & vbCr & vbCr & "420,340 420,360" & vbCr Nie lubię tej metody dlatego, że powstaje nowy obiekt. Jeśli chcemy później jeszcze coś z tym zrobić, to nie możemy posłużyć się tym, który mieliśmy wcześniej np przechowany w zmiennej przed uruchomieniem funkcji. Inna kwestia to że polecenia jako SendCommand są wywoływane asynchronicznie więc kod VBA będzie się wykonywał dalej nie czekając na zakończenie działania polecenia. dmatusz3 1 Quote
pop3k Posted April 25, 2023 Author Report Posted April 25, 2023 Działa. Czyli jest rozwiązanie tymczasowe. entity = "(handent " & Chr(34) & BlockRef.Handle & Chr(34) & ")" punkty = pt1(0) & "," & pt1(1) & " " & pt2(0) & "," & pt2(1) punkt1 = Replace(pt1(0), ",", ".") punkt2 = Replace(pt1(1), ",", ".") punkt3 = Replace(pt2(0), ",", ".") punkt4 = Replace(pt2(1), ",", ".") punkt = punkt1 & "," & punkt2 & " " & punkt3 & "," & punkt4 ThisDrawing.SendCommand "_MIRROR" & vbCr & entity & vbCr & vbCr & punkt & vbCr & "Tak" & vbCr ThisDrawing.SendCommand "STR_ZPP_v2" frm_ZP_v2.hide Zapisuję kod na forum dla tych co szukają gotowego rozwiązania. Dziekuję! dmatusz3 1 Quote
pop3k Posted June 5, 2023 Author Report Posted June 5, 2023 Macie może informacje czy w wersji 2024 zostało to poprawione? Quote
pop3k Posted December 18, 2024 Author Report Posted December 18, 2024 Dostałem info, że w wersji 2026 będzie to poprawione. Pożyjemy, zobaczymy. Będzie okazja na aktualizację. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.