从外部文件复制打印设置
大家好,我尝试了这里发布的一个示例和一条无法解释的错误消息
eObjectType是异常
Dim cpl As New PlotSettings(False)
cpl.CopyFrom(pl)
有人有什么想法吗
以下原始代码发布在:
http://www.theswamp.org/index.php?topic=31867.msg398478#msg398478
(感谢杰夫H。)
Public Sub AddPlotSettings(ByVal PlotSettingsFile As String, ByVal PlotSettingsName As String)
Dim CurrentDatabase As Database = HostApplicationServices.WorkingDatabase
Dim SourceDatabase As New Database(False, True)
SourceDatabase.ReadDwgFile(PlotSettingsFile, FileOpenMode.OpenForReadAndAllShare, True, "")
Using currentTransaction As Transaction = CurrentDatabase.TransactionManager.StartTransaction
Using sourceTransaction As Transaction = SourceDatabase.TransactionManager.StartTransaction
Dim sourcePlotDic As DBDictionary = SourceDatabase.PlotSettingsDictionaryId.GetObject(OpenMode.ForRead)
If sourcePlotDic.Contains(PlotSettingsName) Then
Dim objID As ObjectId = sourcePlotDic.GetAt(PlotSettingsName)
Dim pl As PlotSettings = objID.GetObject(OpenMode.ForRead)
Dim cpl As New PlotSettings(False)
cpl.CopyFrom(pl)
cpl.AddToPlotSettingsDictionary(CurrentDatabase)
Dim bt As BlockTable = CurrentDatabase.BlockTableId.GetObject(OpenMode.ForRead)
Dim btr As BlockTableRecord = bt(BlockTableRecord.PaperSpace).GetObject(OpenMode.ForRead)
Dim lytobjID As ObjectId = btr.LayoutId.GetObject(OpenMode.ForRead).ObjectId
Dim lytps As PlotSettings = lytobjID.GetObject(OpenMode.ForWrite)
lytps.CopyFrom(cpl)
End If
currentTransaction.Commit()
End Using
End Using
End Sub
我不得不说,这里是一个很棒的资源。大家好
**** Hidden Message ***** 糟糕,没有释放数据库 杰夫:不确定这会有什么例外:
Dim cpl As New PlotSettings(False)
cpl.CopyFrom(pl)
或者我只是错过了什么? 我不这么认为,但我注意到了。 你能发布调用它的代码吗? 我使用的是样品的精确副本。(至少我没有,我修改了它…)
Public Sub AddPlotSettings(ByVal PlotSettingsFile As String, ByVal PlotSettingsName As String)
Dim CurrentDatabase As Database = HostApplicationServices.WorkingDatabase
Dim SourceDatabase As New Database(False, True)
SourceDatabase.ReadDwgFile(PlotSettingsFile, FileOpenMode.OpenForReadAndAllShare, True, "")
Using currentTransaction As Transaction = CurrentDatabase.TransactionManager.StartTransaction
Using sourceTransaction As Transaction = SourceDatabase.TransactionManager.StartTransaction
Dim sourcePlotDic As DBDictionary = CType(SourceDatabase.PlotSettingsDictionaryId.GetObject(OpenMode.ForRead), DBDictionary)
If sourcePlotDic.Contains(PlotSettingsName) Then
Dim objID As ObjectId = sourcePlotDic.GetAt(PlotSettingsName)
Dim pl As PlotSettings = CType(objID.GetObject(OpenMode.ForRead), PlotSettings)
Dim cpl As New PlotSettings(False)
cpl.CopyFrom(pl)
cpl.AddToPlotSettingsDictionary(CurrentDatabase)
Dim bt As BlockTable = CType(CurrentDatabase.BlockTableId.GetObject(OpenMode.ForRead), BlockTable)
Dim btr As BlockTableRecord = CType(bt(BlockTableRecord.PaperSpace).GetObject(OpenMode.ForRead), BlockTableRecord)
Dim lytobjID As ObjectId = btr.LayoutId.GetObject(OpenMode.ForRead).ObjectId
Dim lytps As PlotSettings = CType(lytobjID.GetObject(OpenMode.ForWrite), PlotSettings)
lytps.CopyFrom(cpl)
End If
currentTransaction.Commit()
End Using
End Using
End Sub
参见附件
如果我想跳到下一行,我会被拒绝 试试这个,消息框显示什么? Public Sub AddPlotSettings(ByVal plotsettings file为字符串,ByVal PlotSettingsName为字符串)。
Dim current Database As Database = HostApplicationServices,工作数据库。
Dim layName As String = Nothing 。
将SourceDatabase用作新数据库(假,真)。
源数据库,ReadDwgFile(PlotSettingsFile,FileOpenMode。OpenForReadAndAllShare,True," " " 。
使用currentTransaction作为Transaction = CurrentDatabase,transaction manager . start transaction 。
。
使用sourceTransaction作为Transaction = SourceDatabase,transaction manager . start transaction 。
Dim sourcePlotDic As db dictionary = source database,PlotSettingsDictionaryId . GetObject(open mode,ForRead)。
If sourcePlotDic,包含(PlotSettingsName) Then。
Dim objID As ObjectId = sourcePlotDic,GetAt(PlotSettingsName)。
Dim pl As PlotSettings = objID,GetObject(OpenMode,ForRead)。
Dim CPL As New plot settings(False)。
应用,ShowAlertDialog(pl,GetType.Name)。
应用,ShowAlertDialog(CPL . gettype . name)。
cpl.CopyFrom(pl)。
CPL . addtoplotsettingdictionary(当前数据库)。
Dim Bt As block table = current database,block table id . GetObject(OpenMode,ForRead)。
Dim btr As block table record = Bt(block table record,图纸空间),GetObject(OpenMode。ForRead)。
Dim lay As Layout = btr,LayoutId.GetObject(OpenMode,ForWrite)。
铺设,CopyFrom(cpl)。
layName = lay,布局名称。
结束If。
源事务,Commit()。
结束使用。
当前事务,Commit()。
结束使用。
。
结束使用。
如果不是layName = Nothing,则。
布局管理器,current . current layout = layName 。
结束If。
。
结束Sub。
。
剧情设置,剧情设置 你试图复制模型空间的绘图设置,是吗?您需要更新该功能。您可以只检查您的coping ModelType属性的plotsettings来设置构造函数,类似于 Public Sub AddPlotSettings(ByVal plotsettings file作为字符串,ByVal PlotSettingsName作为字符串)。
Dim current Database As Database = HostApplicationServices,工作数据库。
Dim layName As String = Nothing 。
将SourceDatabase用作新数据库(假,真)。
源数据库,ReadDwgFile(PlotSettingsFile,FileOpenMode。OpenForReadAndAllShare,True," " " 。
使用currentTransaction作为Transaction = CurrentDatabase,transaction manager . start transaction 。
。
使用sourceTransaction作为Transaction = SourceDatabase,transaction manager . start transaction 。
Dim sourcePlotDic As db dictionary = source database,PlotSettingsDictionaryId . GetObject(open mode,ForRead)。
If sourcePlotDic,包含(PlotSettingsName) Then。
Dim objID As ObjectId = sourcePlotDic,GetAt(PlotSettingsName)。
Dim pl As PlotSettings = objID,GetObject(OpenMode,ForRead)。
Dim cpl作为新的绘图设置(pl,ModelType)。
cpl.CopyFrom(pl)。
CPL . addtoplotsettingdictionary(当前数据库)。
Dim Bt As block table = current database,block table id . GetObject(OpenMode,ForRead)。
将btr调成块表记录。
如果pl,型号然后。
btr = bt(BlockTableRecord,模型空间),GetObject(OpenMode。ForRead)。
否则。
btr = bt(BlockTableRecord,图纸空间),GetObject(OpenMode。ForRead)。
结束If。
。
Dim lay As Layout = btr,LayoutId.GetObject(OpenMode,ForWrite)。
铺设,CopyFrom(cpl)。
layName = lay,布局名称。
结束If。
源事务,Commit()。
结束使用。
当前事务,Commit()。
结束使用。
。
结束使用。
如果不是layName = Nothing,则。
布局管理器,current . current layout = layName 。
结束If。
。
End Sub(结束订阅)。
页:
[1]
2