| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | TeamTec Hausmesse |
Autor
|
Thema: API: Skizzenbild auf Zeichnung ein/ausblenden bzw. löschen (2332 mal gelesen)
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 16. Jun. 2016 11:17 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich würde gern per API ein vorhandenes Skizzenbild auf einer Zeichnung ein-/ausblenden oder wenn das nicht geht dieses ersetzen/löschen. Mein Problem liegt nun daran wie ich ein Skizzenbild in der Zeichnung (Auf dem Zeichnungsblatt) per API Selektiert bekomme und im Traumfall dieses dann noch ein bzw. ausblenden kann, im Modell ist das kein Problem nur eben in einer Zeichnung bekomme ich es einfach nicht selektiert. Hat von euch einer eine Idee wie ich das hin bekomme. Hintergrund ist, dass als Wasserzeichen benutzerabhängig immer das Produktlogo auf der Zeichnung verwendet werden soll. Organisatorisch soll aber nicht für jeden Bereich eine eigene Vorlagen erstellt werden, sondern eben nur per Macro das Skizzenbild (Wasserzeichen) ausgetausch werden. Gruß Bernd Gruß Bernd
------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 16. Jun. 2016 13:30 <-- editieren / zitieren --> Unities abgeben: Nur für bk.sc
Hmm..einfach austauschen wird schwierig, da das Bild wohl nicht auf die Originaldatei referenziert ist. Löschen des Skizzenbildes sollte relativ einfach sein: (Bei aktiver Zeichnung) so in etwa:
Code: Set Drw = swApp.ActiveDoc boolstatus = Drw.ActivateView("Zeichenansicht1") boolstatus = Drw.Extension.SelectByID2("Skizzenbild1", "SKETCHBITMAP", 0, 0, 0, False, 0, Nothing, 0) Drw.EditDelete
Das Einfügen gestaltet sich schon schwieriger, dazu musst du wohl wieder in das Part und die Skizze editieren. Dann
Code: Dim SkPicture As Object Set SkPicture = Part.SketchManager.InsertSketchPicture(<Dein bildname>) Part.ClearSelection2 True boolstatus = Part.ForceRebuild3(True)
Das Dumme dabei: Du kannst dabei weder Größe noch Position noch Eigenschaften beeinflussen. ------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 16. Jun. 2016 13:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, danke für deinen Input. Das bearbeiten, eines Skizzenbild ist das kleinere Problem wenn es mal selektiert ist, siehe das ISketchPicture Objekt in der API-Hilfe. Aber das Aktivieren des Zeichenblattes bevor ich das Skizzenbild versuche zu selektieren klingt sinnvoll. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 16. Jun. 2016 14:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, leider hat das aktivieren der Ansicht bzw. des Blattformates keine Auswirkung auf das finden bzw. aktivieren des Skizzenbildes. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 16. Jun. 2016 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für bk.sc
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 19. Apr. 2017 13:18 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, gut Ding will weile haben, hab das Problem gelöst bekommen und wollte es euch nicht vorenthalten. Die SelectByID2 Methode scheint auf Grund eines Bugs bei Skizzenbildern nicht zu funktionieren. Hab es jetzt über die SelectByName Methode gemacht, hierzu muss natürlich beim einfügen des Skizzenbildes ein Name vergeben werden der auch Selektiert werden kann. Hoffe die Kommentierung ist ausreichend. Das Macro bzw. die Sub ist jetzt nur für zwei mögliche Logos und 3 Blattformate ausgelegt.
Code: Sub SetLogo(ByVal VisibleState As Boolean, Optional StandardLogo As Boolean)Dim dblSketchPicAngle As Double 'Winkel für Skizzenbild in Radiant Dim varSketchPicOrgin(1) As Variant 'Einfügepunkt des Skizzenbild (X,Y) Dim varSketchSize(1) As Variant 'Skalierung des Skizzenbildes (Höhe, Breite) Dim SketchPicPath As String 'Pfad wo die Logos liegen If VisibleState Then 'Skizzebild Einfügen If StandardLogo Then SketchPicName = "Standard-LOGO" Else SketchPicName = "Spezial-LOGO" End If For i = 0 To UBound(vSheetProperties) 'vSheetProperties enthält u.a. Blattzähler, Blattnamen, Blattformate (swDwgPaperSizes_e Enumeration), wird bereits Initialisieren des Gesamtmacros ermittelt swModelDoc.SelectByName 0, "LOGO" & "-" & vSheetProperties(i, 0) 'vSheetProperties(i,0) = Zähler Blatt, Blattname If swModelDoc.SelectionManager.GetSelectedObjectType3(1, -1) = swSelSKETCHBITMAP Then 'Debug.Print vSheetProperties(i, 0) & " Bereits Logo vorhanden" Else Select Case vSheetProperties(i, 1) 'vSheetProperties(i,1) = Blattzähler, Blattformat Case 7 'A4 Hoch dblSketchPicAngle = 0.873 'Winkel varSketchSize(0) = 0.16 'Breite varSketchSize(1) = 0.0832 'Höhe If StandardLogo Then varSketchPicOrgin(0) = 0.08 'Position X varSketchPicOrgin(1) = 0.095 'Position Y Else varSketchPicOrgin(0) = 0.092 'Position X varSketchPicOrgin(1) = 0.095 'Position Y End If Case 8 'A3 Quer dblSketchPicAngle = 0.61 'Winkel varSketchSize(0) = 0.225 'Breite varSketchSize(1) = 0.117 'Höhe If StandardLogo Then varSketchPicOrgin(0) = 0.13 'Position X varSketchPicOrgin(1) = 0.055 'Position Y Else varSketchPicOrgin(0) = 0.15 'Position X varSketchPicOrgin(1) = 0.04 'Position Y End If Case 9 'A2 Quer dblSketchPicAngle = 0.61 'Winkel varSketchSize(0) = 0.3 'Breite varSketchSize(1) = 0.156 'Höhe If StandardLogo Then varSketchPicOrgin(0) = 0.18 'Position X varSketchPicOrgin(1) = 0.08 'Position Y Else varSketchPicOrgin(0) = 0.22 'Position X varSketchPicOrgin(1) = 0.065 'Position Y End If End Select boolstatus = swDrawingDoc.ActivateSheet(vSheetProperties(i, 0)) Set swSheet = swDrawingDoc.Sheet(vSheetProperties(i, 0)) swDrawingDoc.EditTemplate Set swView = swModelDoc.GetFirstView Set swSketch = swView.GetSketch Set swSketchMgr = swModelDoc.SketchManager Set swSketchPicture = swSketchMgr.InsertSketchPicture(SketchPicPath & SketchPicName & ".png") swSketchPicture.Angle = dblSketchPicAngle swSketchPicture.SetOrigin varSketchPicOrgin(0), varSketchPicOrgin(1) swSketchPicture.SetTransparency swSketchPictureTransparencyUserDefined, 1, 16777215, 0 swSketchPicture.SetSize varSketchSize(0), varSketchSize(1), True swSketchPicture.GetFeature.Name = "LOGO" & "-" & vSheetProperties(i, 0) swApp.RunCommand 1463, "Schließen der PropertyManagerPage, da diese sonst einfach geöffnet bleibt" swDrawingDoc.EditSheet End If Next i ElseIf VisibleState = False Then 'Skizzenbild entfernen For j = 0 To UBound(vSheetProperties) boolstatus = swDrawingDoc.ActivateSheet(vSheetProperties(j, 0)) Set swSheet = swDrawingDoc.Sheet(vSheetProperties(j, 0)) ' swModelDoc.SelectByName 0, SketchPicName ' über den Namen selektieren, der SelectByID2 hat wohl einen Bug: https://forum.solidworks.com/thread/267 swModelDoc.SelectByName 0, "LOGO" & "-" & vSheetProperties(j, 0) If swModelDoc.SelectionManager.GetSelectedObjectType3(1, -1) = swSelSKETCHBITMAP Then swModelDoc.EditDelete Else 'Debug.Print vSheetProperties(j, 0) & " Kein Logo zum löschen vorhanden" End If Next j End If boolstatus = swDrawingDoc.ActivateSheet(sCurrentSheet) 'sCurrentSheet wird bereits Initialisieren des Gesamtmacros ermittelt End Sub
[EDIT] Fast vergessen, die Information hatte ich übrigens von Herr Cikos der im MaxxDB Forum moderiert, hatte bei Ihm eine API Schulung ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 19. Apr. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|