ROYNIJKAMP 发表于 2015-5-4 06:10:02

更改土建图纸设置中的图纸单元

嗨,
我有自己的插件来检查图纸以应用我们公司的标准。
其中一个功能必须是检查Civil Drawingsettings中的绘图单元。
我可以检查当前的机组设定,但无法更改设定。
我想要的是当当前单位设置不是米时,将当前设置设置为米。我的代码:
Dim civilDoc As CivilDocument = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument
      Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
      Using trans As Transaction = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction()
            Try
                Dim civilUnits As String = civilDoc.Settings.DrawingSettings.UnitZoneSettings.DrawingUnits.ToString
                If Not civilUnits = "Meters" Then
                  ed.WriteMessage("Change UNITS from : " & civilUnits & " to Meters")
                  civilDoc.Settings.DrawingSettings.UnitZoneSettings.DrawingUnits = Settings.DrawingUnitType.Meters
                End If
            Catch ex As Autodesk.Civil.CivilException
                ed.WriteMessage("Exception Message is: " & ex.Message.ToString())
            Finally
                trans.Commit()
            End Try
      End Using
上述代码导致以下错误:
************** Exception Text **************
System.ArgumentNullException: Value cannot be null.
   at Autodesk.Civil.AttributeHelper.putAttributeGeneric(UInt32 attributeId, IAeccAttributeBin* pAttrBin, Int32 newValue, AeccUserParam* userParam)
   at Autodesk.Civil.AttributeHelper.putAttributeInt(UInt32 attributeId, AcDbObjectId* ObjectId, Int32 newValue)
   at Autodesk.Civil.Settings.SettingsUnitZone.set_DrawingUnits(DrawingUnitType newValue)
   at AnaconToolSet.tabProcessDrawing.checkCivilDrawingSettings()
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
有人能给我指一下正确的方向吗?
**** Hidden Message *****

Jeff_M 发表于 2015-5-4 09:50:50

我要大胆猜测您调用它的表单是无模式表单或调色板集,在任何一种情况下,您都需要在编辑设置之前锁定绘图。我使用C#,但我能够从无模式表单中复制错误并像这样解决:私有空button1_Click(对象发送者,EventArgs e)。
{。
使用(DocumentLock lk=Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())。
{。
民间文档civdoc=CivilApplication.ActiveDocument;。
DrawingUnitType单元=civdoc.Settings.DrawingSettings.UnitZoneSettings.DrawingUnits;。
如果(单位==DrawingUnitType.Feet)。
{。
civdoc.Settings.DrawingSettings.UnitZoneSettings.DrawingUnitsDrawingUnitType.Meters。
}。
}。
}。
页: [1]
查看完整版本: 更改土建图纸设置中的图纸单元