GumbyCAD 发表于 2014-3-17 07:53:56

从外部文件复制打印设置

大家好,
我尝试了这里发布的一个示例和一条无法解释的错误消息
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 *****

GumbyCAD 发表于 2014-3-17 10:44:08

糟糕,没有释放数据库

GumbyCAD 发表于 2014-3-17 19:03:34

杰夫:不确定这会有什么例外:
                        Dim cpl As New PlotSettings(False)
                        cpl.CopyFrom(pl)

或者我只是错过了什么?

GumbyCAD 发表于 2014-3-17 19:17:51

我不这么认为,但我注意到了。

GumbyCAD 发表于 2014-3-17 19:35:13

你能发布调用它的代码吗?

GumbyCAD 发表于 2014-3-17 19:43:15

我使用的是样品的精确副本。(至少我没有,我修改了它…)
    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

参见附件

bargool 发表于 2014-3-17 19:43:55

如果我想跳到下一行,我会被拒绝

GumbyCAD 发表于 2014-3-17 21:01:15

试试这个,消息框显示什么?    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。

GumbyCAD 发表于 2014-3-17 21:11:49

剧情设置,剧情设置

GumbyCAD 发表于 2014-3-17 21:38:37

你试图复制模型空间的绘图设置,是吗?您需要更新该功能。您可以只检查您的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
查看完整版本: 从外部文件复制打印设置