Kostka wizualizacji

Witam
W rekordzie UserForm1 znajduje się przycisk [Wyczyść], który usuwa szkic 3D i układ współrzędnych skojarzony z modułem. Pod warunkiem, że są to dwie ostatnie funkcje drzewa, tak aby po utworzeniu kostki nic nie było dodawane.

Jeśli chodzi o pobieranie nazwy szkicu, metoda " Name " jest częścią klasy " ISketch " interfejsu API (" swSketch.Name ", patrz wiersz 377).

Jeśli jednak istnieje zmienna wskazująca na szkic, taka jak linia 363 (" Set swSketch = swModel.SketchManager.ActiveSketch "), metoda " Select4() " umożliwia wybór bez konieczności szukania jej nazwy, na przykład:
ok = swSketch.Select4(False, Nothing) "
Prawdopodobnie odziedziczone członkinie, nie są udokumentowane w pomocy klasy " ISketch ", ale są udokumentowane w innych...

1 polubienie

Witam @m_blt
Jeszcze raz dziękujemy za Twoją opinię.
Właściwie nie nacisnąłem przycisku DELETE.
Przyjrzę się temu bliżej, aby zobaczyć, kiedy działa w odniesieniu do informacji o zmiennych, które dodałem... i wzbogacić moje ubóstwo intelektualne w VBA.:slightly_smiling_face:

Nawiasem mówiąc, w VBA majstrowałem przy tym dziś rano...
Makro, które pobiera nazwę ostatniej funkcji w celu jej usunięcia.
Ponieważ istnieje szkic 3D i trójścian, podwajam wiersze poleceń, aby usunąć 2 funkcje.
Wiem, to archaiczne :sweat_smile:
Z pewnością jest sposób, aby to uprościć, myślę...

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swDoc As SldWorks.ModelDoc2
Dim swAssembly As SldWorks.AssemblyDoc
Dim swFeatureName As SldWorks.Feature


Sub SuppressionDeuxDernieresFonctions()

    Set swApp = Application.SldWorks

    Set swDoc = swApp.ActiveDoc
  
    ' Vérifie que le document SW est ouvert
    If swDoc Is Nothing Then
  
    MsgBox "Aucun document Solidworks ouvert"
    Exit Sub
    
    End If
  
    Set swAssembly = swDoc
  
'''Première passe pour supprimer le trièdre
  
    'Attribution nom dernière fonction
    Set swFeatureName = swDoc.Extension.GetLastFeatureAdded

    'Vérifie la selection de la fonction
    If swFeatureName Is Nothing Then
  
    MsgBox "Sélection fonction impossible"
    swDoc.ClearSelection2 True
    Exit Sub
    
    End If
  
    'Selection du nom
    swFeatureName.Select True
  
    'Suppression de la fonction
    swDoc.EditDelete
  
'''Deuxième passe pour supprimer l'esquisse 3D
  
    'Attribution nom dernière fonction
    Set swFeatureName = swDoc.Extension.GetLastFeatureAdded

    'Vérifie la selection de la fonction
    If swFeatureName Is Nothing Then
  
    MsgBox "Selection fonction Impossible"
    swDoc.ClearSelection2 True
    Exit Sub
    
    End If
  
    'Selection du nom
    swFeatureName.Select True
  
    'Suppression de la fonction
    swDoc.EditDelete
  
End Sub
1 polubienie

Witam @m_blt

Mam małe pytanie odnośnie definicji układu pudełka.
Mam kilka przypadków, w których nie pasuje do maksimum tego, co powinno być. W szczególności na okrągłych częściach z zaokrągleniami:

Mam obudowę na 2 sztukach po prawej i lewej stronie:

Ale nie mam etui na górnym kawałku:

Gdzie w kodzie mogę interweniować, aby uzyskać dobrą styczność?

W każdym razie makro działa świetnie.
Przywiozłem swoje aranżacje i dodatkowe funkcje i jest SUPER.
Bardzo dziękuję za udzieloną pomoc.

Z góry dziękuję.

Witam
Trudno powiedzieć, jakie jest źródło problemu, o którym mówisz. Kilka uwag:

  • Jaka jest skala błędu w porównaniu z ogólnymi wymiarami zespołu (na przykład w mm)?

  • O ile zaobserwowana wada wymaga znacznego zoomu, winny może być wyświetlacz...

  • Metoda " GetExtremePoint() " określa zewnętrzną granicę dla każdej części. Jest to obliczenie numeryczne wewnętrzne dla interfejsów API SolidWorks. Czy jest rygorystyczny? Jak każde obliczenie numeryczne, używa kryterium jakości do walidacji wyszukiwania, kryterium nieznanego użytkownikowi.
    W tym punkcie, Pomoc SolidWorks wypowiedziała się na temat funkcji " GetBodyBox ", która najwyraźniej używa metody " GetExtremePoint ":
    WAŻNE: Zwrócone wartości są przybliżone i nie powinny być używane do celów porównawczych lub obliczeniowych. Ponadto obwiednia może ulec zmianie po przebudowaniu modelu.
    Kontury " chmur" widoczne na zrzutach ekranu wydają się być oparte na splajnach. Czy to może być pochodzenie pb?

  • Jedynymi obliczeniami wewnątrz makra są zmiany układu współrzędnych, które korzystają z funkcji wektorowych i rastrowych interfejsu API. Nie widzę, w jaki sposób mogą wygenerować wadę.

Podsumowując: nie jestem w stanie zidentyfikować źródła problemu. Czy możesz podzielić się przykładem, który jest problematyczny? Nawet jeśli zostanie zdegradowany, lub przez prywatną wiadomość...

Pozdrowienia.

4 polubienia

Bardzo dziękuję za te odpowiedzi.

Tak więc błąd różni się w zależności od zespołów i części.
Waha się to od 0,5 do 1,5 mm.
W moim przypadku niekoniecznie jest to ważne, ponieważ moje wartości wracają do cm.

Moje pytanie dotyczyło głównie lepszego zrozumienia kodu i ewentualnego poprawienia go, jeśli było to wykonalne. Więc nic koniecznego.

Nadal umieszczam zespół + części ze szkicem 3D + współrzędnymi systemu wygenerowanymi przez makro, jeśli chcesz spojrzeć.

Dzięki za informację :slight_smile:

ENCOMBREMENT.rar TESTOWY (1.1 MB)

1 polubienie

Świetna robota @m_blt , jak zawsze.
I myślałem, że nigdy nie będę musiał używać " BoundingBox " aż do teraz... Trafiam na klienta, powiedzmy... Wybredny.
Twoje makro jest więc na czasie. Dziękuję :index_pointing_at_the_viewer: :+1: :+1: :index_pointing_at_the_viewer:

2 polubienia

Witam @Maclane i dziękuję za komplement...
Zwróćcie jednak uwagę na problem precyzji, który poruszył @MLG w swoim ostatnim przesłaniu.
Zauważyłem anomalię, ale nie mogłem zidentyfikować, czy to SW, czy makro jest winne.

3 polubienia

Witam;
Jest to powtarzający się problem ze splajnami, Solidworks bierze pod uwagę tylko punkty, a nie samą krzywą, więc myślę, że funkcja " GetExtremePoint() " robi to samo (jak sugeruje jej nazwa).

Ze swojej strony pozwoliłem sobie zmodyfikować Twoje makro, dodając właściwości do dokumentu z opcją ich zarejestrowania (lub nie) we wszystkich konfiguracjach.
Z drugiej strony szukam sposobu na dodanie wymiarowania do szkicu 3D.

Nie przyjrzałem się jeszcze pojęciu związanemu z przyciskiem " Usuń ", ale myślę, że zmieniając nazwy funkcji " 3Dsketch " i " Układ współrzędnych " w bardziej wyraźny sposób (np. " BoundingBox_3D " i " BoundingBox_XYZ "), łatwiej będzie je usunąć, a nawet usunąć wszystkie funkcje (pozostałości) o tych samych nazwach (+licznik).

Pozdrowienia.

3 polubienia

Witam @MLG

Być może wartości będą dokładniejsze, gdy wszystkie ustawienia jakości zostaną wymaksowane, w opcjach dokumentu?

1 polubienie

Cze wszystkim
Różnica jest naprawdę minimalna, ale rzeczywiście jest obecna.
Mając ręcznie wymienione dokumenty, a niektóre z nich korzystały z tego makra, otrzymaliśmy różne dane wyjściowe, stąd moje pytanie...
A w przypadku splajnów unikamy pracy z nimi, aby nie mieć tego rodzaju problemów.

Cześć wszystkim
HOP, oto wracam do tego tematu! :slight_smile:
Makro działa dobrze, ale napotykam problem.
Wyjaśnienia:

Makro zostało użyte do zdefiniowania sześcianu 3D, co pozwoliło mi na pobranie wartości footprintów mojego zespołu zgodnie z precyzyjną orientacją. Za ten grosz i WIELKIE PODZIĘKOWANIA dla @m_blt oraz dla wszystkich, którzy przyczynili się do powstania tego postu :+1:.

Moje zespoły mają podzespoły uszczelniające (poniżej w kolorze niebieskim) do mocowania produktu do podłogi. W moim makrze usunąłem te podzespoły tak, że miałem tylko część nad ziemią teraźniejszości. Mam jednak podzespoły w uszczelnieniu bezpośrednim (poniżej na czerwono), tzn. występują poniżej i powyżej poziomu 0 (poniżej bez możliwości podziału/rozdzielenia:

Chciałbym wiedzieć, czy możliwe jest dodanie do formularza użytkownika wyboru płaszczyzny poziomu 0 (płaszczyzny lub powierzchni części) w celu określenia najniższej płaszczyzny sześcianu 3D? Podzespoły w uszczelnieniu bezpośrednim (w kolorze czerwonym) nie mogą zostać usunięte, ponieważ są używane do definiowania szerokości sześcianu:

Wybór planu poziomu 0 musiałby zatem zdefiniować niską płaszczyznę sześcianu, a ślad długości/szerokości/wysokości musiałby być zdefiniowany tylko dla wszystkiego powyżej poziomu 0, bez uwzględnienia tego, co znajduje się poniżej.

Mam nadzieję, że jest to zrozumiałe, bo nie jest łatwo to wytłumaczyć :sweat_smile:

Witaj MLG,

Rok później, wracając do sześcianu... :wink:
image

Zasada przetwarzania makr opiera się na przechodzeniu przez drzewo złożenia w celu znalezienia komponentów, które ograniczają wymiary sześcianu. Uwzględnienie planu, który wycina pewne komponenty, aby wykluczyć niektóre z nich, wydaje się skomplikowane na pierwszy rzut oka.

Chyba że...
Wskazówka: Powinno to być możliwe, jeśli ta płaszczyzna " Poziomu 0 " jest płaszczyzną odniesienia do tworzenia sześcianu (pierwsza płaszczyzna wybrana w makrze), lub w najgorszym razie równoległą do jednej ściany przyszłego sześcianu.
Musisz wybrać tę " ograniczającą " płaszczyznę (Poziom 0) oprócz dwóch elementów używanych do orientowania ścian sześcianu, a nie brać pod uwagę tego, co jest pod spodem (która strona jest poniżej?).
Zadowalające?

4 polubienia

Po powrocie do domu, przepraszam, rozpocząłem temat i uciekłem na coś innego, jak niegrzeczny facet!!

@m_blt , mieliśmy w wyborze bok cebuli, orientację sześcianu i krawędź nadającą pionowość.
Czy możliwe jest posiadanie dodatkowo w pierwszym zaborze płaszczyzny, która byłaby na poziomie 0 i tym samym wszystko, co znajdowałoby się pod tą płaszczyzną , nie byłoby brane pod uwagę w definicji sześcianu?

1 polubienie