pop3k Opublikowano 25 Kwietnia 2023 Zgłoś Udostępnij Opublikowano 25 Kwietnia 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 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pawmal Opublikowano 25 Kwietnia 2023 Zgłoś Udostępnij Opublikowano 25 Kwietnia 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. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 25 Kwietnia 2023 Autor Zgłoś Udostępnij Opublikowano 25 Kwietnia 2023 Trochę tak, ale wtedy literki w bloku są w odbiciu lustrzanym 😕 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pawmal Opublikowano 25 Kwietnia 2023 Zgłoś Udostępnij Opublikowano 25 Kwietnia 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. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 25 Kwietnia 2023 Zgłoś Udostępnij Opublikowano 25 Kwietnia 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? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 25 Kwietnia 2023 Autor Zgłoś Udostępnij Opublikowano 25 Kwietnia 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. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 25 Kwietnia 2023 Zgłoś Udostępnij Opublikowano 25 Kwietnia 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? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 25 Kwietnia 2023 Autor Zgłoś Udostępnij Opublikowano 25 Kwietnia 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 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 25 Kwietnia 2023 Zgłoś Udostępnij Opublikowano 25 Kwietnia 2023 Myślę, że teraz wszystko jasne. Przekażę zgłoszenie do ZWSOFT. Niestety nie przychodzi mi do głowy żadne rozwiązanie tymczasowe. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 25 Kwietnia 2023 Autor Zgłoś Udostępnij Opublikowano 25 Kwietnia 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? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 25 Kwietnia 2023 Autor Zgłoś Udostępnij Opublikowano 25 Kwietnia 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? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 25 Kwietnia 2023 Zgłoś Udostępnij Opublikowano 25 Kwietnia 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 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 25 Kwietnia 2023 Autor Zgłoś Udostępnij Opublikowano 25 Kwietnia 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 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 5 Czerwca 2023 Autor Zgłoś Udostępnij Opublikowano 5 Czerwca 2023 Macie może informacje czy w wersji 2024 zostało to poprawione? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano Środa o 11:10 Autor Zgłoś Udostępnij Opublikowano Środa o 11:10 Dostałem info, że w wersji 2026 będzie to poprawione. Pożyjemy, zobaczymy. Będzie okazja na aktualizację. 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ą.