关于CAD二次开发 用.net 后台式读取不到Ole2Frame,却用arx可以取到。

所以 需要 用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

猜你喜欢

转载自blog.csdn.net/laocooon/article/details/119879761