I want to draw a circle in AutoCAD by wcf.
Here is the code in AutoCAD
<ServiceContract()> _
Public Interface IAutoCADService
<OperationContract()> _
Function DrawCircle(X As Double, Y As Double, Radius As Double) As String
End Interface
Public Class AutoCADPipeService
Implements IAutoCADService
<CommandMethod("StartService")> _
Public Sub StartService()
Dim Doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Try
Dim MyAutoCADHost As New ServiceHost(GetType(AutoCADPipeService))
MyAutoCADHost.AddServiceEndpoint(GetType(IAutoCADService), New NetNamedPipeBinding(), "net.pipe://localhost/AutoCADService")
MyAutoCADHost.Open()
Catch ex As System.Exception
End Try
End Sub
Public Function DrawCircle(X As Double, Y As Double, Radius As Double) As String Implements IAutoCADService.DrawCircle
Dim Doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Try
Using Doc.LockDocument(DocumentLockMode.ProtectedAutoWrite, Nothing, Nothing, True)
Using Trans As Transaction = Doc.TransactionManager.StartTransactionEx
Dim MS As BlockTableRecord = Trans.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Doc.Database), OpenMode.ForWrite)
Dim Cir As New Circle(New Point3d(X, Y, 0), Vector3d.ZAxis, Radius)
DrawCircle = MS.AppendEntity(Cir).Handle.ToString
Trans.AddNewlyCreatedDBObject(Cir, True)
Trans.Commit()
End Using
End Using
Catch ex As Exception
DrawCircle = ""
End Try
End Function
End Class
here is the code in Demo
Dim ep As New EndpointAddress("net.pipe://localhost/AutoCADService")
Dim factory As ChannelFactory(Of IAutoCADService) = New ChannelFactory(Of IAutoCADService)(New NetNamedPipeBinding(), ep)
Dim cad As IAutoCADService = factory.CreateChannel()
cad.DrawCircle(0, 0, 10)
DrawCircle method doesn't work,why?