Importieren von Teilen in eine Baugruppe mit demselben Ursprung

Hallo

 

Ich möchte zwei Teile in eine Baugruppe importieren und sicherstellen, dass ihre Herkunft mit der der Baugruppe verwechselt wird.

 

Es ist etwas Einfaches, manuell, aber das Makro, das ich bekomme, nicht...

 

Danke für Ihre Hilfe

 

Code:

Unter-Assemblage()

 

Dossier_dest = "D:\TRAPRO III Projekt\Makrotest\"

 

Legen Sie swApp = Application.SldWorks fest

 

Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SolidWorks 2012\templates\Assemblage.asmdot", 0, 0, 0)

swApp.ActivateDoc2 "Assemblage1", False, longstatus

Set Part = swApp.ActiveDoc

myModelView als Objekt dimmen

Festlegen von myModelView = Part.ActiveView

myModelView.FrameState = swWindowState_e.swWindowMaximized

boolstatus = Part.AddComponent(Dossier_dest & Name & ". SLDPRT", 0, 0, 0)

boolstatus = Part.AddComponent("D:\Projekt TRAPRO III\TRAPRO DESIGN +\01-Technische Bibliothek Ring\Neu\Kronenring 25.SLDPRT", 0, 0, 0)

 

Ende des U-Bootes

Schauen Sie in der API-Hilfe nach (SolidWorks Menü?/API-Hilfe)

Suchen Sie nach dem Befehl AddComponent5

Es gibt Codebeispiele, die Sie verwenden können

3 „Gefällt mir“

Ich sehe den Sinn nicht wirklich, denn wenn Sie importieren und direkt auf OK klicken, werden die Ursprünge zusammengeklebt.

Vielleicht können Sie:

1- Geben Sie den Raum frei

2- Fügen Sie eine Koinzidenzbeschränkung für den Ursprung der Baugruppe und für den Ursprung des Teils hinzu, indem Sie die Option "Achsen ausrichten" aktivieren (ich denke in meinem Kopf).

3- Befestigen Sie das Teil

4- Entfernen Sie die erstellte Beschränkung.

 

Ich möchte diese Frage noch einmal aufgreifen, die nicht als gelöst markiert wurde, weil ich vor einem ähnlichen Problem stehe.

Ich möchte Teile in eine Baugruppe einfügen, indem ich zuerst eine Skizze einfüge (deren Linien als Referenzen für die Baugruppe anderer Teile dienen), und ich kann die beiden Ursprünge nicht zusammenfallen lassen (über die Funktionen AddComponent, AddComponent2 oder sogar AddComponent5).

Nämlich, dass ich auf SolidWorks 2012 bin.

Danke für Ihre Hilfe

Haben Sie sich diesen Link angesehen? http://help.solidworks.com/2012/English/api/sldworksapi/Add_Component_and_Mate_Example_VB.htm

Hallo

Ich hatte diesen Zusammenhang schon früher gesehen, aber meine Versuche waren überhaupt nicht schlüssig. Ich habe jedoch meinen Code so genommen, dass er mit diesem Beispiel übereinstimmt, aber es wird eine Fehlermeldung angezeigt:

"Laufzeitfehler '91':

Variables Objekt oder variabler Block Mit nicht definiert"

Für Zeile 100: matefeature. Name = MateName

Ich habe meinen Code angehängt, wenn er helfen kann, ihn zu verstehen (aber er ist mit einem Benutzerformular verknüpft)


createass.txt

Guten Abend

In den Anhängen finden Sie ein kommentiertes Makro, mit dem Sie zwei Dokumentteile platzieren und eine Einschränkung für die Ursprünge hinzufügen können.

Damit dies für Sie funktioniert, ändern Sie den Pfad zu den Bauteilen, und öffnen Sie eine neue Baugruppe.

Das Makro ist kommentiert, Sie sollten es recht leicht verstehen.

Guter Code.


insertion_pieces.swp
2 „Gefällt mir“

Vielen Dank, ich denke (hoffe ich), dass mich das aus einem schönen Schlamassel herausholen wird!

1 „Gefällt mir“

Hallo

Ja, ich bin es wieder, ich komme zurück, aber tatsächlich ist das Problem nicht gelöst. Ich hatte es schon vor langer Zeit bemerkt, aber ich hatte mich plötzlich an andere Funktionen meines Programms geklammert, es spielte keine Rolle.

Trotz dieses schönen Programms von Yves T. stoße ich immer wieder auf das gleiche Problem: Mein Stück ist immer von der Einfügung an fixiert und fügt dem Ursprung keinen Ursprung hinzu. Egal wie sehr ich versuche, das Stück zu fixieren, das Stück zu befreien, die Linien in alle Richtungen zu drehen, nichts hilft!

Danke für Ihre Hilfe.

Ich hänge mein Makro an, was angesichts der Anzahl der Messungen und Tests, die ich durchgeführt habe, sicherlich nicht sehr klar ist.


createass_v2.txt

Hallo

Wie stellen Sie die Unterhauptparameter bereit?

Sub main(oCabineCode als Zeichenfolge, SelectedFile als Zeichenfolge, TracePath als Zeichenfolge)

Sie haben die Parameter nicht getestet, um sicherzustellen, dass sie einen Wert haben, bevor Sie mit dem Code fortfahren.

Warum sollte swApp während des Programms ein Wert neu zugewiesen werden?

Ohne eine Erklärung Ihrerseits, was Sie dachten, dass Sie damit tun würden:

Set swApp = _
Application.SldWorks

Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SolidWorks 2012\templates\Assemblage.asmdot", 0, 0, 0)
Set swModel = swApp.ActivateDoc2(oCabineCode, False, longstatus)
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized

longstatus = Part.SaveAs3(SelectedFile, 0, 2)

Set Part = swApp.ActivateDoc2(oCabineCode, False, errors)
Dim TmpTitle As String
TmpTitle = swApp.ActiveDoc.GetTitle
swApp.CloseDoc TmpTitle

Ich verstehe nicht, wofür es ist:)

 Ich habe mir Ihren Code etwas genauer angesehen. Es gibt eine ganze Reihe von Fehlern. Gehen Sie zurück zu dem Makro, das ich gepostet habe. Es funktioniert in allen Fällen und für eine Version von SW >2010.

Wenn Sie bereits über die Dateinamen verfügen, die Sie der Assembly hinzufügen möchten, fügen Sie sie entweder in eine globale Variable (Array von String) oder in eine Eigenschaft ein.

Wenn Sie dem Benutzer die Auswahl der einzufügenden Dokumente ermöglichen möchten, verwenden Sie: swApp.GetOpenFileName(). Daraufhin wird der SW OpenFileDialog angezeigt, für den Sie mehrere Optionen angeben können.

Vermeiden Sie es, Variablen erneut zu signieren, wenn sie sich nicht ändern. Hängen Sie swApp so weit wie möglich nicht erneut an swApp an.

Sie können den anderen Variablen einen Wert neu zuweisen.

Vermeiden Sie die Übergabe von Parametern an die Prozedur  Main() . Es ist besser, eine zweite Prozedur zu schreiben, die von Main aufgerufen wird und Parameter hat.

Stil:

Sub Main()

Machen Sie die Berechnung  Param1, Param2,Param3

Ende Sub

Sub FaireLeCalcul( ByVal param1 as blabla, ... )

Ende Sub

Es ist besser lesbar und aussagekräftiger. Es ermöglicht Ihnen auch, Ihren Code besser zu schreiben, ohne durcheinander zu geraten, insbesondere wenn Sie neu in der Programmierung sind.

Für mich funktioniert Ihr Code nicht, weil eine Variable nicht den erwarteten Wert haben sollte. Wenn Sie keine Tests mit String-Variablen durchführen, kann dies gefährlich sein. Eine Variable vom Typ String wird bei der Initialisierung auf "String Empty" gesetzt. Aus diesem Grund testen wir in vielen Programmiersprachen den Wert einer Variablen.

In dem Makro, das ich gepostet habe, habe ich es nicht getan, weil man ein wenig von seinem :)

Herzliche Grüße.

1 „Gefällt mir“

Hallo

Vielen Dank für das Feedback. Ich werde nach und nach die verschiedenen Fragen beantworten, die Sie formuliert haben (gemäß meinen Tests und Modifikationen) und mein Programm erklären.

Wenn ich das Programm starte, habe ich einen UF, der sich öffnet, in dem der itilsator den Namen der Assembly (oCabineCode) eingibt, dann den Ordner, in dem er die Assembly speichern möchte (SelectedFile) und schließlich das Referenzelement dieser Assembly über seinen Pfad (Tracepath). Mit all den durchgeführten Tests weiß ich, dass ich mir über diese verschiedenen Daten keine Sorgen machen muss. Mit einem Klick auf "Baugruppe erstellen" wird dieses Programm gestartet und öffnet somit eine neue Baugruppe, speichert sie unter um ihr den gewünschten Namen zu geben und speichert sie im Zielverzeichnis. Das ist es, was dieses kleine Stück Programm, das Sie gestern in Ihrer ersten Nachricht extrahiert haben, tut. Wenn ich diese Registrierung durchführe, habe ich tatsächlich 2 Baugruppen "AssemblageX" und "oCabineCode", um Probleme zu vermeiden, also schließe ich "AssemblageX".

Trotz des Befehls "Set Part = swApp.ActivateDoc2(oCabineCode, False, errors)" ansonsten lande ich immer noch bei "AssemblageX" als aktivem Teil. Aus diesem Grund weise ich swApp einen Wert neu zu. Es ist auch "einfacher" für mich, da ich meine Baugruppe an ihrem Namen erkennen kann, den ich kenne, während es bei Assemblage"X" komplizierter wird, zumindest scheint es mir.

Ich werde jedoch versuchen, Ihre in der zweiten Botschaft vorgeschlagenen Hinweise zu nutzen, um diesen kleinen Rückschlag zu beheben.

Nochmals vielen Dank für Ihr Interesse.

Nun, ich habe es richtig gehört und versuche, Ihrem Rat zu folgen, ich habe viele Zeilen meines Codes erneut gelesen, überprüft und gelöscht. Ich habe alle Daten meiner String-Variablen überprüft, a priori habe ich auch auf dieser Seite keine Fehler. Mein Teil passt gut in meine Baugruppe, aber wenn ich zur Einschränkung komme, versagt es wieder!

Am Ende erhalte ich den Fehler "438: Eigenschaft oder Methode wird von diesem Objekt nicht behandelt" und wenn ich in der SM-API-Hilfe suche, kann ich keine Hilfe für die Funktion "AddMate5" finden, aber es ist diese Zeile, und es ist die letzte in meinem Code. , die den Fehler verursacht. Die Komponente wird fest hinzugefügt und ich kann immer die UnfixComponent-Methode ausführen, nichts zu tun.

Im schlimmsten Fall mache ich die Manipulation von Hand, das habe ich von Anfang an gemacht, aber es ist ein bisschen ... schmerzhaft.

Hallo

Haben Sie Ihre 3 Pläne sowohl in Ihren Räumen als auch in der Montage??? Ich denke, dein Ursprung liegt am Schnittpunkt der 3 Ebenen!! Warum sehen Sie nicht mit Ihnen den Zwang der Pläne zwischen ihnen, da hätten Ihre Teile den gleichen Ursprung und wären sofort eingeschränkt...

1 „Gefällt mir“

Entschuldigung, AddMate5 ist erst ab dem September 2015 erschienen. Verwenden Sie für SW 2012 AddMate3.

Alle Informationen zur Verwendung der Methode finden Sie in der SW-API-Hilfe.

Hallo

Hier bin ich wieder mit der gleichen Sorge:

Ich bin auf SW2012 und wenn ich mein erstes Teil in die Baugruppe einfüge, ist es fixiert, ich schaffe es, Abhängigkeiten hinzuzufügen, damit die Ursprünge und die Referenzebenen übereinstimmen, aber plötzlich ist es überlastet (es ist unmöglich, die Abhängigkeiten zu aktivieren, da sie auf eine feste Komponente angewendet werden). Ich habe dem Code die folgenden Zeilen hinzugefügt:

Part.FixComponent oder

Part.UnfixComponent

Es ändert sich nichts.

Ich habe es mit der ersten Formel versucht, denn wenn ich eine Makroaufnahme mache, scheint es diejenige zu sein, die den Teil unter SW2012 freigibt UND repariert.

Ich habe es mit dem zweiten versucht, aber es funktioniert auch nicht.

Im Moment läuft mein Programm bis auf diesen Punkt perfekt (also mache ich Pausen, um die ersten Teile jeder Unterbaugruppe, die ich erstelle, manuell freizugeben, und ich mache 7 davon, also ist es ein bisschen schmerzhaft und das Programm verliert an Flüssigkeit).

Wenn du eine Lösung hast, würdest du mir sehr helfen.

Vielen Dank im Voraus und nochmals!

Hallo Möwe,

Wenn es sich bei dem Code immer noch um den Code handelt, der auf Seite 1 dieses Themas angehängt ist, sollten wir meiner Meinung nach stattdessen TraceName & "@" & AssemblyName zu einer Variablen verketten und sie dann aufrufen.

Ich denke, das könnte das Problem erklären. Andernfalls können Sie durch Platzieren eines Stopps im Code und Scrollen von diesem Punkt aus Schritt für Schritt überprüfen, ob das Modell im FeatureManager ausgewählt ist.

boolstatus = Part.Extension.SelectByID2(TraceName & "@" & AssemblyName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.UnfixComponent

 

1 „Gefällt mir“

Es ist immer derselbe Code.

Danke Cyril, das löst mein Problem!

Es fehlte meistens das Inkrement im Namen des Elements nach "TraceName"

boolstatus = Part.Extension.SelectByID2(Ablaufverfolgungsname & "-1@" & AssemblyName, "KOMPONENTE", 0, 0, 0, Falsch, 0, Nichts, 0)
Part.UnfixComponent

Jetzt funktioniert es perfekt, nochmals vielen Dank!