偶尔做做怪 发表于 2016-6-28 19:27:04

求助!vb.net wblcok图形到指定CAD文档后,原CAD文档无法保存或另存

    Public Shared Sub 输出DWG(TextInPaperSpace() As MText)

      Dim dm As DocumentCollection = Application.DocumentManager
      Dim doc As Document = Application.DocumentManager.MdiActiveDocument

      Dim ed As Editor = dm.MdiActiveDocument.Editor
      '获取当前数据库作为目标数据库
      Dim Db As Database = dm.MdiActiveDocument.Database
      doc.LockDocument()

      Dim optPoint As PromptPointOptions = New PromptPointOptions("\n请指定矩形一个角点")
      Dim resPoint As PromptPointResult = ed.GetPoint(optPoint)
      If (resPoint.Status <> PromptStatus.OK) Then Return

      '得到第一个角点的UCS坐标.
      Dim pt1 As Point3d = resPoint.Value

      '初始化矩形
      Dim polyLine As Polyline = New Polyline
      For i As Integer = 0 To 3

            polyLine.AddVertexAt(i, New Point2d(0, 0), 0, 0, 0)
      Next
      polyLine.Closed = True


      Dim RecJig As CsharpClass.RecJig = New CsharpClass.RecJig(pt1, polyLine)

      Dim resJig As PromptResult = ed.Drag(RecJig)

      If (resJig.Status = PromptStatus.OK) Then

            '窗选需要输出图形
            Dim resSel As PromptSelectionResult = ed.SelectCrossingWindow(polyLine.GetPoint3dAt(0), polyLine.GetPoint3dAt(2))
            Dim sSet As SelectionSet = resSel.Value
            If sSet Is Nothing Then Return

            Dim ids As ObjectIdCollection = New ObjectIdCollection(sSet.GetObjectIds())

            Dim ViewCenter As Point2d = New Point2d(polyLine.GetPoint3dAt(0).X + (polyLine.GetPoint3dAt(2).X - polyLine.GetPoint3dAt(0).X) / 2, _
                                                    polyLine.GetPoint3dAt(0).Y + (polyLine.GetPoint3dAt(2).Y - polyLine.GetPoint3dAt(0).Y) / 2)

            Dim 比例值 As Double = 1
            比例值 = 函数库.优化比例(RecJig.Width, RecJig.Height, 40, 250, 30, 150)
            Dim 比例 As New 绘图比例(比例值)

            Using trans As Transaction = Db.TransactionManager.StartTransaction()

                For Each id As ObjectId In ids

                  Dim ENT As Entity = trans.GetObject(id, OpenMode.ForWrite)
                  If TypeOf ENT Is Dimension Then

                        Dim dims As Dimension = CType(ENT, Dimension)

                        Dim dt As DimStyleTable = trans.GetObject(Db.DimStyleTableId, OpenMode.ForWrite)
                        Dim dtid As ObjectId = dt.Item(比例.比例字符)
                        dims.DimensionStyle = dtid
                        Db.Dimstyle = dtid
                        Dim dsr As DimStyleTableRecord = trans.GetObject(Db.Dimstyle, OpenMode.ForRead)
                        Db.SetDimstyleData(dsr)

                  End If


                Next
                trans.Commit()
            End Using


            doc.LockDocument().Dispose()

            Dim filename As String = "D:\试用版\绘图模板\模板.dwg" '小图模板

            Dim tagdoc As Document = dm.Open(filename, False)

            dm.MdiActiveDocument = tagdoc

            tagdoc.LockDocument()

            Dim tagdb As Database = tagdoc.Database
            Using trans As Transaction = tagdoc.TransactionManager.StartTransaction()

                Db.Wblock(tagdb, ids, tagdb.Ucsorg, DuplicateRecordCloning.Ignore)

                Dim lm As LayoutManager = LayoutManager.Current

                Dim layName As String = "布局1"

                '设置为当前布局
                lm.CurrentLayout = layName
                Dim vport As New Viewport
                vport.CenterPoint = New Point3d(148.5, 105, 0)
                vport.Width = 287
                vport.Height = 200
                tagdb.AddToPaperSpace(vport)
                vport.ViewDirection = New Vector3d(0, 0, 1)
                vport.CustomScale = 比例值

                trans.Commit()
            End Using

            For G As Integer = 0 To TextInPaperSpace.Length - 1
                函数库.AppendEntityToPaperSpace(TextInPaperSpace(G))
            Next


            Dim 文件夹名 As String = Path.GetDirectoryName(doc.Name) & "\零件图\"
            Dim 保存文件名 As String = "零件图"
            If Trim(TextInPaperSpace(2).Text) <> "" Then
                保存文件名 = TextInPaperSpace(2).Text
            Else
                保存文件名 = "零件图"
            End If

            Directory.CreateDirectory(文件夹名)
            Dim 另存文件名 As String = 文件夹名 & 保存文件名

            tagdoc.LockDocument.Dispose()
            tagdb.SaveAs(另存文件名 & ".dwg", DwgVersion.AC1015) '
            dm.MdiActiveDocument = tagdoc
            tagdoc.CloseAndDiscard()

      End If

    End Sub

以上代码运行完之后 ,原cad文档无法保存、另存

偶尔做做怪 发表于 2016-6-28 19:30:27

保存或另存时提示。dwg有命令正在执行!

偶尔做做怪 发表于 2016-6-29 23:08:47

问题解决了,不能直接用doc.LockDocument()   然后doc.LockDocument().Dispose()
必须
Using doc As DocumentLock = Application.DocumentManager.MdiActiveDocument.LockDocument
       ‘代码
end using
页: [1]
查看完整版本: 求助!vb.net wblcok图形到指定CAD文档后,原CAD文档无法保存或另存