Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API - Zeichenansicht als TIFF in Excel einfügen

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
  
Bechtle Competence Days | Online
Autor Thema:  API - Zeichenansicht als TIFF in Excel einfügen (1821 mal gelesen)
AlexSchaaf
Mitglied



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

Beiträge: 21
Registriert: 23.09.2014

SWX 2014 SP5

erstellt am: 13. Okt. 2014 16:00    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


Excel_BOM2.zip

 
Hallo Forum!

Wir haben uns in der Firma dazu entschieden, die Stücklisten von den Zeichnungen zu entfernen, da diese einfach zu viel platz weg nehmen. Also habe ich mich dran gesetzt, einen einfachen Weg zu finden wie wir die Stücklisten in Excel exportieren können und das ganze noch Ansehnlich bleibt. Ich habe daraufhin Excel Vorlagen erstellt die ich mit Informationen aus SolidWorks heraus fülle. Auf dem Titelblatt der Stückliste soll die angewählte Zeichenansicht eingefügt werden.

Dazu hatte ich mir folgende Prozedur überlegt:
Zeichenansicht kopieren, neues temporäres Blatt einfügen, Zeichenansicht drauf, alle Bemaßungen/Beschriftungen weg, als TIFF abspeichern und fertig.

Leider wird das TIFF immer so groß abgespeichert, wie der Benutzer die Arbeitsfläche in Solid definiert hat -> kleine Arbeitsfläche kleines Bild.
Dazu kommt, dass wenn das Ausgabeformat der TIFF nicht immer gleich groß ist, die Grafik in Excel nicht korrekt positioniert werden kann. Diese rutscht dann mal gerne auf ein zweites Blatt über.

Nun meine Frage:
Habt ihr eine Idee, wie ich von einer Zeichenansicht ein Bild bekomme, das immer in der selben größe ausgegeben wird?

Mein Quellcode ist im Anhang. Verzeiht mir die dortige unordnung, aber es ist ja noch nicht fertig =)
Gestartet wird direkt aus der UserForm heraus.

Gruß

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

HenryV
Mitglied
Konstrukteur, Engineering


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

Beiträge: 813
Registriert: 18.05.2005

SolidWorks 2022 x64 SP5.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 22H2
Microsoft 365 E5
Microsoft Visual Studio Enterprise 2022

erstellt am: 13. Okt. 2014 17:18    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 AlexSchaaf 10 Unities + Antwort hilfreich

AlexSchaaf
Mitglied



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

Beiträge: 21
Registriert: 23.09.2014

SWX 2014 SP5

erstellt am: 14. Okt. 2014 07:18    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 HenryV,
Die Einstellungen kenne ich mittlerweile Auswendig. Die "Print" option bei TIFF hat das Problem, dass die Zeichenansichten auf das blatt passen müssen. Ich generiere ein neues blatt mit den Maßen 1mmx1mm damit man auf dem Bild keinen Rand sieht. So ist das Blatt immer so klein, dass man es im Bild nicht sieht.
Wenn ich also z.b. ein A4 Print versuche, muss ich die Ansicht erst auf ein A4 Blatt anpassen.

Gruß Alex


Edit:

Ich habe jetzt die Methode swView.GetOutline benutzt um den Rahmen der Zeichenansicht zu bekommen. Das neue Blatt wird nun nach dem Rückgabewert der Outline angepasst. Allerdings ist auch hier wieder das Problem die Zeichenansicht Mittig ins Blatt einzufügen. Dabei habe ich wieder den selben workaround benutzt wie vorher, ich selektiere die Zeichenansicht mit .SelectByID2 erneut an den Koordinaten X=(vOutline(2) + vOutline(0))und Y=(vOutline(1) =(vOutline(3) + vOutline(1)).
Kann mir irgend jemand bestätigen, dass der Nullpunkt einer Ansicht sich in der Mitte befindet und nicht unten links? Gibt es hierfür eventuell eine elegantere Lösung? Ich habe bemerkt, dass die Print TIF option unabhängig vom gezeichneten Blattformat die Ausgabe immer perfekt auf das Blatt anpasst, deshalb versuche ich es nun auf diesem Weg.


Edit 2:

Sehe ich das richtig, dass .GetOutline(0) bzw. GetOutline(1) die Postition der linken unteren Ecke der Ansicht relativ zum Blatturpsrung zurück geben, GetOutline(2) bzw. GetOutline(3) die obere rechte Ecke der Ansicht? Wenn dem wirklich so ist, muss die wahre Ansichtsgröße doch X=(vOutline(2) + vOutline(0)) breit und Y=(vOutline(3) + vOutline(1)) hoch sein? Leider ist dem nicht so. Kann mir jemand erklären, wie diese Funktion zu benutzen ist?

[Diese Nachricht wurde von AlexSchaaf am 14. Okt. 2014 editiert.]

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

AlexSchaaf
Mitglied



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

Beiträge: 21
Registriert: 23.09.2014

SWX 2014 SP5

erstellt am: 14. Okt. 2014 11: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

Hallo,

Ich habe es geschafft!

Code:

'Mit dieser Funktion stelle ich auf das vOutline Array pos 0 und 1 die wahren Aussenmaße.
Private Function paperSize(swView As SldWorks.View, ByRef vOutline As Variant)
    vOutline = swView.GetOutline
    vOutline(0) = (vOutline(2) - (vOutline(0)))
    vOutline(1) = (vOutline(3) - (vOutline(1)))
   
End Function



anschließend selektiere ich die mitte mithilfe von
Code:
swModel.Extension.SelectByID2 swView.Name, "DRAWINGVIEW", (vOutline(0) / 2), (vOutline(1) / 2), 0, False, 0, Nothing, 0

Die Blattgröße ist dann einfach vOutline(0) x vOutline(1) und fertig.

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

HenryV
Mitglied
Konstrukteur, Engineering


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

Beiträge: 813
Registriert: 18.05.2005

SolidWorks 2022 x64 SP5.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 22H2
Microsoft 365 E5
Microsoft Visual Studio Enterprise 2022

erstellt am: 14. Okt. 2014 12:14    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 AlexSchaaf 10 Unities + Antwort hilfreich

Hallo Alex

Hab es auch noch mal genauer angeschaut.

Hier mein Code
(Dieser Speichert die selektierte Ansicht als 100x100mm Tiff ab)

Code:
Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View

Dim vOutline As Variant
Dim vPos As Variant

Dim boolstatus As Boolean
Dim nErrors As Long
Dim nWarnings As Long
Dim sPartTemplateName As String
Dim sPathName As String

Sub main()
   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    Set swView = swDraw.ActiveDrawingView
   
    If swView Is Nothing Then Exit Sub
'Anisicht kopieren
    swDraw.EditCopy
'Neues Blatt erstellen
    sPartTemplateName = swApp.GetUserPreferenceStringValue(swDefaultTemplateDrawing)
    vOutline = swView.GetOutline
   
    boolstatus = swDraw.NewSheet3("Tiff", 12, 12, 1, 1, True, sPartTemplateName, vOutline(2) - vOutline(0), vOutline(3) - vOutline(1), "Standard")
    boolstatus = swModel.Extension.SelectByID2("Tiff", "SHEET", 0, 0, 0, False, 0, Nothing, 0)
'Anisicht einfügen
    swDraw.Paste
'Anisicht verschieben
    Set swView = swDraw.GetFirstView
    Set swView = swView.GetNextView
   
    vPos = swView.Position
   
    vPos(0) = (vOutline(2) - vOutline(0)) / 2
    vPos(1) = (vOutline(3) - vOutline(1)) / 2
   
    swView.Position = vPos
    swModel.GraphicsRedraw2
'Tiff Optionen setzen
    boolstatus = swApp.SetUserPreferenceIntegerValue(swTiffImageType, 0)
    boolstatus = swApp.SetUserPreferenceIntegerValue(swTiffCompressionScheme, 2)
    boolstatus = swApp.SetUserPreferenceIntegerValue(swTiffScreenOrPrintCapture, 1)
   
    swApp.SetUserPreferenceToggle swTiffPrintAllSheets, False
    swApp.SetUserPreferenceToggle swTiffPrintUseSheetSize, False
   
    boolstatus = swApp.SetUserPreferenceIntegerValue(swTiffPrintDPI, 200)
    boolstatus = swApp.SetUserPreferenceIntegerValue(swTiffPrintPaperSize, swDwgPapersUserDefined)
    boolstatus = swApp.SetUserPreferenceDoubleValue(swTiffPrintDrawingPaperWidth, 0.1)
    boolstatus = swApp.SetUserPreferenceDoubleValue(swTiffPrintDrawingPaperHeight, 0.1)
   
    swApp.SetUserPreferenceIntegerValue swTiffPrintScaleToFit, True
   
    sPathName = swModel.GetPathName
   
    If sPathName <> "" Then
'Zusammenstellen des Speichernnamens
        If UCase(Right(sPathName, 7)) = ".SLDDRW" Then
            sPathName = Left(sPathName, Len(sPathName) - 7) & ".tif"
        Else
            sPathName = sPathName & ".tif"
        End If
    Else
        sPathName = "c:\Temp\Zeichnung.tif"
    End If
   
'Abspeichern des Files
    boolstatus = swModel.SaveAs4(sPathName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)
   
'Blatt löschen
    boolstatus = swModel.Extension.SelectByID2("Tiff", "SHEET", 0, 0, 0, False, 0, Nothing, 0)
    swModel.DeleteSelection (False)

End Sub


Gruss Andreas

------------------
21 ist nur die halbe Antwort.

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

AlexSchaaf
Mitglied



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

Beiträge: 21
Registriert: 23.09.2014

SWX 2014 SP5

erstellt am: 14. Okt. 2014 13: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


System_Bilder.zip

 
Hallo Andreas,

erstmal vielen Dank für deine Hilfe.Das Ergebnis ist bei deiner als auch bei meiner Funktion letztendlich das gleiche. Ich selektiere die ansicht auf dem Punkt, an den du sie verschiebst, was nach dem einfügen/verschieben das selbe Ergebnis liefert.

Leider musste ich feststellen, dass es nicht immer funktioniert. Ich kann es mir nicht erklären. Bei 80% der Zeichenansichten funktioniert diese Berechnung der Position.

Im Anhang findest du eine der Problemansichten, einmal als Screenshot mit angezeigtem Ansichtsrahmen und einmal als TIF ausgabe. Falls du eine Idee hast, woran das liegen kann, wäre ich dir sehr dankbar! Das Problem tritt sowohl bei deiner als auch bei meiner Funktion auf, und zwar mit identischen Abweichungen.

Gruß Alex

Edit:

Ich habe die Problemansichten mal genau Analysiert. Die Ausgangsansicht, von der also kopiert wird, wird korrekt ausgelesen und auch die Maße für das Blattformat werden demnach korrekt eingestellt. In dem Moment, in dem die Ansicht eingefügt wird, ändert sich die Größe! Vor dem kopieren hatte die Ansicht im Anhang Maße von 712,114618671435mm x 603,349370140365mm. Nach diesen Maßen wird dann das Blatt erstellt. Wenn daraufhin dann die Zeichnung eingefügt wird, hat die Ansicht nur noch die Maße 702,60859347705mm x 593,84334494598mm. Wie kann das zustande kommen? Der Maßstab wurde nicht verändert, die Beschriftungen werden mit kopiert. Ich sehe keinen grund warum die Ansicht ihre größe ändern sollte bzw. dies überhaupt kann.

[Diese Nachricht wurde von AlexSchaaf am 14. Okt. 2014 editiert.]

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

AlexSchaaf
Mitglied



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

Beiträge: 21
Registriert: 23.09.2014

SWX 2014 SP5

erstellt am: 28. Okt. 2014 14:59    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

Hat keiner eine Idee, wieso sich die Ansichten nach dem Kopieren in der Größe verändern? Oder ist das vielleicht eine einstellungssache?

Leider werden immer mehr Stücklisten bei uns mit leicht abgeschnittenen Bildern generiert, weshalb ich über eine Lösung sehr froh wäre.

Gruß

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