所以 需要 用arx开发制作成dll,由net 调用 。
//Tool.h
#pragma once
using namespace System;
using namespace Autodesk::AutoCAD::DatabaseServices;
using namespace Autodesk::AutoCAD::Geometry;
using namespace Autodesk::AutoCAD::Runtime;
namespace ahlzl
{
public ref class Tools
{
public:
Tools(void);
// 创建直线
static ObjectId CreateLine(Point3d startPt, Point3d endPt);
};
}
//Tool.cpp
#include "stdafx.h"
#include "Toos.h"
namespace ahlzl
{
Tools::Tools(void)
{
}
// 创建直线
ObjectId Tools::CreateLine(Point3d startPt, Point3d endPt)
{
AcGePoint3d ge_StartPt = GETPOINT3D(startPt);
AcGePoint3d ge_EndPt = GETPOINT3D(endPt);
AcDbLine* pLine = new AcDbLine(ge_StartPt, ge_EndPt);
AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
AcDbBlockTable* pBt;
pDb->getBlockTable(pBt, AcDb::kForRead);
AcDbBlockTableRecord* pBtr;
pBt->getAt(ACDB_MODEL_SPACE, pBtr, AcDb::kForWrite);
AcDbObjectId entId;
pBtr->appendAcDbEntity(entId, pLine);
pBt->close();
pBtr->close();
pLine->close();
return ToObjectId(entId);
}
}
''工程引用 上面代码生成的dll
Imports ahlzl
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime
Namespace WrapperTest
Public Class WrapperTest
<CommandMethod("DLine")>
Public Sub DrawLineTest()
Dim entId As ObjectId = Tools.CreateLine(New Point3d(0.0, 0.0, 0.0), New Point3d(8.0, 3.0, 0.0))
End Sub
End Class
End Namespace