| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: eNoMatchingMedia beim Plotten in eine Datei (2094 mal gelesen)
|
mOfl Mitglied
Beiträge: 22 Registriert: 25.09.2010
|
erstellt am: 24. Nov. 2010 16:38 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich versuche, den aktuellen Ausschnitt eines Layouts über eine eigene Methode zu plotten: Code: private void plot(string filename) { setPaperSpace(); Application.SetSystemVariable("BACKGROUNDPLOT", 0); try { using (Transaction tr = AcadDB.TransactionManager.StartTransaction()) { try { LayoutManager layMgr = LayoutManager.Current; ObjectId loObjId = layMgr.GetLayoutId(layMgr.CurrentLayout); Layout lo = (Layout) tr.GetObject(loObjId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead); PlotSettings ps = new PlotSettings(lo.ModelType); ps.CopyFrom(lo); PlotInfo pi = new PlotInfo(); pi.Layout = loObjId; pi.OverrideSettings = ps; PlotEngine pe = PlotFactory.CreatePublishEngine(); pe.BeginPlot(null, null); PlotInfoValidator validator = new PlotInfoValidator(); validator.MediaMatchingPolicy = Autodesk.AutoCAD.PlottingServices.MatchingPolicy.MatchEnabled; validator.Validate(pi); pe.BeginDocument(pi, Application.DocumentManager.MdiActiveDocument.Database.Filename, null, 1, true, filename); PlotPageInfo pageInfo = new PlotPageInfo(); pe.BeginPage(pageInfo, pi, true, null); pe.BeginGenerateGraphics(null); pe.EndGenerateGraphics(null); pe.EndPage(null); pe.EndDocument(null); pe.EndPlot(null); pe.Destroy(); tr.Commit(); } catch (System.Exception ex) { AcadEditor.WriteMessage(ex.Message); } } } catch (System.Exception ex2) { AcadEditor.WriteMessage("Fehler: " + ex2.Message); } }
Das funktioniert auf meinem Rechner ohne Probleme. Auf zwei anderen Rechnern, auf denen die Methode eingesetzt wird, gibt es aber eine Exception mit der Ausgabe "eNoMatchingMedia", irgendwo in den Zeilen Code: pe.BeginPlot(null, null);PlotInfoValidator validator = new PlotInfoValidator(); validator.MediaMatchingPolicy = Autodesk.AutoCAD.PlottingServices.MatchingPolicy.MatchEnabled; validator.Validate(pi);
Irgendwo deshalb, weil ich noch knapp einen Monat außer Landes bin und das nicht selbst überprüfen kann mit entsprechenden Debug-Ausgaben. Das Googlen der Fehlermeldung hat mich auch nicht weiter gebracht (einziger Treffer: http://forums.autodesk.com/t5/Autodesk-ObjectARX/Plot-to-file-eNoMatchingMedia-error/td-p/1678577 ), außer dass ich vermute, dass die Exception in der Zeile Code: validator.Validate(pi);
auftritt. Wie der Mensch aus jenem Thread das Problem gelöst hat, verstehe ich nicht. Da in dem Thread von DevideOverride die Rede ist, habe ich mal versucht, etwas wie Code: PlotConfig pc = new PlotConfig(); pc.CopyFrom(lo); pi.DeviceOverride = pc;
vor der Validierung einzufügen, aber new PlotConfig() lässt sich so nicht benutzen. PlotConfigManager.CurrentConfig erzeugt eine Null-Pointer-Exception. Wie gesagt, ich nutze den gleichen Code, die gleiche Datei und auch die gleiche AutoCAD-Version (Civil 3D 2010) wie die anderen Rechner. Auf den Rechnern, wo eNoMatchingMedia auftritt, sind zudem noch andere AutoCAD-Versionen installiert (2008 und noch frühere). Auf meinem Rechner, wo es funktioniert, sind zusätzlich die ganzen Sachen für die Entwicklung installiert, wie das ObjectARX SDK, aber daran sollte es ja wohl nicht liegen. Ich wäre sehr froh, wenn mir einer helfen könnte! Gruß mOfl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 24. Nov. 2010 16:56 <-- editieren / zitieren -->
Hi, wirklich helfen kann ich nicht, den Code jetzt so zu adaptieren, dass dieser bei mir lauffähig wird, ist ein wenig üppig für meine Zeit jetzt. Guck mal >>>diesen Thread<<< ... ein wenig drüber und drunter, da wird die Auswertung des Papierformats schon öfter angesprochen. Und die Fehlermeldung klingt sehr danach, dass ein Papierformat definiert ist, dass in der Seiteneinrichtung zwar eingestellt ist (weil in der DWG gespeichert), aber der Plotter oder zumindest das Papierformat nicht der Einstellung entspricht. Für das Plotten verwende ich i.d.R. die Variante über COM (ist und bleibt leichter beherrschbar). Zur exakten Bestimmung der Fehlerposition (die ja durchaus wichtig ist) steppe mal durch den Code durch, dann solltest Du auch zur genauen Fehlerzeile kommen, sonst tappst Du zum Teil im Dunklen. - alfred - ------------------ www.hollaus.at |
mOfl Mitglied
Beiträge: 22 Registriert: 25.09.2010
|
erstellt am: 24. Nov. 2010 18:12 <-- editieren / zitieren --> Unities abgeben:
Hallo alfred, danke für die Antwort! Wie gesagt, da ich gerade im Ausland bin und auf meinem System alles funktioniert, kann ich den Fehler nicht exakt ermitteln, der nur bei den anderen Rechnern auftritt. Ich werde auf jeden Fall mal versuchen, das Papierformat extra zu definieren (momentan übernehme ich ja eigentlich alles aus dem aktuellen Layout lo). Was meinst du mit Plotten über COM? Ich rufe die Methode plot() ja innerhalb eines CAD-Befehls einer Bibliothek auf, die ich über netload lade. Sind da COM-Befehle möglich/sinnvoll? Gruß mOfl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 24. Nov. 2010 18:25 <-- editieren / zitieren -->
Hi, >> Was meinst du mit Plotten über COM? nicht vollständig, aber >>>hier<<< ist die simple Version von Plotten über Nutzung der ActiveX/COM-Schnittstelle. >> Ich werde auf jeden Fall mal versuchen, das Papierformat extra zu definieren
Ich vermute, Du kannst es reproduzieren, wenn Du Dir eine Zeichnung von wem senden lässt, dessen Layout auf einen Plotter verweist, den Dein System noch nicht kennt und dessen Papierformat ebenfalls Deinem System nicht bekannt ist. >> kann ich den Fehler nicht exakt ermitteln
Wenn Du dem Anwender die DLL-DebugVersion (+ PDB und XML, die von VisualStudio generiert werden) zur Verfügung stellst, dann kannst Du bei der Exception mehr als nur die Message auslesen (bis hin zur genauen Zeilennummer in Deinem SourceCode), das hilft! Jedenfalls viel Erfolg, - alfred - ------------------ www.hollaus.at |
mOfl Mitglied
Beiträge: 22 Registriert: 25.09.2010
|
erstellt am: 11. Dez. 2010 19:31 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von a.n.: Ich vermute, Du kannst es reproduzieren, wenn Du Dir eine Zeichnung von wem senden lässt, dessen Layout auf einen Plotter verweist, den Dein System noch nicht kennt und dessen Papierformat ebenfalls Deinem System nicht bekannt ist.
Hallo alfred, vielen Dank für deine Hilfe! Das war in der Tat das Problem. Wird das Papierformat neu auf dem Zielsystem eingerichtet, funktioniert alles. Gruß mOfl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|