pop3k Posted April 25 Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
pawmal Posted April 25 Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
pop3k Posted April 25 Author Report Share Posted April 25 Trochę tak, ale wtedy literki w bloku są w odbiciu lustrzanym 😕 Quote Link to comment Share on other sites More sharing options...
pawmal Posted April 25 Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
kruszynski Posted April 25 Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
pop3k Posted April 25 Author Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
kruszynski Posted April 25 Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
pop3k Posted April 25 Author Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
kruszynski Posted April 25 Report Share Posted April 25 Myślę, że teraz wszystko jasne. Przekażę zgłoszenie do ZWSOFT. Niestety nie przychodzi mi do głowy żadne rozwiązanie tymczasowe. Quote Link to comment Share on other sites More sharing options...
pop3k Posted April 25 Author Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
pop3k Posted April 25 Author Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
kruszynski Posted April 25 Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
pop3k Posted April 25 Author Report Share Posted April 25 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 Link to comment Share on other sites More sharing options...
pop3k Posted Monday at 11:57 AM Author Report Share Posted Monday at 11:57 AM Macie może informacje czy w wersji 2024 zostało to poprawione? Quote Link to comment Share on other sites More sharing options...
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.