#pragma once

class McRxClass;

namespace Mx
{


	ARXDLL  McRxClass* newMcRxClass(const MxString& sClassName,
		const MxString& sParentClassName, McRxMakeFunType pMakeFun, LPCTSTR pszDxf0, LPCTSTR appName = NULL, bool isDynamicRegen = false, short iEntityVersion = 1);

	ARXDLL  McRxClass* newMcRxClass(
		const MxString& sClassName,
		const MxString& sParentClassName,
		int         dwgVer,
		int         maintVer,
		int         proxyFlags = 0,
		McRxMakeFunType pMakeFun = NULL,
		LPCTSTR dxfName = NULL,
		LPCTSTR appName = NULL,
		bool isDynamicRegen = false,
		short iEntityVersion = 1);


	// -------------------------------------------------------------------------
	// Summary:
	// 		通过类名得到类信息
	// Parameters:
	// 		sClassName - 类名
	// Returns:
	// 		由类名字符串返回该类的类信息对象
	// -------------------------------------------------------------------------
	ARXDLL  McRxClass* ClassDictionaryAt(const MxString& sClassName);


	// -------------------------------------------------------------------------
	// Summary:
	// 		向命令行输出一个字符串，该有函数是变参数的，可以格式化一个字符串，format是ASCII格式。
	// -------------------------------------------------------------------------
	ARXDLL int            mcutPrintf(LPCMSTR format, ...);

	// -------------------------------------------------------------------------
	// Summary:
	// 		向命令行输出一个字符串
	// -------------------------------------------------------------------------
	ARXDLL int            mcutPrompt(LPCMSTR pszStr);

	// Summary:
	// 		释放一个链表数据
	// -------------------------------------------------------------------------
	ARXDLL int            mcutRelRb (struct resbuf *rb);

	// -------------------------------------------------------------------------
	// Summary:
	// 		新创建一个resbuf链表数据，返回的链表数据在不使用时调用mcutRelRb释放内存
	// Parameters:
	// 		v - 链表的数据类型
	// -------------------------------------------------------------------------
	ARXDLL struct resbuf *mcutNewRb (int v);

	// -------------------------------------------------------------------------
	// Summary:
	// 		创建一个链表数据，该函数是变参数的，可以一下传入多个链表数据，返回的链表数据在不使用时调用mcutRelRb释放内存
	// Parameters:
	// 		rtype	-	参数类型
	//		...		-	变参数
	// Remarks:
	// 		例如:构建一个圆弧过滤链表
	// 		<code>
	// 			struct resbuf* filter = acutBuildList(RTDXF0,_T("ARC"),RTNONE )
	// 		</code>
	// -------------------------------------------------------------------------
	ARXDLL struct resbuf *mcutBuildList (int rtype, ...);

	// -------------------------------------------------------------------------
	// Summary:
	// 		由圆弧上的三个点计算圆弧的凸度
	// Parameters:
	// 		p1				-	圆弧的开始点
	//		p2				-	圆弧上的一点
	//		p3				-	圆弧的结束点
	//		dBulge			-	返回计算得到的凸度
	// Returns:
	// 		成功返回true
	// -------------------------------------------------------------------------
	ARXDLL bool mcutCalcBulge(McGePoint2d pt1,McGePoint2d pt2,McGePoint2d pt3,OUT double& dBulge);


	ARXDLL bool isFileExist(const MxString& sFileName);
	
}
