Files
2026-09-28 21:19:38 +08:00

567 lines
14 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
// Description:
// AutoCAD ObjectARX开发包KTCadKernel,提供对ObjectARX的二次封装,
// 使的开发更加方便,使用时只要将本文件#include进stdafx.h文件中即可,
// 并且大部分的arx的头文件都不需要在别处包含了
// Company: Kingtouch Software Corporation. Copyright 2002-2005
// Author: WangYongguang
// Date: 2002.05.01
// 根据ObjectARX版本不同链接不同库文件
/* 郭建明 于 2017/04/09 修改
从2010开始,vc++ 可以用切换 PlatformToolset 的方式编译低版本的二进制代码。
所以,不再需要在工程中自己为ADS宏定义版本(例如: ADS=19),
只需要 ADS=$(PlatformToolsetVersion) 即可自动赋值。
故 ADS 由以前的 ObjectARX 版本号,改为 VC++ PlatformToolset 号。
这样一来,只需要切换相应的 PlatformToolset 就可以编译各个CAD平台所使用的二进制文件。
PS:
ADS 宏 改为在 earthworm.props 文件内定义。
版本映射:
| vc platformtoolset | arx | vc平台 | cad |
| 80 | 17 | vc2005 | 2007-2009 |
| 90 | 18 | vc2008 | 2010-2012 |
| 100 | 19 | vc2010 | 2013-2014 |
| 110 | 20 | vc2012 | 2015-2016 |
| 140 | 21 | vc2015 | 2017 | R21 使用vc2015编译
| 140 | 22 | vc2015 | 2018 | R22 使用vc2015编译
| 141 | 23 | vc2017 | 2019-2020 |
| 142 | 24 | vc2019 | 2021-2023 | R24.0-R24.2 使用vc2019编译
| 143 | 24.3| vc2022 | 2024 | R24.3使用vc2022编译
| 143 | 25 | vc2022 | 2025-2026 |
| 143 | 26 | vc2022 | 2027- |
*/
#ifndef ZWCAD
// 以前通过 toolset 来倒推 ARX,现在已经不行了. R24.3,R25,R26都使用 v143 编译
// 所以,现在打包是使用 cmake 工具, ARX 直接从外部传入
#ifdef CMAKE
// ARX 从 cmake传入,不再使用toolset倒推
// 对 objectarx库文件的依赖再cmake中定义
#else
#if ADS == 80 // VC++2005
#define ARX 17
#elif ADS == 90 // VC++2008
#define ARX 18
#elif ADS == 100 // VC++2010
#define ARX 19
#elif ADS == 110 // VC++2012
#define ARX 20
#elif ADS == 140 && !defined(R22) // VC++2015
#define ARX 21
#elif ADS == 140 && defined(R22) // VC++2015
#define ARX 22
#elif ADS == 141 // VC++2017
#define ARX 23
#elif ADS == 142 // VC++2019
#define ARX 24
#elif ADS == 143 // VC++2022
#define ARX 25
// 注意,以下ARX不要再用此方式编译调试了,toolset已经不能倒推ARX了,所以,如果要编译R26,请使用 cmake,
// #elif ADS == 143 // VC++2022
// #define ARX 26
// #elif ADS == 143 // VC++2022
// #define ARX 27
#endif
// 下面定义去要依赖的objectarx的库
#if ARX == 17
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acedapi.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "acdb17.lib")
#pragma comment(lib, "acge17.lib")
#pragma comment(lib, "acISMobj17.lib")
#pragma comment(lib, "aecmodeler50.lib")
#pragma comment(lib, "adui17.lib")
#pragma comment(lib, "acui17.lib")
#pragma comment(lib, "acgex17.lib")
#pragma comment(lib, "acbr17.lib")
#endif // arx 17
#if ARX == 18
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acedapi.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "acdb18.lib")
#pragma comment(lib, "acge18.lib")
#pragma comment(lib, "acISMobj18.lib")
#pragma comment(lib, "aecmodeler60.lib")
#pragma comment(lib, "adui18.lib")
#pragma comment(lib, "acui18.lib")
#pragma comment(lib, "acgex18.lib")
#pragma comment(lib, "acbr18.lib")
#endif // arx 18
#if ARX == 19
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "accore.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "acdb19.lib")
#pragma comment(lib, "acge19.lib")
#pragma comment(lib, "acISMobj19.lib")
#pragma comment(lib, "aecmodeler.lib")
#pragma comment(lib, "adui19.lib")
#pragma comment(lib, "acui19.lib")
#pragma comment(lib, "ac1st19.lib")
#pragma comment(lib, "acgex19.lib")
#pragma comment(lib, "acbr19.lib")
#endif // arx 19
#if ARX == 20
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "accore.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "acdb20.lib")
#pragma comment(lib, "acge20.lib")
#pragma comment(lib, "acISMobj20.lib")
#pragma comment(lib, "aecmodeler.lib")
#pragma comment(lib, "adui20.lib")
#pragma comment(lib, "acui20.lib")
#pragma comment(lib, "ac1st20.lib")
#pragma comment(lib, "acdrawbridge.lib")
#pragma comment(lib, "acgex20.lib")
#pragma comment(lib, "acbr20.lib")
#endif // arx 20
#if ARX == 21
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "accore.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "acdb21.lib")
#pragma comment(lib, "acge21.lib")
#pragma comment(lib, "aecmodeler.lib")
#pragma comment(lib, "acISMobj21.lib")
#pragma comment(lib, "adui21.lib")
#pragma comment(lib, "acui21.lib")
#pragma comment(lib, "ac1st21.lib")
#pragma comment(lib, "acdrawbridge.lib")
#pragma comment(lib, "acgex21.lib")
#pragma comment(lib, "acbr21.lib")
#endif // arx 21
#if ARX == 22
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "accore.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "acdb22.lib")
#pragma comment(lib, "acge22.lib")
#pragma comment(lib, "aecmodeler.lib")
#pragma comment(lib, "acISMobj22.lib")
#pragma comment(lib, "adui22.lib")
#pragma comment(lib, "acui22.lib")
#pragma comment(lib, "ac1st22.lib")
#pragma comment(lib, "acdrawbridge.lib")
#pragma comment(lib, "acgex22.lib")
#pragma comment(lib, "acbr22.lib")
#endif // arx 22
#if ARX == 23
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "accore.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "acdb23.lib")
#pragma comment(lib, "acge23.lib")
#pragma comment(lib, "aecmodeler.lib")
#pragma comment(lib, "acISMobj23.lib")
#pragma comment(lib, "adui23.lib")
#pragma comment(lib, "acui23.lib")
#pragma comment(lib, "ac1st23.lib")
#pragma comment(lib, "acdrawbridge.lib")
#pragma comment(lib, "acgex23.lib")
#pragma comment(lib, "acbr23.lib")
#endif // arx 23
#if ARX == 24
#pragma comment(lib, "acpal.lib")
#pragma comment(lib, "ac1st24.lib")
#pragma comment(lib, "acdb24.lib")
#pragma comment(lib, "acge24.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "acISMobj24.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "accore.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "aecmodeler.lib")
#pragma comment(lib, "adui24.lib")
#pragma comment(lib, "acui24.lib")
#pragma comment(lib, "acdrawbridge.lib")
#pragma comment(lib, "acgex24.lib")
#pragma comment(lib, "acbr24.lib")
#pragma comment(lib, "acgeoment.lib")
#endif // arx 24
#if ARX == 25
#pragma comment(lib, "acpal.lib")
#pragma comment(lib, "ac1st25.lib")
#pragma comment(lib, "acdb25.lib")
#pragma comment(lib, "acge25.lib")
#pragma comment(lib, "acgiapi.lib")
#pragma comment(lib, "acISMobj25.lib")
#pragma comment(lib, "rxapi.lib")
#pragma comment(lib, "acad.lib")
#pragma comment(lib, "accore.lib")
#pragma comment(lib, "axdb.lib")
#pragma comment(lib, "aecmodeler.lib")
#pragma comment(lib, "adui25.lib")
#pragma comment(lib, "acui25.lib")
#pragma comment(lib, "acdrawbridge.lib")
#pragma comment(lib, "acgex25.lib")
#pragma comment(lib, "acbr25.lib")
#pragma comment(lib, "acgeoment.lib")
#endif // arx 25
#endif // !CMAKE
#else // ZWCAD
#if ADS == 141 // VC++2017
#if defined(R24)
#define ARX 24
#pragma message("Automatically linking with ZRX 2024.")
#elif defined(R25)
#define ARX 25
#pragma message("Automatically linking with ZRX 2025.")
#elif defined(R26)
#define ARX 26
#pragma message("Automatically linking with ZRX 2026.")
#endif
#pragma comment(lib, "ZwBase.lib")
#pragma comment(lib, "ZWCAD.lib")
#pragma comment(lib, "ZwAuto.lib")
#pragma comment(lib, "ZwRx.lib")
#pragma comment(lib, "ZwZrx.lib")
#pragma comment(lib, "ZwGeometry.lib")
#pragma comment(lib, "ZwDatabase.lib")
#pragma comment(lib, "ZwDatabaseMgd.lib")
#pragma comment(lib, "ZwdUI.lib")
#pragma comment(lib, "ZwGs.lib")
#pragma comment(lib, "ZwTc.lib")
#pragma comment(lib, "ZwUI.lib")
#pragma comment(lib, "ZwBrep.lib")
#pragma comment(lib, "ZwAECModeler.lib")
#endif
#endif
#if ARX > 18
#include "acedads.h"
#include "adsmigr.h"
#endif
#ifndef ZWCAD
#if ARX > 19
#if defined(acedCommand)
#undef acedCommand
#endif
#define acedCommand Old_Function_Must_Switch_To_SHacedCommand
#if defined(ads_command)
#undef ads_command
#endif
#define ads_command Old_Function_Must_Switch_To_SHads_command
#if defined(acedCmd)
#undef acedCmd
#endif
#define acedCmd Old_Function_Must_Switch_To_SHacedCmd
#define SHacedCommand(rtype, ...) acedCommandS((rtype), __VA_ARGS__)
#define SHacedCmd(rb) acedCmdS((rb))
#define SHads_command SHacedCommand
#else
#define SHacedCommand(rtype, ...) acedCommand((rtype), __VA_ARGS__)
#define SHacedCmd(rb) acedCmd((rb))
#define SHads_command SHacedCommand
#endif
#else
#if ARX > 19
#define SHacedCommand(rtype, ...) acedCommand((rtype), __VA_ARGS__)
#define SHacedCmd(rb) acedCmdS((rb))
#define SHads_command SHacedCommand
#else
#define SHacedCommand(rtype, ...) acedCommand((rtype), __VA_ARGS__)
#define SHacedCmd(rb) acedCmd((rb))
#define SHads_command SHacedCommand
#endif
extern void zrxPostCommand(wchar_t const *);
#ifndef acrxEntryPoint
#define acrxEntryPoint zcrxEntryPoint
#endif
#ifndef acedPostCommand
#define acedPostCommand zrxPostCommand
#endif
#ifndef fromAcDbTextStyle
#define fromAcDbTextStyle fromZcDbTextStyle
#endif
#ifndef ASMBodyCopy
#define ASMBodyCopy ZSMBodyCopy
#endif
#ifndef getLockedASMBody
#define getLockedASMBody getLockedZSMBody
#endif
#ifndef unlockASMBody
#define unlockASMBody unlockZSMBody
#endif
#ifndef getLockedWritableASMBody
#define getLockedWritableASMBody getLockedWritableZSMBody
#endif
#ifndef commitWritableASMBody
#define commitWritableASMBody commitWritableZSMBody
#endif
#ifndef setASMBody
#define setASMBody setZSMBody
#endif
#endif
#if (ARX > 19)
#include "acedCmdNF.h"
#endif
#pragma region INCLUDE
#include "accmd.h"
#include "acdb.h"
#include "acdbabb.h"
#include "aced.h"
#include "acedinpt.h"
#include "acestext.h"
#include "acgi.h"
#include "acgiutil.h"
#include "AcGsManager.h"
#include "acgs.h"
#include "gs.h"
#include "AcDbLMgr.h"
#include "actrans.h"
#include "adesk.h"
#include "adeskabb.h"
#include "ads.h"
#include "adscodes.h"
#include "adsdef.h"
#include "adsdlg.h"
#include "adslib.h"
#include "adsrxdef.h"
#include "appinfo.h"
#include "dbacis.h"
#include "dbapserv.h"
#include "dbaudita.h"
#include "dbbody.h"
#include "dbboiler.h"
#include "dbcfilrs.h"
#include "dbcurve.h"
#include "dbdate.h"
#include "dbdict.h"
#include "dbdictdflt.h"
#include "dbelipse.h"
#include "dbents.h"
#include "dbfcf.h"
#include "dbfiler.h"
#include "dbfilter.h"
#include "dbframe.h"
#include "dbgroup.h"
#include "dbhandle.h"
#include "dbhatch.h"
#include "dbid.h"
#include "dbidar.h"
#include "dbidmap.h"
#if ARX < 23
#include "dbid_ops.h"
#endif
#include "dbimage.h"
#include "dbindex.h"
#include "dbintar.h"
#include "dbjig.h"
#include "dblayout.h"
#include "dblead.h"
#include "dbltrans.h"
#include "dblyfilt.h"
#include "dblyindx.h"
#include "dbmain.h"
#include "dbmline.h"
#include "dbmstyle.h"
#include "dbmtext.h"
#include "dbole.h"
#include "dbpl.h"
#include "dbplhldr.h"
#include "dbplotsettings.h"
#include "dbproxy.h"
#include "dbptrar.h"
#include "dbray.h"
#include "dbregion.h"
#include "dbsol3d.h"
#include "dbspline.h"
#include "dbspfilt.h"
#include "dbspindx.h"
#include "dbsubeid.h"
#include "dbsymtb.h"
#include "dbxline.h"
#include "dbxrecrd.h"
#include "dbxutil.h"
#include "summinfo.h"
#include "geapln3d.h"
#include "gearc2d.h"
#include "gearc3d.h"
#include "geassign.h"
#include "geblok2d.h"
#include "geblok3d.h"
#include "gebndpln.h"
#include "gecbndry.h"
#include "gecint2d.h"
#include "gecint3d.h"
#include "gecomp2d.h"
#include "gecomp3d.h"
#include "gecone.h"
#include "gecspl2d.h"
#include "gecspl3d.h"
#include "gecurv2d.h"
#include "gecurv3d.h"
#include "gecylndr.h"
#include "gedblar.h"
#include "gedll.h"
#include "gedwgio.h"
#include "gedxfio.h"
#include "geell2d.h"
#include "geell3d.h"
#include "geent2d.h"
#include "geent3d.h"
#include "geextc2d.h"
#include "geextc3d.h"
#include "geextsf.h"
#include "gefileio.h"
#include "gefiler.h"
#include "gegbl.h"
#include "gegblabb.h"
#include "geintarr.h"
#include "geintrvl.h"
#include "gekvec.h"
#include "gelent2d.h"
#include "gelent3d.h"
#include "gelibver.h"
#include "geline2d.h"
#include "geline3d.h"
#include "gelnsg2d.h"
#include "gelnsg3d.h"
#include "gemat2d.h"
#include "gemat3d.h"
#include "genurb2d.h"
#include "genurb3d.h"
#include "genurbsf.h"
#include "geoffc2d.h"
#include "geoffc3d.h"
#include "geoffsf.h"
#include "gepent2d.h"
#include "gepent3d.h"
#include "geplanar.h"
#include "geplane.h"
#include "geplin2d.h"
#include "geplin3d.h"
#include "gepnt2d.h"
#include "gepnt3d.h"
#include "geponc2d.h"
#include "geponc3d.h"
#include "geponsrf.h"
#include "gepos2d.h"
#include "gepos3d.h"
#include "gept2dar.h"
#include "gept3dar.h"
#include "geray2d.h"
#include "geray3d.h"
#include "gescl2d.h"
#include "gescl3d.h"
#include "gesent2d.h"
#include "gesent3d.h"
#include "gesphere.h"
#include "gesurf.h"
#include "getol.h"
#include "getorus.h"
#include "gevc2dar.h"
#include "gevc3dar.h"
#include "gevec2d.h"
#include "gevec3d.h"
#include "gevptar.h"
#include "gexbndsf.h"
#include "graph.h"
#include "imgdef.h"
#include "imgent.h"
#include "imgvars.h"
#include "lngtrans.h"
#include "migrtion.h"
#include "oleaprot.h"
#include "ol_errno.h"
#include "rxboiler.h"
#include "rxclass.h"
#include "rxdefs.h"
#include "rxdict.h"
#include "rxditer.h"
#include "rxdlinkr.h"
#include "rxiter.h"
#include "rxkernel.h"
#include "rxmfcapi.h"
#include "rxnames.h"
#include "rxobject.h"
#include "rxregsvc.h"
#include "rxsrvice.h"
#include "xgraph.h"
#include "adui.h"
#include "acui.h"
#include "acuiDialog.h"
#include <AcExtensionModule.h>
#include "amodeler.h"
#include "Point3d.h"
#include "axlock.h"
#include "dbsubd.h"
#include "dbobjptr.h"
#pragma endregion
#ifndef ZWCAD
extern Adesk::Boolean acedPostCommand(const TCHAR *pszCmd);
#endif
#include <memory>
// 为 vc2008 的 std::tr1::shared_ptr 注入std空间
#if defined(_MSC_VER) && (_MSC_VER <= 1500) // VC2008 及更早版本
namespace std
{
using tr1::shared_ptr;
using tr1::weak_ptr;
}
#endif
#ifdef min
#undef min
#endif
#ifdef max
#undef max
#endif