| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
Autor
|
Thema: VBA-Tool zum Setzen der Einheiten ? (2225 mal gelesen)
|
Lueghi Mitglied Admin für alle Systeme ....
 
 Beiträge: 435 Registriert: 01.07.2005 CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO PDM...: PRO.FILE 8.6 ERP...: proAlpha 6.2e / 7.1 BS....: Win10, HP ZBook G5
|
erstellt am: 02. Dez. 2009 18:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo SolidWorks-Profis, suche ein paar Codezeilen, um die Einheiten der Masseeigenschaften per Batchlauf verändern zu können. Wir wollen die Toolboxteile in ein PDM importieren. Das PDM erwartet als Mengeneinheit kg, ccm, qcm; die ganzen Toolboxteile arbeiten aber mit g, cmm, qmm ... Ich möchte das ungerne alles von Hand ändern . Hat da jemand eine Idee? Gruß Stefan ------------------ Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 03. Dez. 2009 08:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Lueghi
Hallo Stefan, nicht, dass ich meinen Teil schwerfällige PDM Systeme nicht auch schon kennengelernt hätte, aber wäre es nicht viel einfacher, dem PDM bei den Importroutinen beizubringen, die Werte einfach durch 1000 zu teilen oder (fast undenkbar) vorher in die Masseeigenschaften reinzuschauen und die einfach richtig auszulesen? Statt hunderte (tausende? Abertausende?) Dokumente zu ändern (eigentlich also sogar versionspflichtig), neu zu speichern und neu einzuchecken wäre es doch eine Überlegung wert, eine Routine für den Import zu ändern oder zu schreiben, selbst wenn man dafür einen externen Berater für XZY Euros pro Tag braucht. Wenn es darum geht, dass die clevere Importschnittstelle vor dem Einlesen ein benutzerdefiniertes Makro in SolidWorks ausführen kann (also im Prinzip das macht, was ich oben beschrieben habe) würde ich bei IModelDocExtension::SetUserPreferenceInteger schauen mit den Parametern swUnitsMassPropMass, swUnitsMassPropVolume und swUnitsMassPropLength Fertiges Makro hab ich dafür gerade nicht rumfliegen. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lueghi Mitglied Admin für alle Systeme ....
 
 Beiträge: 435 Registriert: 01.07.2005 CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO PDM...: PRO.FILE 8.6 ERP...: proAlpha 6.2e / 7.1 BS....: Win10, HP ZBook G5
|
erstellt am: 03. Dez. 2009 10:40 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von StefanBerlitz:... nicht, dass ich meinen Teil schwerfällige PDM Systeme nicht auch schon kennengelernt hätte, aber wäre es nicht viel einfacher, dem PDM bei den Importroutinen beizubringen, die Werte einfach durch 1000 zu teilen oder (fast undenkbar) vorher in die Masseeigenschaften reinzuschauen und die einfach richtig auszulesen? Statt hunderte (tausende? Abertausende?) Dokumente zu ändern (eigentlich also sogar versionspflichtig), neu zu speichern und neu einzuchecken wäre es doch eine Überlegung wert, eine Routine für den Import zu ändern oder zu schreiben, selbst wenn man dafür einen externen Berater für XZY Euros pro Tag braucht.
Da ist auch was dran, aber wir fangen gerade erst mit SolidWorks an und unsere Vorlagen sind schon richtig eingestellt. Es geht mir "nur" um die Toolboxteile (Normteile etc.) die wir "erstmalig" ins PDM einlesen wollen/müssen. Da ist also noch nichts mit Revisionspflicht :D . Zitat: Original erstellt von StefanBerlitz: Wenn es darum geht, dass die clevere Importschnittstelle vor dem Einlesen ein benutzerdefiniertes Makro in SolidWorks ausführen kann (also im Prinzip das macht, was ich oben beschrieben habe) würde ich bei IModelDocExtension::SetUserPreferenceInteger schauen mit den Parametern swUnitsMassPropMass, swUnitsMassPropVolume und swUnitsMassPropLength...[/i]
Ich denke, das ist der Hinweis und wird mir weiterhelfen ... DANKE. ------------------ Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 03. Dez. 2009 11:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Lueghi
|
Lueghi Mitglied Admin für alle Systeme ....
 
 Beiträge: 435 Registriert: 01.07.2005 CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO PDM...: PRO.FILE 8.6 ERP...: proAlpha 6.2e / 7.1 BS....: Win10, HP ZBook G5
|
erstellt am: 03. Dez. 2009 15:35 <-- editieren / zitieren --> Unities abgeben:         
Danke für den Hinweis. Ich scheitere schon an folgender Zeile: bret = ModelDoc.SetUserPreferenceIntegerValue(swUnitSystem, swUnitSystem_Custom) Aber irgendwie sind bei mir die Variablen swUnitSystem, wUnitsMassPropVolume etc. leer obwohl ich die swConst geladen habe. Dann gibt mir die Funktion Get... bzw. Set... auch nichts zurück. Fehlt mir da noch irgendwas? Sorry für die Nachfrage, aber ich habe schon öfter in VB programmiert, nichts Großes aber einige kleine Sachen oder mal ein vorhandenes Makro abgeändert. Dabei glaubte ich zumindest bis jetzt, dass ich das Grundprinzip verstanden hätte . ------------------ Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
manoc Mitglied Konstrukteur, CAD-Admin, Berechnungsingenieur
 
 Beiträge: 104 Registriert: 06.12.2004
|
erstellt am: 04. Dez. 2009 08:55 <-- editieren / zitieren --> Unities abgeben:          Nur für Lueghi
|
Lueghi Mitglied Admin für alle Systeme ....
 
 Beiträge: 435 Registriert: 01.07.2005 CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO PDM...: PRO.FILE 8.6 ERP...: proAlpha 6.2e / 7.1 BS....: Win10, HP ZBook G5
|
erstellt am: 04. Dez. 2009 23:12 <-- editieren / zitieren --> Unities abgeben:         
|
Lueghi Mitglied Admin für alle Systeme ....
 
 Beiträge: 435 Registriert: 01.07.2005 CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO PDM...: PRO.FILE 8.6 ERP...: proAlpha 6.2e / 7.1 BS....: Win10, HP ZBook G5
|
erstellt am: 14. Dez. 2009 12:31 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Lueghi: Ja, das ist genau das, was ich brauche. Aber die Links zu den ZIP-Dateien funktionieren nicht mehr .... . Hast Du davon vielleicht noch was auf Deiner Platte rumliegen ?[/B]
Darf ich mich noch einmal in Erinnerung bringen .... ------------------ Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lueghi Mitglied Admin für alle Systeme ....
 
 Beiträge: 435 Registriert: 01.07.2005 CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO PDM...: PRO.FILE 8.6 ERP...: proAlpha 6.2e / 7.1 BS....: Win10, HP ZBook G5
|
erstellt am: 08. Jun. 2010 12:36 <-- editieren / zitieren --> Unities abgeben:         
Nach langem Suchen habe ich es endlich geschafft  . Ich hatte eine alte Version der swconst und die kannte die "neueren" Kontanten noch nicht .... Für jeden, der mal ein ähnliches Problem hat, hier mein verwendeter Code:
Code: Public swApp As SldWorks.SldWorks Public ModelDoc As SldWorks.ModelDoc2 Public swDocExt As SldWorks.ModelDocExtension Public swMass As SldWorks.MassProperty Dim parttype As Variant Dim test As Variant Set swApp = CreateObject("SldWorks.Application") Set ModelDoc = swApp.ActiveDoc Set swDocExt = ModelDoc.Extension ' Prüfen, ob es sich um ein Part handelt / check, if the doc is a part parttype = ModelDoc.GetType() If parttype <> 1 Then MsgBox "Tut mir leid, das funktioniert nur bei Teilen" Exit Sub End If ' Testen auf Einheiten-System, sonst setzen auf Benutzerdefiniert test = swDocExt.GetUserPreferenceInteger(swUnitSystem, swDetailingNoOptionSpecified) If test <> swUnitSystem_Custom Then test = swDocExt.SetUserPreferenceInteger(swUnitSystem, swDetailingNoOptionSpecified, swUnitSystem_Custom) End If ' Testen auf Masse-Einheit Länge, sonst setzten auf cm test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropLength, swDetailingNoOptionSpecified) If test <> swCM Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropLength, swDetailingNoOptionSpecified, swCM) End If ' Testen auf Masse-Einheit Gewicht, sonst setzen auf kg test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropMass, swDetailingNoOptionSpecified) If test <> swUnitsMassPropMass_Kilograms Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropMass, swDetailingNoOptionSpecified, swUnitsMassPropMass_Kilograms) End If ' Testen auf Masse-Einheit Volumen, sonst setzen auf cm³ test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropVolume, swDetailingNoOptionSpecified) If test <> swUnitsMassPropVolume_Centimeters3 Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropVolume, swDetailingNoOptionSpecified, swUnitsMassPropVolume_Centimeters3) End If
Vielleicht kann es mal jemand gebrauchen.------------------ Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |