| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | |  | SOLIDWORKS Schweißkonstruktion, ein Seminar am 29.01.2026
|
|
Autor
|
Thema: SWX 2008 Skizzen per Makro Färben (2736 mal gelesen)
|
oeNkraD Mitglied

 Beiträge: 29 Registriert: 30.09.2010
|
erstellt am: 30. Sep. 2010 15:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich möchte über ein Makro die Farbe einer Skizze ändern, dazu hab ich bereits ein Makro geschrieben, dass die Skizze sozusagen in die aktuelle Auswahl hebt und nebenbei umbenennt. Das besondere an der Skizze ist, dass keine Features auf sie verlinkt sind, sie also keine Geometrie bildet, sondern einfach nur Linien und Kurven darstellt. Nun hab ich leider keine Ahnung, wie man diese Skizze per API irgendwie Umfärben kann... direkt in SWX hab ich ja per Rechtsklick auf die Skizze und "Eigenschaften" die Möglichkeit über "Farbe" der Skizze eine Farbe zuzuweisen - nur geht das auch über die API? Hat da jemand eine Idee?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oeNkraD Mitglied

 Beiträge: 29 Registriert: 30.09.2010
|
erstellt am: 01. Okt. 2010 09:19 <-- editieren / zitieren --> Unities abgeben:         
durch aufzeichnen eines Makros bin ich an die SelectedFeatureProperties gelangt. Aber irgendwie passiert da an der Farbe gar nichts, wenn ich die auf skizzen anwende. Lediglich den Namen und den Unterdrückungsstatus kann ich darüber ändern... Hat niemand eine Idee, wie das gehen könnte? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 01. Okt. 2010 09:35 <-- editieren / zitieren --> Unities abgeben:          Nur für oeNkraD
Versuche es mal damit: (Aus der API-Hilfe) Code:
Dim instance As ISketchSegment Dim value As Integer instance.Color = value value = instance.Color
Im "ISketchSegment" gibt es ein Property "Color"... ich hab es aber nicht ausprobiert.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oeNkraD Mitglied

 Beiträge: 29 Registriert: 30.09.2010
|
erstellt am: 01. Okt. 2010 09:52 <-- editieren / zitieren --> Unities abgeben:         
Auch aus der API - Hilfe: Zitat: Sketch segment color is only supported in drawing documents.
Ich befinde mich nur leider nicht in der Drawing Umgebung. Oder gibt es da möglichkeiten das zu umgehen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 01. Okt. 2010 10:08 <-- editieren / zitieren --> Unities abgeben:          Nur für oeNkraD
Ah, ok... Aber der Makro-Recorder zeichnet doch alles auf? Code:
Dim swApp As ObjectDim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("Arc126", "SKETCHSEGMENT", 0.05153814528614, 0.130432362461, 0, False, 0, Nothing, 0) Part.SetLineColor -1 Part.SetLineColor 32896 Part.SetLineColor -1 End Sub
Jetzt musst Du eben wissen, WELCHE Skizzenelemente Du einfärben möchtest! Das Element "Arc126" musst du nun per Code herausfinden: Zusammengewürfelt um dir eine gobe Idee zu geben wie es gehen könnte:
Code: Dim Part As Object Set Part = swApp.ActiveDocDim SelMgr As Object 'jaja, nicht sauber, ich weiss! ;-) Set SelMgr = Part.SelectionManager Dim nSelCount As integer nSelCount = SelMgr.GetSelectedObjectCount 'Zählt die selektierten Elemente ReDim CompArray(nSelCount - 1) dim boolstatus as boolean If nSelCount <> 0 Then For i = 0 To (nSelCount - 1) ' geht alle selektiere Elemente durch und weisst die Farbe "32896" zu boolstatus = swModel.Extension.SelectByID2(CompArray(i), "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0) ' Comparray muss noch irgendwo definiert werden Part.SetLineColor 32896 next end if
So in etwa KÖNNTE es gehen... ist nur zusammengestückelt. So wie das Oben geschrieben ist, wird es sicher noch nicht funktionieren.
[Diese Nachricht wurde von GDawg am 01. Okt. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oeNkraD Mitglied

 Beiträge: 29 Registriert: 30.09.2010
|
erstellt am: 01. Okt. 2010 10:31 <-- editieren / zitieren --> Unities abgeben:         
Grandios, hab wohl den Boolstatus unterschätzt... bzw. Ignoriert... So ist das als Neuling *g*
Aber vielen Dank funktioniert jetz einwandfrei. Ich modifizier meinen code noch ein wenig und stell ihn dann mal zur Verfügung 
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oeNkraD Mitglied

 Beiträge: 29 Registriert: 30.09.2010
|
erstellt am: 01. Okt. 2010 10:57 <-- editieren / zitieren --> Unities abgeben:         
Mein erstes Makro und mein erster Ausflug in VB... Es funktioniert, auch wenn's nicht professionell wirken sollte Code: ' ****************************************************************************** ' Makro benennt Skizzen in einem Bauteil mit dem eingegebenen Präfix und _ sowie fortlaufennder Nummerierung um und Färbt die Linien ein, um sie besser hervorzuheben. ' Dabei werden nur Skizzen betrachtet, auf die keine Geometrie referenziert ist. ' Makro erstellt am 30.09.2010 von Alexander Singer ' ******************************************************************************Const swDocASSEMBLY = 2 Sub Main() Dim Part As Object Dim Feature As SldWorks.Feature Dim Sketchname As String Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim i As Integer Dim Kindfeat As SldWorks.Feature Dim Kindarr As Variant Dim Kind As Variant Dim ID As String Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set Part = swApp.ActiveDoc swModel.ClearSelection2 True ID = InputBox("Präfix für Skizzen: ") i = 0 If Part Is Nothing Then MsgBox ("Kein Bauteil geöffnet") End End If If Part.GetType() = swDocDRAWING Then MsgBox ("Das Makro funktioniert nur mit Bauteilen") End End If ' das erste Feature im Part suchen Set Feature = swModel.FirstFeature ' dann eine Schleife über alle Feature While Not Feature Is Nothing If Feature.GetTypeName = "ProfileFeature" Or _ Feature.GetTypeName = "3DProfileFeature" Then Kindarr = Feature.GetChildren If Not IsEmpty(Kindarr) Then For Each Kind In Kindarr Set Kindfeat = Kind If Kind.GetTypeName = "ProfileFeature" Or _ Kind.GetTypeName = "3DProfileFeature" Then ' selektieren Part.SelectByID Feature.Name, "SKETCH", 0, 0, 0 ' umbenennen i = i + 1 Sketchname = ID & "_" & Format(i, "0000") ' einfärben boolstatus = swModel.Extension.SelectByID2(Feature.Name, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0) Part.SetLineColor 16711935 ' => rosa (damit man die Linien deutlich erkennt!) Feature.Name = Sketchname Feature.Description = Sketchname ' doppelte Wertzuweisung, um sicherzustellen, dass auch in SW richtig umbenannt wurde. Ab und an funktioniert das sonst nicht richtig... Feature.Name = Sketchname Feature.Description = Sketchname End If Next Kind Else ' selektieren Part.SelectByID Feature.Name, "SKETCH", 0, 0, 0 ' umbenennen i = i + 1 Sketchname = ID & "_" & Format(i, "0000") ' einfärben boolstatus = swModel.Extension.SelectByID2(Feature.Name, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0) Part.SetLineColor 16711935 ' => rosa (damit man die Linien deutlich erkennt!) Feature.Name = Sketchname Feature.Description = Sketchname ' doppelte Wertzuweisung, um sicherzustellen, dass auch in SW richtig umbenannt wurde. Ab und an funktioniert das sonst nicht richtig... Feature.Name = Sketchname Feature.Description = Sketchname End If End If Set Feature = Feature.GetNextFeature() Wend swModel.ClearSelection2 True If Not i = 1 Then MsgBox ("Es wurden " & i & " Skizzen umbenannt") Else MsgBox ("Es wurden keine Skizzen ohne abgeleitete Features zum umbenennen gefunden") End If End Sub
Wer Fehler, Kritiken, Ergänzungen hat immer her damit  Mach mich jetz noch an die erkennung von mehreren Skizzensegmenten in einer Skizze (bisher nur Skizzen mit je einem Segment) Zur ermittlung des RGB Codes hab ich ein nettes Tool gefunden, vielleicht dem ein oder anderen noch nicht bekannt: http://www.flazh.de/pix-color-picker.htm Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oeNkraD Mitglied

 Beiträge: 29 Registriert: 30.09.2010
|
erstellt am: 04. Okt. 2010 07:27 <-- editieren / zitieren --> Unities abgeben:         
|

| |
oeNkraD Mitglied

 Beiträge: 29 Registriert: 30.09.2010
|
erstellt am: 05. Okt. 2010 10:15 <-- editieren / zitieren --> Unities abgeben:         
dazu ist mir ein (vielleicht) einfacherer Weg eingefallen: ich kann ja so ziemlich überall Skizzen per Makro aufrufen und die segmente selektieren (sketchmanager definieren und mit .insertsketch true Skizze aufrufen) Wie kann ich nun in einer geöffneten Skizze die Linienfarbe ändern? Der Makrorecorder zeigt den Befehl .selectedFeatureProperties .... dieser tut aber ausgeführt nix der gleichen... mit instance.color komm ich auch nicht weiter für baugruppen wird übrigens in der obigen variante der Fehler "Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht" und der eintrag mit dem Part.SetLinecolor ... ist markiert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |