Bearbeiten einer Notiz in einer Solidworks Grundkarte mit einem Makro

Hallo, ich möchte eine bereits vorhandene Notiz in der Grundkarte ändern, um die Schriftgröße zu ändern

Ich habe die automatische Makroaufzeichnung ausprobiert, aber sie funktioniert nicht. Ich kann das Makro nur zum Laufen bringen, wenn ich den Hintergrundplan manuell bearbeite und starte.

Wie programmiert man also das Makro so, dass es direkt auf der Grundkarte arbeitet?

Hallo

Sie müssen die Grundkartendatei (.slddrt) nur einmal bearbeiten und dann in jedem MEP neu laden.

Sehen Sie sich dieses Beispiel an, das das tut, was Sie möchten: http://help.solidworks.com/2017/english/api/sldworksapi/modify_and_reload_sheet_format_template_example_vb.htm

3 „Gefällt mir“

Um die Grundkarte zu bearbeiten, müssen Sie die EditTemplate-Methode verwenden, die dieser Beispiellink http://help.solidworks.com/2016/english/api/sldworksapi/Place_Note_Behind_Drawing_Sheet_Example_VB.htm

1 „Gefällt mir“

Ich hatte das Gleiche zu tun.

Für einen Kassettenwechsel nach einem Update der ems-Grundkarten.

 

Ich habe gemacht, was @Remrem sagt, ich habe den alten Hintergrundplan mit dem neuen überschrieben und dann jedes Mal, wenn ich ihn geöffnet habe, auf Neu laden oder mit einem Makro geklickt, wie ich es getan habe.

Für das Makro habe ich mir also nicht den Kopf zerbrochen:

-Die Makroaufnahme wird gestartet

- Klicken Sie mit der rechten Maustaste auf "Blatt 1", klicken Sie auf Neu laden und drücken Sie dann OK

- Beenden Sie die Aufzeichnung des Makros und erstellen Sie ein Symbol, um es schnell zu starten.


fdp.jpg

Hallo, wenn es hilft, unten finden Sie einen Codeausschnitt, mit dem Sie eine Grundkarte unabhängig vom ursprünglichen Format des Plans neu laden können (beschränkt auf A4, A3, A2, A1). Es genügt ein Klick, der einmal mit einer Schaltfläche verknüpft ist.

Option Explicit
Public Enum swDocumentTypes_e
    swDocNONE = 0       ' Used to be TYPE_NONE

    swDocPART = 1       ' Used to be TYPE_PART

    swDocASSEMBLY = 2   ' Used to be TYPE_ASSEMBLY

    swDocDRAWING = 3    ' Used to be TYPE_DRAWING
End Enum

Dim swSheet         As SldWorks.Sheet
Dim swApp           As Object
Dim swModel         As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swModelDocExt   As ModelDocExtension
Dim sTemplate       As String
Dim stemplatepath   As String
Dim Count           As Integer
Dim vSheetNameArr   As Variant
Dim vSheetName      As Variant
Dim vSheetProps     As Variant
Dim bRet            As Boolean


'Constantes
Const cDirTemplate = "..." 'Mettre le chemin d'accès aux fonds de plans sous ce format: C:\xxx\xxx\
Const cTemplateA4 = "A4.slddrt" 'A renommer si vos templates s'appelent autrement
Const cTemplateA3 = "A3.slddrt"
Const cTemplateA2 = "A2.slddrt"
Const cTemplateA1 = "A1.slddrt"


Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then
    MsgBox ("Pas de document ouvert")
    Else
        If swModel.GetType <> 3 Then
            MsgBox ("Il ne s'agît pas d'une mise en plan")
        Else
        Set swDraw = swModel
                Set swModelDocExt = swModel.Extension
        vSheetNameArr = swDraw.GetSheetNames
                For Each vSheetName In vSheetNameArr
                        bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
                        Set swSheet = swDraw.GetCurrentSheet
                        vSheetProps = swSheet.GetProperties
                        If vSheetProps(0) = "7" Then 'A4
                            stemplatepath = cDirTemplate & cTemplateA3
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False)
                        ElseIf vSheetProps(0) = "8" Then 'A3
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA3
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False) 'A2
                        ElseIf vSheetProps(0) = "9" Then
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA2
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False)
                        ElseIf vSheetProps(0) = "10" Then 'A1
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA1
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False)
            ElseIf vSheetProps(0) <> "7" Then 'Pour les formats un peu exotiques non gérés
                            If vSheetProps(0) <> "8" Then
                            If vSheetProps(0) <> "9" Then
                            If vSheetProps(0) <> "10" Then
                                MsgBox "Le fond de plan ne correspond à aucune trame connue" & vbCrLf & "Aucun changement appliqué"
                                Exit Sub
                            End If: End If: End If
                        End If
                    Next
    End If
End If
swModel.Save2 (True) 'Sauvegarde des changements
End Sub

 

1 „Gefällt mir“

Cyril.f

Was macht es für die folgenden Fragen, wenn Sie eine FDP aufladen:

"Bestehende Blöcke umbenennen ja/nein?"

"Beachtung von Werten vor dem Hintergrund von erzwungenen / modifizierten Plänen?"

 

Hallo

Es wird nichts anderes getan, als eine Grundkarte neu zu laden (indem das Format geändert wird, da das einfache Neuladen mit demselben slddrt-Dateinamen nicht funktioniert). Wenn später Blöcke in der Grundkarte hinzugefügt werden, werden diese gelöscht (Sie müssen mehr Verarbeitung hinzufügen, aber nicht unbedingt einfach zu schreiben, da dies von den Parametern jedes einzelnen abhängt).

Wenn es erzwungene Dinge gibt, müssen Sie die Werte wiederherstellen, um sie erneut anzuwenden.

Zusammenfassend lässt sich also sagen, dass dieses Stück Makro einfach ist und nur für klassische Dinge geeignet ist (alle Felder werden mit einer SW-Eigenschaft abgebildet und es werden keine Spezifität im Hintergrund hinzugefügt). Ich habe einen viel komplexeren Code, aber dieser ist spezifisch für die Bedürfnisse meines Unternehmens und ich kann ihn nicht einfach teilen (sehr wenige Kommentare und schwer zu verstehen ohne Kenntnis der SW-API und vba).

Ich gebe zu, dass meine Antwort neben der Anfrage und mehr als Antwort auf Bart ist, der, wie ich finde, viele benutzerdefinierte Schaltflächen hat, um die gleiche Aktion auszuführen.

Um die Notizen der Grundkarte zu scannen, ist es also eher dieser Code:

    Set swView = swDraw.GetFirstView 'Fond de plan
    Set swNote = swView.GetFirstNote
    swModel.ClearSelection2 (True)
    Do While Not swNote Is Nothing
        If swNote.GetName = "..." Then 'Trouver le nom de l'objet si tout le temps le même sinon utiliser swNote.GetText et jouer avec le contenu puis appliquer une mise en forme        
         End If
        Set swNote = swNote.GetNext
    Loop

 

1 „Gefällt mir“

Hallo

Der folgende Codeausschnitt ändert die Höhe des Textes, indem er mit 5 aller Notizen multipliziert wird, deren Text TextNote entspricht. Es ist die CSharp-Sprache, ich überlasse es Ihnen, sie zu übersetzen und an Ihre Bedürfnisse anzupassen.

SldWorks swApp;
DrawingDoc swDraw;
langes j;
lange Zählung;
SolidWorks.Interop.sldworks.View swView;

swDraw = (DrawingDoc)swApp.ActiveDoc;

swView = (SolidWorks.Interop.sldworks.View)swDraw.GetFirstView();

while ((swView != null))
{
    Anzahl = swView.GetNoteCount();
    if (Zählung > 0)
    {
        Objekt[] Notizen = (Objekt[])swView.GetNotes();
        for (j = 0; j <= Notes.GetUpperBound(0); j++)
        {
            Hinweis swNote;
            swNote = (Notiz)Notizen[j];

            if (swNote.GetText() == "NoteText")
            {
                swNote.SetHeight(swNote.GetHeight() * 5);
            }
        }
    }
    swView = (SolidWorks.Interop.sldworks.View)swView.GetNextView();
}

swDraw.ForceRebuild();

Herzliche Grüße

Manchmal ist es einfacher, dein Makro selbst aufzuzeichnen, als durch die Codierung zu gehen ;) =)

1 „Gefällt mir“

☺ Bart Ich stimme dir ziemlich zu , aber es hängt alles von der Größe des Projekts ab, das durchgeführt werden muss, der obige Codeausschnitt ist nur ein winziger Teil eines Programms, das es mir ermöglicht hat, 48000 Pläne zu machen, und jetzt ist es besser, ein wenig zu programmieren.

Herzliche Grüße

1 „Gefällt mir“

Oh, natürlich hängt alles von dem Projekt ab, mit dem man sich befassen möchte.

 

Ist die Aufgabe wiederkehrend oder nicht?

Ich benutze es, wenn ich meine Cartridges aktualisiere (Logo-Änderung, etc...)

Wenn ich eine alte Aufnahme mit der alten Patrone mache, muss ich nur auf das Symbol klicken, um alles auf den neuesten Stand zu bringen =)

 

Andernfalls besitzt MycadTools so etwas nicht?

Cyril.f , wenn Sie eingeben (indem Sie das Format ändern, weil das einfache Nachladen mit demselben slddrt-Dateinamen nicht funktioniert), können Sie versuchen, das Format neu zu laden, indem Sie die gleiche Zeile zweimal einfügen, weil es in der Tat in einem Rutsch nicht funktioniert, hier ist, was ich in meinem äquivalenten Programm tun musste (aber in c #):

Wir laden das Format neu (in 2 Schritten, sonst funktioniert es nicht)
bool boolstatus = falsch;
boolstatus = swDraw. SetupSheet5(Blattname, (int)PaperSize, (int)TemplateIn, Scale1, Scale2, true, file2, width, top, "Default", true);
boolstatus = swDraw. SetupSheet5(sheetName, (int)PaperSize, (int)TemplateIn, Scale1, Scale2, true, file1, width, top, "Default", true);

Herzliche Grüße

2 „Gefällt mir“

Hallo

Zunächst einmal vielen Dank für all eure Antworten, die mir sehr geholfen haben, denn ich bin nicht sehr gut in der VBA-Programmierung^^'

Dieses Makro ist derzeit für einen Stapel von 700 Aufnahmen gedacht, aber ich möchte, dass es in Zukunft wiederverwendbar ist.

 Ich habe mit Mycadtool/Integration gesucht, das den Start meiner Makros verwalten sollte, aber ich kann keine Aktion im Zusammenhang mit der Software finden, die es mir ermöglicht, die Schriftgröße zu ändern.

Derzeit kann ich Schleifen programmieren, die die Anzahl der Blätter und dann die Anzahl der Ansichten zählen. Wenn ich jedoch versuche, den Vorgang für die Notizen zu wiederholen, funktioniert es nicht.

 


capture.jpg

Es scheint, dass Sie getnotescount aufrufen müssen, bevor Sie

http://help.solidworks.com/2016/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.ISketchBlockDefinition~GetNoteCount.html

 

BEARBEITEN siehe auch http://help.solidworks.com/2016/english/api/sldworksapi/get_views_and_notes_example_vb.htm

Hallo

Wenn Sie mehrere Blätter haben, benötigen Sie 1 Schleife auf den Blättern, einschließlich 1 Schleife auf den Ansichten, einschließlich 1 Schleife auf den Noten, einschließlich der Änderung der Tonhöhe des Notentextes. In der angehängten Datei sehen Sie sich beispielsweise an, wie sie in C# aussieht.           

Herzliche Grüße


exemple_modif_ht_texte_note.txt
1 „Gefällt mir“

Allerdings verstehe ich den Unterschied in vba von Annotation und Notiz nicht wirklich

Entspricht die Annotation der Programmierung der Registerkarte?

weil ich das Gefühl habe, dass ich sagen muss, dass ich nach einer Anmerkung und dann nach einer Notiz suchen werde :/

 

Guten Abend

Eine Notiz ist ein Untertyp von Annotation, siehe http://help.solidworks.com/2013/English/api/sldworksapi/Get_Annotation_Object_Example_VB.htm für Testmakros.

Herzliche Grüße

Für i = 0 TB UBound(vSheets)                                                'Schleifenblatt
        vViews = vSheets(i)
       
        Für j = 1 TB UBound(vViews)                                             'Schleifenansicht
        Set swView = vViews(j)


        vNote = swView.GetNotes
        vAnnotation = swView.GetAnnotations
           
                Für k = 0 TB UBound(vNote)                                      'Schleife auf den Noten
                Setze swNote = vNote(k)


                Nächster
               
                Für c = 0 TB UBound(vAnnotation)
                Set swAnnotation = vAnnotation(c)
               
                Nächster