Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  SWX 2008 Skizzen per Makro Färben

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von oeNkraD an!   Senden Sie eine Private Message an oeNkraD  Schreiben Sie einen Gästebucheintrag für oeNkraD

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 30. Sep. 2010 15:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 SWXSolidWorks 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



Sehen Sie sich das Profil von oeNkraD an!   Senden Sie eine Private Message an oeNkraD  Schreiben Sie einen Gästebucheintrag für oeNkraD

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 01. Okt. 2010 09:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von GDawg an!   Senden Sie eine Private Message an GDawg  Schreiben Sie einen Gästebucheintrag für GDawg

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für oeNkraD 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von oeNkraD an!   Senden Sie eine Private Message an oeNkraD  Schreiben Sie einen Gästebucheintrag für oeNkraD

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 01. Okt. 2010 09:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von GDawg an!   Senden Sie eine Private Message an GDawg  Schreiben Sie einen Gästebucheintrag für GDawg

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für oeNkraD 10 Unities + Antwort hilfreich

Ah, ok...
Aber der Makro-Recorder zeichnet doch alles auf?

Code:

Dim swApp As Object

Dim 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.ActiveDoc

Dim 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



Sehen Sie sich das Profil von oeNkraD an!   Senden Sie eine Private Message an oeNkraD  Schreiben Sie einen Gästebucheintrag für oeNkraD

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 01. Okt. 2010 10:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von oeNkraD an!   Senden Sie eine Private Message an oeNkraD  Schreiben Sie einen Gästebucheintrag für oeNkraD

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 01. Okt. 2010 10:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von oeNkraD an!   Senden Sie eine Private Message an oeNkraD  Schreiben Sie einen Gästebucheintrag für oeNkraD

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 04. Okt. 2010 07:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Und wie mach ich das ganze in Assemblys?

dort funktioniert SetLinecolor natürlich nicht... wieso sollte es auch  [ironie] *g*

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Anzeige:Infos zum Werbeplatz >>

speedyPDM CAD APP für Andere, Datenaustausch, Allgemeine Werkzeuge

speedyPDM ist das führende technische Dokumenten- und Produktdatenmanagementsystem für Solidworks, Solid Edge, Inventor, AutoCAD, ZWCAD, BricsCAD, Office und Email inklusive Revisionsmanagement.

oeNkraD
Mitglied



Sehen Sie sich das Profil von oeNkraD an!   Senden Sie eine Private Message an oeNkraD  Schreiben Sie einen Gästebucheintrag für oeNkraD

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 05. Okt. 2010 10:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz