| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: AutoCAD plotten (5424 mal gelesen)
|
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 23. Mrz. 2009 13:46 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich weiß nicht so recht, wo ich mein Problem einordnen muss, aber ich würde sagen VBA trifft es am besten. Ich habe einen Stapel Zeichnungen in einem Verzeichnis liegen, dann ein Makro schreiben, wo ich alle Zeichnungen mit dem FileDialog markieren kann, diese der reihe nach geöffnet werden und geplottet. Das sind alles ProSteel3D Dateien und Zeichnungen. Das mit dem FileDialog bzw. das Drumherum ist erstmal Nebensache, ich probiere grad den grundlegenende Code aus, ich habe mit folgenen angefangen: Code: Sub test_plott() Dim oACAD As AcadApplication Set oACAD = AcadApplication Dim oAcadDoc As AcadDocumentSet oAcadDoc = oACAD.Documents.Open("c:\arbeitsverzeichnis\zeichnung.dwg") oAcadDoc.ActiveLayout.PlotType = acExtents oAcadDoc.Plot.PlotToDevice "Adobe PDF.pc3" oAcadDoc.SaveAs ("C:\arbeitsverzeichnis\zeichnung_ex.dwg")
oAcadDoc.Close End Sub
Sobald ich im Code die Zeile Code: oAcadDoc.Plot.PlotToDevice "Adobe PDF.pc3"
durchläuft, startet AutoCAD ProSTeel 3D (das sehe ich an dem Programmfenster" danach fragt er mich Eine neue Zeichnung erkannt, wie soll der Maßstab sein Imperial/Metrisch, aber die Abfrage möchte ich garnicht haben. Das Kurriose ist, das er beim Plotten ProSteel nachläd nicht beim öffnen des Dokuments? Kann es sein, weil in dem Dokument Isometrieansichten von ProSteel sind?Wie kann ich das Dokument mit ProSteel öffnen, das weder ProSteel nachgeladen wird noch die Abfrage nach dem Maßstab kommt? Gruss Alex
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 23. Mrz. 2009 13:51 <-- editieren / zitieren -->
Hi Alex, am besten ein AutoCAD-Profil anlegen, bei dem ProSteel nicht geladen wird/geladen werden kann. Damit kann ProSteel auch nicht mehr in Aktionen in AutoCAD eingreifen und Dialoge bringen, die eben nicht gewünscht sind. - alfred - PS: hast Du Dir schon mal 'publizieren' angesehen, da kannst Du auch mehrere Zeichnungen automatisiert plotten lassen. ------------------ www.hollaus.at |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 23. Mrz. 2009 14:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, @publizieren, da hast du schon recht, ich möchte es bloß automatisieren, d.h. wenn das funktioniert, das jede geplottete Datei in eine Excel-Tabelle eingetragen wird, die der Auftraggeber für sein Controlling-Programm benötigt. Aber das ist noch weit weit weg, nur damit du ersteinmal die grobe Richtung weißt. Der Tipp mit dem Profil ohne ProSteel hat gewirkt, danke! Aber jetzt habe ich noch ein Problem, wie kann ich die Papiergröße festlegen (A3,A1 ...), wie komme ich an den Plotmanager ran, da könnte ich mir ja die Plotteinstellungen "vorheriger Plot" herziehen. Fürs erste würde mir schon reichen, wenn ich einstellen könnte, A1 oder A0 usw. Ich habe in der Literatur gefunden, dass ich mit :
Code: .GetCanoncialMediaNames
die Paiergrößen des Plotters ermitteln kann.Aber wie lege ich im Layout fest welche Papiergröße ich haben will ??? Gruss fb.
PS: ich habe versucht auf die Website zu kommen, die in deiner Signatur steht, die existiert nicht :-( Ergänzung: Ich habe mit Code: getCanoncialMediaNames
die Papierformate ermittelt, wenn ich dann sage:
Code: oAcadDoc.ActiveLayout.CanoncialMediaName= "ISO_A2_(594.00_x_420.00_MM)"
Dann bekomme ich einen Laufzeitfehler. :-([Diese Nachricht wurde von facebraker am 23. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 23. Mrz. 2009 14:41 <-- editieren / zitieren -->
Hi, Du hast in der VBA-Hilfe ein Beispiel für GetCanonicalMediaNames, und wenn du das richtige in der Liste gefunden hast, kannst Du das dem Layout zuweisen. Siehe z.B. hier (3.ter Beitrag), ist ein kleines Beispiel von Auflisten und Zuweisen. - alfred - ------------------ www.hollaus.at |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 23. Mrz. 2009 15:06 <-- editieren / zitieren --> Unities abgeben:
Hallo alfred, ich habe es versucht, bekomme aber einen Laufzeitfehler/ falsche Eingabe. Hier mein Code, muss ich dem Layout noch einen Plotter zuweisen? Code: Sub test_plott() Dim oACAD As AcadApplication Set oACAD = AcadApplication Dim oAcadDoc As AcadDocument Dim names As Variant Set oAcadDoc = oACAD.Documents.Open("c:\arbeitsverzeichnis\zeichnung.dwg")oAcadDoc.ActiveLayout.PlotType = acExtents 'For Each names In oAcadDoc.ActiveLayout.GetCanonicalMediaNames 'Debug.Print names ' 'Next names oAcadDoc.ActiveLayout.CanonicalMediaName = "ISO_A1_(594.00_x_841.00_MM)" 'oAcadDoc.Plot.PlotToDevice "Adobe PDF.pc3" oAcadDoc.Plot.PlotToDevice "DesignJet 1050C.pc3" oAcadDoc.SaveAs ("C:\arbeitsverzeichnis\zeichnung_ex.dwg")
oAcadDoc.Close End Sub
Ansonsten habe ich es ja fast so gemacht wie in deinen empfohlenen Links, oder? Außer das ich den MediaType als String angebe, war nur zu faul ein Array zu füllen ;-) Gruss Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 23. Mrz. 2009 15:54 <-- editieren / zitieren -->
Hi, ich hab's mir jetzt nicht angesehen, aber der Sinn hinter dem 'durchscannen' der MediaNames ist eben, dass man nicht einen zuweist, den es nicht gibt. Und in diesem Fall vermute ich mal, dass Dein angegebener String "ISO_A1_(594.00_x_841.00_MM)" für Adobe-PDF-Drucker vielleicht gar nicht definiert ist. Sollte das schon so sein, dann lass mich/uns bitte wissen, bei welcher Zeile das Prog den Fehler beanstandet. - alfred - ------------------ www.hollaus.at |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 23. Mrz. 2009 16:01 <-- editieren / zitieren --> Unities abgeben:
Hallo alfred, ich habe mal noch im internet gestöbert, und hier im forum wieder die Lösung gefunden. Da ist irgendwas im AutoCAd im argen, wenn man 1 mal in der Sitzung im "Plotten..." drin war, dann kommt der Laufzeitfehler nichtmehr. Also im AutoCAD "Datei / Plotten..." geöffnet, geschlossen, mein Programm gestartet, dann ging es. Ich will es auf dem HP Plotter testen, aber der ist z.Zt. belegt. Daher kann ich für nicht garantieren. Das mit dem "Durchscannen" ist klar, so habe ich es auch gemacht, bloss ich habe das als "debug-Ausgabe" laufen lassen und dann eine Größe, die ich wollte als String eingetragen. Im fertigen Programm wird es da eine Combobox geben, auch wegen dem Plotstyles :-)
Im Moment warte ich wann der Plotter frei wird und will testen. Gruss fb. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 23. Mrz. 2009 16:37 <-- editieren / zitieren -->
Hi, Zitat: Im Moment warte ich wann der Plotter frei wird und will testen
Du brauchst aber zum Testen Deines Programms nicht km-weise Papier Es gibt auch PlotToFile - alfred - ------------------ www.hollaus.at |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 24. Mrz. 2009 11:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, neee, klar kann ich auch in Datei drucken, ich wollte es nur mal auf dem Plotter checken;-) Ich muss aber gestehen, dass ich heut Morgen die Programmierumgebung gewechselt habe, ich bin auf VB.NET 2005 und COM gegangen. ich fand es im VBA zu mühseelig mit dem Arrays, mit .NET habe ich bessere Möglichkeiten im Framework. Z.B. Mehrere Dateien mit dem FileOpenDialog usw. Aber an der Syntax und den Objekten ändert sich ja prinzipell nichts, habe den Code 1:1 übernommen, aber anstatt Code: set Objekt =
mache ich Code: Dim Object as ... = new ...
Das funktioniert auch wunderbar, aber wenn ich als Drucker den Adobe PDF Printer als pc3 - Datei wähle, bekomme ich bei den Papierformaten, eine lange Liste mit UserXXX (siehe angehängte Datei) ganz unten kommt dann A3 und A4, Letter, aber ich weiß icht was z.B. A0 oder A1 ist.Weiß jemand was die User - Formate bedeuten, z.b. User166 = A1 oder so? Wenn ich den Adobe Drucker ohne pc3 nehme dann kommt das gleiche. Aber den pc3 benötige ich schon, weil wir auch User-Spez. Formate haben, z.b. A0 übergroß. Wenn ich auf einen Plotter, plotte, dann geht es, da krieg ich die Formate angezeigt :-( Gruss fb.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 24. Mrz. 2009 12:40 <-- editieren / zitieren --> Unities abgeben: Nur für facebraker
Hallo FB, ich erstelle auch atomatisiert PDF-Plots. anbei mirn Progamm mit dem ich arbeite, vielleicht kannst du damit was anfangen. Public Sub pdfPlot() Dim m_oDoc As AcadDocument Dim m_oLayout As AcadPlotConfiguration Dim dwgPfad, dwgName, strFilename As String dwgPfad = ThisDrawing.GetVariable("dwgPrefix") + "DWG\" pdfName = Replace(LCase(ThisDrawing.GetVariable("dwgName")), ".dwg", ".pdf") strFilename = dwgPfad + pdfName Dim oPlotConfig As AcadPlotConfiguration Dim strFilename As String Dim Layout, plotter, Format, stil, ausrichtung, bereich As String Dim drehen As Integer Layout = ThisDrawing.ActiveLayout.Name 'Layoutname Format = ThisDrawing.GetVariable("users3") 'Format wir mit Lispprogramm ermittel ausrichtung = ThisDrawing.GetVariable("users5") 'Ausrichtung H/Q - Format Set m_oDoc = ThisDrawing On Error Resume Next 'Set m_oLayout = m_oDoc.PlotConfigurations("Automatic") If m_oLayout Is Nothing Then Set m_oLayout = m_oDoc.PlotConfigurations.Add("Automatic", False) End If Select Case Format Case Is = "A4" MediaName = "ISO_expand_A4_(210.00_x_297.00_mm)" Case Is = "A3" MediaName = "ISO_expand_A3_(420.00_x_297.00_mm)" Case Is = "A2" MediaName = "ISO_expand_A2_(594.00_x_420.00_mm)" Case Is = "A1" MediaName = "ISO_expand_A1_(841.00_x_594.00_mm)" Case Is = "A0" MediaName = "ISO_expand_A0_(841.00_x_1189.00_mm)" End Select With m_oLayout .ConfigName = "PDF.pc3" .CanonicalMediaName = MediaName .StyleSheet = "ALLMono.ctb" .PlotWithPlotStyles = True .PlotWithLineweights = True .PlotType = acExtents .StandardScale = acScaleToFit .CenterPlot = True .PlotRotation = ac0degrees '.PlotRotation = ac0degrees End With Err.Clear On Error Resume Next Set oPlotConfig = m_oDoc.PlotConfigurations.Add("Temp", False) On Error GoTo errEnde oPlotConfig.CopyFrom m_oDoc.ActiveLayout m_oDoc.ActiveLayout.CopyFrom m_oLayout m_oDoc.Plot.PlotToFile strFilename m_oDoc.Plot.NumberOfCopies = 1 'm_oDoc.Plot.PlotToDevice Dim DOC As AcadDocument Dim z As Integer z = 0 m_oDoc.ActiveLayout.CopyFrom oPlotConfig oPlotConfig.Delete errEnde: Err.Clear End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 24. Mrz. 2009 14:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Gerhard, ich habe mir mal dein Programm angesehen, aber das was ich wissen will ist leider nicht drin, so wie ich den unten zitierten Teil intepretiere, wird mit einem Lisp-Programm das das Format zurückgibt und dieses dann im Plot setzt, mir fehlt aber das Lisp-Programm. Zitat: Original erstellt von gerhard123:
Format = ThisDrawing.GetVariable("users3") 'Format wir mit Lispprogramm ermittel ausrichtung = ThisDrawing.GetVariable("users5") 'Ausrichtung H/Q - Format Select Case Format Case Is = "A4" MediaName = "ISO_expand_A4_(210.00_x_297.00_mm)" Case Is = "A3" MediaName = "ISO_expand_A3_(420.00_x_297.00_mm)" Case Is = "A2" MediaName = "ISO_expand_A2_(594.00_x_420.00_mm)" Case Is = "A1" MediaName = "ISO_expand_A1_(841.00_x_594.00_mm)" Case Is = "A0" MediaName = "ISO_expand_A0_(841.00_x_1189.00_mm)" End Select
Wo ich immernoch am zweifeln bin, wenn ich von dem Adobe PDF Plotter die CanoncialMediaNames ermittele, dann kommen die Formate wie oben in dem Screen-Shot User134,User173 ... Ich kann nicht sehen, welches Format das ist z.b. ISO_A4_(210.00_x_297.00_MM, das sind eigentlich die Infos, die ich benötige, der User kann sich unter User134 nichts vorstellen. Hoffe ich denke nicht zu kompliziert.
Gruss fb.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 24. Mrz. 2009 15:29 <-- editieren / zitieren --> Unities abgeben:
Verdammt dass ist so frustrierend, man ist so kurz vorm Ziel und kommt nicht weiter. Wenn ich doch nur müßte wie ich die Ausgelesenen Medianames des Adobe PDF Plotters in ein logisches Format bekomme. Ich versuche grad mit Reverse Engineering ranzukommen, ich versuche die "userXXX" Medianames zu drucken und gucke im Adobe welche größe dann die Seite hat :-( User134 ... kommt Fehler beim plotten User173 ... 190,5 * 254,0mm User32767 ... 210,0 * 297,0mm = A4 User148 ... kommt Fehler beim plotten Aber das kann doch nicht der richtige Weg sein?
Gruss fb. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 24. Mrz. 2009 17:14 <-- editieren / zitieren --> Unities abgeben:
Guten Abend, ich habe es jetzt per Reverse Engineering ermittelt, ich setze dass dann in meinem VB Programm als Matrix um, ich fülle die Combobox mit dem lokalisierten Namen, eventuell noch die Maße und bevor ich plotte setze ich sie in User... um. Anbei noch eine Excel-Tabelle mit der Matrix, viell. kann sie irgendwann jemand gebrauchen und muß sich nicht die Mühe machen :-) Schönen Abend noch! Gruss fb. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 26. Mrz. 2009 07:39 <-- editieren / zitieren -->
Hi, und weil ich gestern ein ähnliches Problem hatte, anbei noch ein CodeSchnippsel. Den Fehler den ich hatte, war eine Paarung aus Windows-XP (SP2), Adobe PDF-Drucker und AutoCAD 2007, da konnte man zwar in den Druckereinstellungen ein Seitenformat definieren, z.B. A0q (für A0 Querformat), wenn man dieses dann im Plotterdialog ausgewählt hat, war zwar das Papierformat A0q sichtbar, aber zeigte in der Graphik (kleine Rahmenvoransicht im Plotdialog) dann andere Dimensionen an. Also werden die Namen der Seiteneinrichtungen und die Abmessungen irgendwie falsch zueinander ausgewertet. Das passierte übrigends nicht auf Win2003-Server und auch nicht auf VISTA (jeweils auch mit AutoCAD 2007). Code: 'im folgenden wird <tPaperFormatName> mit A0h, A0q, A1h, A1q etc als Parmameter übergeben und damit wird geprüft, ob aus der Liste der verfügbaren Seiteneinrichtungen ein Format übereinstimmt. Dim tRetVal as Boolean = False For i As Integer = LBound(tMediaNames) To UBound(tMediaNames) PlotConfig.CanonicalMediaName = tMediaNames(i) 'papierformat festgelegt PlotConfig.GetPaperSize(tPageSizeX, tPageSizeY) tBorderLength = tPageSizeX + tPageSizeY Select Case Mid(tPaperFormatName, 2, 1) Case "0" : If Math.Abs(tBorderLength - (1189 + 841)) < 5 Then tRetVal = True Case "1" : If Math.Abs(tBorderLength - (841 + 594)) < 5 Then tRetVal = True Case "2" : If Math.Abs(tBorderLength - (594 + 420)) < 5 Then tRetVal = True Case "3" : If Math.Abs(tBorderLength - (420 + 297)) < 5 Then tRetVal = True Case "4" : If Math.Abs(tBorderLength - (297 + 210)) < 5 Then tRetVal = True End Select If tRetVal Then tRetVal = False 'dann pruefen wir auch noch das layout Select Case Mid(tPaperFormatName, 3, 1).ToUpper Case "Q" : tRetVal = (tPageSizeX > tPageSizeY) Case "H" : tRetVal = (tPageSizeY > tPageSizeX) End Select End If If tRetVal Then Exit For Next
Vielleicht hilfts nochmal, - alfred - ------------------ www.hollaus.at |
| Hardwareentwickler Fluid Sensorik (m/w/d) | International präsent und erfolgreich setzt die familiengeführte ifm?Unternehmensgruppe seit 1969 höchste Qualitätsstandards und technische Meilensteine in der Automatisierungsbranche. An unserem Standort in Tettnang am Bodensee suchen wir Sie bei der ifm prover gmbh als Hardwareentwickler Fluid Sensorik (m/w/d) Kennziffer: 2024-2933
Sie wollten schon immer ? .... | Anzeige ansehen | Entwicklung |
|
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 26. Mrz. 2009 08:32 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|