Dołączam ac-cobra, w jakim celu? Dzieje się to raczej na odwrót, a przede wszystkim skomplikuje publikację planów, inaczej czy modelowanie odgórne nie wystarczy!?
Tak, redukcja wagi jest częścią celu.
Chcę również mieć niezależny plik "kompletnie zmontowanego obiektu", kompletny, ale niezależny od zewnętrznych odniesień. Ułatwia to, udostępnia, przechowuje i przynajmniej zapewnia, że obiekt może być wykorzystany bez względu na wszystko.
W moim idealnym świecie zaprogramowałbym makro, które po prostu tworzyłoby pusty plik PRT z otwartego złożenia, wyodrębniało drzewa każdej części w zespole i kopiowało je do PRT (zmieniając nazwy elementów, jeśli to konieczne), ale modyfikując lokalny początek każdej części przez początek zespołu, aby upewnić się, że ich umieszczenie jest zgodne ze złożeniem.
Jest to oddzielna część, którą zapisujesz poza zespołem, którą możesz przenieść, a następnie połączenia zostaną przerwane...
Więc przede wszystkim dziękuję za sztuczkę, o której nie wiedziałem i która nieuchronnie mi się kiedyś przyda.
Niestety nie odpowiada na prośbę, ale rozumiem zamieszanie, ponieważ słowo "scalić", którego użyłem, nie jest najbardziej odpowiednie. Musieliśmy zrozumieć słowo "grupa".
Jestem trochę zagubiony, bo tak naprawdę nie rozumiem, czy mieć część z bryłami, czy nie, bo nie da się jej zmodyfikować, a wizualizacja będzie taka sama jak plik zapisany w prt.
Czyli przede wszystkim mój błąd w rozpoznawaniu funkcji jest spowodowany z przybornika. Jeśli wykluczę je z kredytu, uznanie idzie dobrze. Szkoda, ale hej, powiedzmy, że już nie jest źle.
Tyle tylko, że widocznie trzeba ręcznie uruchomić rozpoznawanie funkcji dla każdego importowanego obiektu, jeden po drugim... Nie możemy zrobić wielokrotnego rozpoznawania?
Prawdopodobnie wyraziłem się źle, ale żeby było jaśniej, powiedzmy, że chcę tego, co robi "zarejestruj ASM jako PRT", z wyjątkiem tego, że nie chcę musieć przechodzić przez bezużyteczne rekonwersje konwersji geometrii, ani (de!!) rozpoznawanie funkcji. Chcę zachować funkcje, relacje, cytaty, oryginalne nazwy. Głupie klonowanie oryginalnego drzewa z każdego pokoju* w innym pokoju wspólnym, wiesz. (jeszcze bardziej qd widzę, ile czasu zajmuje rozpoznanie funkcji i że musisz go ponownie uruchomić dla każdej z części..., a następnie zmienić ich nazwy...). W drzewie świetlic drzewa pokoi powinny być zhierarchizowane w poszczególnych folderach z nazwami pomieszczeń.
Bylibyśmy bardziej przy narzędziu "dołącz", ale bez scalania, tylko dodawanie każdego drzewa*, tak jak jest, jedno po drugim w nowej części docelowej. W rezultacie konkatenacja bez konwersji. I zawsze, najlepiej, w oddzielnych folderach (w featureManager eh).
Wydaje się, że tylko makro będzie w stanie spełnić te wymagania
*Kiedy mówię o "oryginalnym drzewie", mam na myśli "wszystkie funkcje, plany itp., które składają się na pomieszczenie".
W rzeczywistości to, czego chcesz, to praca nad wieloma funkcjami twoich części zespołu w części, nie wiem, czy dobrze się wyraziłem
W rzeczywistości chciałbym, aby wszystkie części zespołu były "osadzone" tak, jak są w jednym PRT.
Jedyna różnica widoczna w drzewie polega na tym, że żółta ikona "części" staje się niebieską ikoną "folderu".
I rzeczywiście, pozwoliłoby to na edycję wszystkich "części" (ich funkcji pogrupowanych w folderach) z pokoju wspólnego.
Nie sądzę, żeby było to
możliwe
Jedynym sposobem jest przewidywanie i budowanie w pomieszczeniu z wieloma ciałami i nie pomoże ci to w zakresie odciążenia części w porównaniu z montażem, ponieważ to funkcje są ciężkie ...
Powodzenia, bo będziesz potrzebować
trochę
Witam
Zasadniczo to, co chciałbyś zrobić, to użyć funkcji " wstaw część ", ale zamiast części, byłby to zespół (niemożliwe z tym poleceniem) i móc użyć opcji " propaguj z oryginalnej części". Zaznaczam, że aby odzyskać drzewo konstrukcyjne, należy zerwać połączenie z oryginalną częścią.
Z wyjątkiem makra, które brałoby każdą część zespołu jeden po drugim i używało tego polecenia, nie widzę.
Powodzenia
Witam @Sylk
Cały problem tkwi w tych dwóch słowach: wyodrębnij i kopiuj. Innymi słowy: kopiuj/wklej...
Skanowanie drzewa komponentów zespołu w celu zidentyfikowania części " źródłowych " jest łatwe do wyobrażenia, ale o ile mi wiadomo, nie ma procedury kopiowania/wklejania drzewa budowania każdej części " źródłowej " do tej samej części " docelowej ".
Jedynymi elementami, które mogą być " kopiowane " z jednej części do drugiej, są szkice, krzywe, powierzchnie i obiekty, a nie elementy geometryczne.
W przypadku braku konkatenacji w części, można zbadać inną drogę, która pozwala na zredukowanie kopii zapasowej do jednego pliku: wirtualizacja wszystkich komponentów, tj. zintegrowanie ich z dokumentem złożenia.
Logika spełnia Twoje oczekiwania, nawet jeśli dokumentem końcowym jest zespół, a nie część.
Funkcja " Utwórz wirtualny " istnieje w interfejsach API SolidWorks. Połączenia zwirtualizowanych części z oryginalnymi częściami są zerwane, ale drzewo budowania jest zachowywane.
Pozdrowienia.
Witaj @Rim-b
Doskonałe!! Ale nie idealnie... To jest dokładnie oczekiwany efekt końcowy, z wyjątkiem umiejscowienia.
Wstawiam część arkusza blachy do głównej części arkusza blachy, ale nie mogę jej ustawić zgodnie z potrzebami. Czy możliwe jest obracanie wstawionej blachy, czy jesteśmy ograniczeni do tłumaczenia tylko podczas wstawiania?
Początkowy pomysł przejścia przez montaż polegał głównie na uproszczeniu pozycjonowania, zanim wszystko skończy się pożyczką.
Witam
Nie, istnieją funkcje montażowe (przesuwanie z wiązaniami).
Ale szczerze mówiąc, to fabryka gazu, widziana z mojego okna, to, co próbujesz zrobić.
Musisz wybrać odpowiedni tryb przy uruchamianiu (montaż lub część w części), ponieważ "konwersja" później to wiele godzin pracy. Nie jestem nawet pewien, czy makro może to zrobić bez generowania błędów pozycjonowania, a przynajmniej będzie musiało poświęcić godziny na tego typu rozwój.
Często korzystam z funkcji insert part i potwierdzam twój dir cyril, rzecz skacze przy najmniejszej zmianie w drzewie sw nie lubi się zbytnio bawić paskiem odzyskiwania,
Nie sądzę też, żeby dla kopii funkcji z makrem można było zmodyfikować otwór lub usunięcie materiału ślepego lub przez wszystko bez wpływu na inne ciała!
Witam
Wstawianie części w części działa. Z drugiej strony, jeśli masz więcej niż kilkanaście części, zarządzanie nimi może bardzo szybko stać się kłopotliwe. Jeśli chcesz, aby to zadziałało, najlepszą rzeczą do zrobienia jest prawdopodobnie nie używanie wiązań podczas wstawiania części, a jedynie pozycji.
Możliwym rozwiązaniem byłoby być może zgrupowanie elementów, które pasują do siebie (a więc tworzenie podczęści), a następnie włożenie tuzina elementów do pokoju.
Uwaga: Jeśli chodzi o odbudowę, w każdym przypadku może to być trudne do opanowania.
Tak, potwierdzam i jest to dość karzące, gdy klient wysyła Ci ASM na przykład w formacie STEP lub innym neutralnym formacie, aby zmusić Cię do przeprowadzenia symulacji RDM. Nie wspominając o tym, że tracisz wszystkie ograniczenia w tym procesie.
Powodzenia
Witam.
Dziękuję wszystkim za bardzo pouczające odpowiedzi!
Tak więc, przetestowałem wstawienie części do części, plik waży 2 razy mniej niż zespół z tą samą częścią wirtualną.
Fakt, że waga przechodzi od podwójnej do pojedynczej, nie jest bez znaczenia.
Czytając ten temat, mam jednak wrażenie, że wirtualizacja części w zespole pozostaje zdecydowanie najprostszym, najbardziej praktycznym i elastycznym rozwiązaniem.
Szkoda, że plik waży dwa razy więcej...
Sztuczka z siusianiem jest rzeczywiście interesującą możliwością, @froussel
Sprawdzając w lapi, wydaje mi się, że jest grywalny:
-
Przeglądaj komponenty jeden po drugim
-
Umożliwia pobranie położenia i orientacji komponentu względem początku układu współrzędnych zespołu.
-
Wstaw komponent do części i przerwij połączenie.
-
Wykrywanie nowych ciał (trochę ból głowy!) .
-
Zastosuj orientację i przemieszczenie do tych nowych obiektów
Zrywając ogniwo, funkcje wstawionej części są odzyskiwane w drzewie, cud polega na tym, że SW stosuje je tylko do nowych ciał (modyfikuje definicję i obszary działania wszystkich ciał do automatycznego😀 wyboru), co pozwala uniknąć problemu, o którym wspomniałem wcześniej, więc ogniwo jest łamane w drzewie i stabilne,
Jedynym bimolem, jaki znajduję, jest to, że ciała te są ustawione w stosunku do początku części, a nie przez oddziaływania naprężeń.
Nie mówiąc już o tym, że struktura drzewa będzie bardzo, bardzo długa w zależności od liczby komponentów i ich złożoności
W przypadku załączenia, opis punktów
(Podziękowania dla @Rim-B , który wspomniał o głównej funkcji)
Assemblage1.zip (355,9 KB)
Option Explicit
Dim swApp As Object
Dim swmodel As ModelDoc2
Dim swpart As PartDoc
Dim swassembly As AssemblyDoc
Dim swMathUtils As SldWorks.MathUtility
Dim featmgr As FeatureManager
Dim pbodies As Variant
Dim selmgr As SelectionMgr
Const PI As Double = 3.14159265359
Sub main()
Set swApp = Application.SldWorks
Set swMathUtils = swApp.GetMathUtility
Set swassembly = swApp.ActiveDoc
Set swmodel = swApp.NewDocument("C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2022\templates\Pièce.PRTDOT", 0, 0, 0)
Set swpart = swmodel
Set featmgr = swmodel.FeatureManager
Set selmgr = swmodel.SelectionManager
Dim comp As Component2
Dim vcomp As Variant, vc As Variant
vcomp = swassembly.GetComponents(False)
For Each vc In vcomp
Set comp = vc
Dim pos As Variant
pos = get_position(comp)
pbodies = swpart.GetBodies2(0, False)
swpart.InsertPart3 comp.GetPathName, 512, comp.ReferencedConfiguration()
select_bodies get_bodies(swpart, pbodies)
featmgr.InsertMoveCopyBody2 0, 0, 0, 0, 0, 0, 0, pos(5), pos(4), pos(3), False, 1
select_bodies get_bodies(swpart, pbodies)
featmgr.InsertMoveCopyBody2 pos(0), pos(1), pos(2), 0, 0, 0, 0, 0, 0, 0, False, 1
Next
End Sub
Function get_position(comp As Component2) As Variant
Dim pos(5) As Variant
Dim swTransform As SldWorks.MathTransform
Set swTransform = comp.Transform2
Dim r11 As Double, r12 As Double, r13 As Double
Dim r21 As Double, r22 As Double, r23 As Double
Dim r31 As Double, r32 As Double, r33 As Double
Dim r41 As Double, r42 As Double, r43 As Double
Dim r44 As Double
r41 = swTransform.ArrayData(9)
r42 = swTransform.ArrayData(10)
r43 = swTransform.ArrayData(11)
r44 = swTransform.ArrayData(12)
pos(0) = r41 * r44
pos(1) = r42 * r44
pos(2) = r43 * r44
Set swTransform = swTransform.Inverse
r11 = swTransform.ArrayData(0)
r12 = swTransform.ArrayData(1)
r13 = swTransform.ArrayData(2)
r21 = swTransform.ArrayData(3)
r22 = swTransform.ArrayData(4)
r23 = swTransform.ArrayData(5)
r31 = swTransform.ArrayData(6)
r32 = swTransform.ArrayData(7)
r33 = swTransform.ArrayData(8)
If r13 < 1 Then
If r13 > -1 Then
pos(3) = atan2(-r23, r33)
pos(4) = asin(r13)
pos(5) = atan2(-r12, r11)
Else
pos(3) = -atan2(r21, r22)
pos(4) = -PI / 2
pos(5) = 0
End If
Else
pos(3) = atan2(r21, r22)
pos(4) = PI / 2
pos(5) = 0
End If
get_position = pos
End Function
Function get_bodies(part As PartDoc, pbodies As Variant) As Variant
Dim cbodies As Variant, bod As Variant, bod1 As Variant
Dim vbodies() As Variant
Dim row As Integer
row = 0
Dim isnew As Boolean
Dim body As Body2
Dim body1 As Body2
cbodies = part.GetBodies2(0, False)
If Not IsEmpty(pbodies) Then
For Each bod In cbodies
isnew = True
Set body = bod
For Each bod1 In pbodies
Set body1 = bod1
If body.Name = body1.Name Then
isnew = False
End If
Next
If isnew = True Then
ReDim Preserve vbodies(row)
Set vbodies(row) = body
row = row + 1
End If
Next
Dim v As Variant
get_bodies = vbodies
Else
get_bodies = cbodies
End If
End Function
Sub select_bodies(bodies As Variant)
Dim seldata As SelectData
Dim bod As Variant
Dim body As Body2
Set seldata = selmgr.CreateSelectData
seldata.Mark = 1
swmodel.ClearSelection2 True
If Not IsEmpty(bodies) Then
For Each bod In bodies
Set body = bod
body.Select2 True, seldata
Next
End If
End Sub
Function atan2(Y As Double, X As Double) As Double
If X > 0 Then
atan2 = Atn(Y / X)
ElseIf X < 0 Then
atan2 = Sgn(Y) * (PI - Atn(Abs(Y / X)))
ElseIf Y = 0 Then
atan2 = 0
Else
atan2 = Sgn(Y) * PI / 2
End If
End Function
Function asin(X As Double) As Double
If Abs(X) = 1 Then
asin = X * PI / 2
Else
asin = Atn(X / Sqrt(1 - X * X))
End If
End Function
<< kod jest pozbawiony obsługi błędów, przetestuj w razie potrzeby, zmodyfikuj szablon ścieżki, API 2022>>