上下文代码可以多提供点吗? 另外问下这些代码是想做什么 应该是做打印功能吧,我看了下常规这么写:
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
Layout lo = (Layout)tr.GetObject(btr.LayoutId, OpenMode.ForRead);
// We need a PlotInfo object
// linked to the layout
PlotInfo pi = new PlotInfo();
pi.Layout = btr.LayoutId;
// We need a PlotSettings object
// based on the layout settings
// which we then customize
PlotSettings ps = new PlotSettings(lo.ModelType);//flag
ps.CopyFrom(lo);
// The PlotSettingsValidator helps
// create a valid PlotSettings object
PlotSettingsValidator psv = PlotSettingsValidator.Current;
// We’ll plot the extents, centered and
// scaled to fit
psv.SetPlotType(ps, ZwSoft.ZwCAD.DatabaseServices.PlotType.Extents);//flag
谢谢回答。我粘贴的代码上下文信息是已经有了打印设置(设置过程类似您贴的代码),名字是pageSetupName,代码根据这个名字从acPlSetDic获取打印设置的ObjectId,根据ObjectId获取Object,然后就在这一步出错了。查看调式信息,正常返回ObjectId(acPlSetId ),if语句判断ObjectId的类型也是PlotSettings,但用(PlotSettings)…转换时却出错了,提示无法转换。 这段代码只在中望CAD2022、2023、2024出错,中望CAD2025可正常运行
我查到了我们系统的记录,确实存在这个问题,不过反馈的开发商特别的少所以老版本没有解决,所以在新版本才修复的。 建议是老版本可否修改成PlotSettings ps = new PlotSettings(lo.ModelType);的方式创建,按我经验实际应用过程中很少设计师在dwg中保存打印配置,如果用已保存的打印配置估计只能处理少部分场景, new PlotSettings配置可以自己配置打印信息应该更适合。