按 pipe-section-region-performance-plan.md 的 Phase 0 落地。目的不是提速,而是先拿到
三个决定性数字,再判断截面缓存(Phase 1)到底值不值得做:
1) 每次截面恢复多贵(µs),一次开图共多少次;
2) 同一份 SAT 文本被重复恢复多少次(唯一 hash 数 / 模拟命中率)——直接决定缓存收益上限;
3) 临时文件写入次数与字节数(杀软扫描影响面),以及打开图纸时的回写次数。
改动:
- 新增 inc/SectionPerfCounter.h + CoreLibrary/SectionPerfCounter.cpp
- Scope(QPC 计时)+ NoteRegionText(FNV-1a 64 位 hash,统计唯一数与模拟命中)
+ NoteTempFile + NoteWriteBack + Dump/Reset
- 计数器实例放在函数内 static:CoreLibrary 是静态库且只被 CoreCommand 链接,
所以 CoreCommand.arx 里只有一份,两个入口共用
- AecDbEwPipeBase.cpp:RegionAcisInDwgInFields / RegionAcisoutDwgOutFields 接入
- CoreTools.cpp:StringToRegion 两个重载 / RegionToString 接入
- EarthWorm.cpp:注册 ENVIPERFDUMP / ENVIPERFRESET(仅 Debug)
- CoreLibrary/cmakelists.txt 加一个源文件
- 计划文档的 Phase 0 补上实际命令与采集项
开关:启动 CAD 前 set AEC_PERF_COUNTER=1;命令 ENVIPERFDUMP 打印并追加到
%TEMP%\aec_section_perf.txt,ENVIPERFRESET 清零。
Release 下 Enabled() 恒为 false,调用点只剩一次 bool 判断。
不改任何几何逻辑与存盘格式。
验证:R230 Debug 编译通过(CoreLibrary_BAL_REMOTE、CoreCommand_BAL_REMOTE,无新增 warning),
产物已自动部署到 c:\ShangHuaSoft\Envi3D-2026-M\R230\。
R190 未在本机编译(缺 v100 工具集);代码刻意只用 C++98 特性,控制台输出改走 %hs,
避开了 &wstring[0] 这类老 STL 上的写法问题。
尚未做 CAD 实测:需要开图后跑 ENVIPERFDUMP 才看得到数据。
187 lines
4.6 KiB
CMake
187 lines
4.6 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
project(CoreLibrary)
|
|
|
|
set(SOURCES
|
|
"AcDbProxyAcGiEntity.cpp"
|
|
"AcDbX3dSolid.cpp"
|
|
"AcDbXFloorFrame.cpp"
|
|
"AcPolylineJig.cpp"
|
|
"Aec3dFaceplan.cpp"
|
|
"AECAngleWatch.cpp"
|
|
"AecComplexCurveDraw.cpp"
|
|
"AecCoverBooleanOper.cpp"
|
|
"SectionPerfCounter.cpp"
|
|
"AecDb3dRoad.cpp"
|
|
"AecDb3dRoadAxisLine.cpp"
|
|
"AecDb3dRoadFitting.cpp"
|
|
"AecDbArcStair.cpp"
|
|
"AecDbAssembleWell.cpp"
|
|
"AecDbBDPipeBase.cpp"
|
|
"AecDbBeam.cpp"
|
|
"AecDbBlackHoleEntity.cpp"
|
|
"AecDbBossHolder.cpp"
|
|
"AecDbBuriedOutletDoghouse.cpp"
|
|
"AecDbCableDoghouse.cpp"
|
|
"AecDbClimbStair.cpp"
|
|
"AecDbColumn.cpp"
|
|
"AecDbConnectDoghouse.cpp"
|
|
"AecDbCornerStair.cpp"
|
|
"AecDbCrossStair.cpp"
|
|
"AecDbDirPosition.cpp"
|
|
"AecDbDoubleMulStair.cpp"
|
|
"AecDbEarthWorm.cpp"
|
|
"AecDbEarthWormFitting.cpp"
|
|
"AecDbECableTray.cpp"
|
|
"AecDbECFitting.cpp"
|
|
"AecDbEscapeHatchHouse.cpp"
|
|
"AecDbEwCable.cpp"
|
|
"AecDbEwEquipment.cpp"
|
|
"AecDbEwFitting.cpp"
|
|
"AecDbEwFlexiblePipe.cpp"
|
|
"AecDbEwPipe.cpp"
|
|
"AecDbEwPipeBase.cpp"
|
|
"AecDbEwPipeDim.cpp"
|
|
"AecDbExtendedEntity.cpp"
|
|
"AecDbFlume.cpp"
|
|
"AecDbGlassCurtainWall.cpp"
|
|
"AecDbGuardBar.cpp"
|
|
"AecDbHanger.cpp"
|
|
"AecDbHolder.cpp"
|
|
"AecDbHvacDuct.cpp"
|
|
"AecDbHvacFitting.cpp"
|
|
"AecDbInsulation.cpp"
|
|
"AecDbLandForm.cpp"
|
|
"AecDbLineStair.cpp"
|
|
"AecDbMRPLineStair.cpp"
|
|
"AecDbMultiPartEntity.cpp"
|
|
"AecDbOpening.cpp"
|
|
"AecDbParaLlelStair.cpp"
|
|
"AecDbParamEquipment.cpp"
|
|
"AecDbPathSectionSymbDim.cpp"
|
|
"AecDbPipeDoghouse.cpp"
|
|
"aecdbpipehanger.cpp"
|
|
"AecDbPoolCell.cpp"
|
|
"AecDbPortRoom.cpp"
|
|
"AecDbRectCornerStair.cpp"
|
|
"AecDbRiverGroove.cpp"
|
|
"AecDbRoof.cpp"
|
|
"AecDbScissorsStair.cpp"
|
|
"AecDbSectionView.cpp"
|
|
"AecDbShEarthWorm.cpp"
|
|
"AecDbSlab.cpp"
|
|
"AecDbSludgePipe.cpp"
|
|
"AecDbTongWall.cpp"
|
|
"AecDbTriangleStair.cpp"
|
|
"AecDbVenDoghouse.cpp"
|
|
"AecDbWall.cpp"
|
|
"AecDbWeir.cpp"
|
|
"AecDbWell.cpp"
|
|
"AecDbX3dGroup.cpp"
|
|
"AecDbX3dPart.cpp"
|
|
"AecDbX3dPartEntity.cpp"
|
|
"AecDbXApron.cpp"
|
|
"AecDbXBG.cpp"
|
|
"AecDbXDormerWindow.cpp"
|
|
"AecDbXEquipment.cpp"
|
|
"AecDbXStep.cpp"
|
|
"AecDbXXXDoghouse.cpp"
|
|
"AecDbZLineStair.cpp"
|
|
"AecEwEndDeepCloneAssocMake.cpp"
|
|
"AecFloorViewDataRecord.cpp"
|
|
"AecInfCmdGrip.cpp"
|
|
"AecMInterfaces.cpp"
|
|
"AecNodeDoubleClickEdit.cpp"
|
|
"AECStatusRecord.cpp"
|
|
"AecSupportFunc.cpp"
|
|
"AecUnknownContext.cpp"
|
|
"AecUnknownSubEntityTraits.cpp"
|
|
"AecUnknownViewportDraw.cpp"
|
|
"AecUnknownViewportGeometry.cpp"
|
|
"AecUnknownWorldDraw.cpp"
|
|
"AecUnknownWorldGeometry.cpp"
|
|
"AecWall2DJoin.cpp"
|
|
"AecWall3DJoin.cpp"
|
|
"AecWallJoinDraw.cpp"
|
|
"AuxTools.cpp"
|
|
"BCMenu.cpp"
|
|
"BitAnswer.cpp"
|
|
"BrepOper.cpp"
|
|
"DrawingFlowData.cpp"
|
|
"encryption.cpp"
|
|
"EquInsDirJig.cpp"
|
|
"Geom.cpp"
|
|
"geometry2json.cpp"
|
|
"hzip.cpp"
|
|
"ImpHvacCross.cpp"
|
|
"ImpHvacElbow.cpp"
|
|
"ImpHvacOffset.cpp"
|
|
"ImpHvacReducer.cpp"
|
|
"ImpHvacTee.cpp"
|
|
"ImpMD5.cpp"
|
|
"InternetSessionEx.cpp"
|
|
"KTCadTempOverrides.cpp"
|
|
"KTCadUtility.cpp"
|
|
"KTCADUtilityEx.cpp"
|
|
"KTEntityDragMgr.cpp"
|
|
"KTEntityDumb.cpp"
|
|
"KTInfoMonitor.cpp"
|
|
"KTObjLifeMgr.cpp"
|
|
"KTSetting.cpp"
|
|
"KTTempTol.cpp"
|
|
"MFCDbDwgFiler.cpp"
|
|
"ParamEquImpl.cpp"
|
|
"parseFamilyForRevit.cpp"
|
|
"PointInPoly.cpp"
|
|
"UIIBorderLine.cpp"
|
|
"UIIBoundary.cpp"
|
|
"UIITable.cpp"
|
|
"unzip.cpp"
|
|
"XEquipmentImpl.cpp"
|
|
"aecdbterrain.cpp"
|
|
"aecdbgroupopening.cpp"
|
|
"aecdbzlinexopening.cpp"
|
|
"aecdblinesegstair.cpp"
|
|
"aecdbbasestair.cpp"
|
|
"./hgrid/dimension.cxx"
|
|
"./hgrid/hgrid.cxx"
|
|
"./hgrid/hpolygon.cxx"
|
|
"./hgrid/mgconst.cxx"
|
|
"./hgrid/mgexcept.cxx"
|
|
"./implement/stdafx.cpp"
|
|
"aecdbarcsegstair.cpp"
|
|
"aecdbrectstair.cpp"
|
|
"aecdbascent.cpp"
|
|
"aecdbbalcony.cpp"
|
|
"breptools.cpp"
|
|
"aecdbcamera.cpp"
|
|
"hlrcutoption.cpp"
|
|
"aecdbpingfadim.cpp"
|
|
"aecdbdimscalezone.cpp"
|
|
"aecdbjoggedcamera.cpp"
|
|
)
|
|
|
|
get_encryption_modes(ENCRYPTION_MODES)
|
|
|
|
foreach(MODE IN LISTS ENCRYPTION_MODES)
|
|
|
|
set(_Target "CoreLibrary_${MODE}")
|
|
|
|
add_library(${_Target} STATIC ${SOURCES})
|
|
|
|
target_precompile_headers(${_Target} PRIVATE ./implement/StdAfx.h)
|
|
|
|
target_link_objectarx(${_Target} EARTHWORM_EXPORT ".lib")
|
|
|
|
target_include_directories(${_Target} PRIVATE "./implement")
|
|
|
|
target_link_libraries(${_Target} PRIVATE
|
|
$<$<CONFIG:Debug>:CoreImplement>
|
|
ThirdParty::modernGlue
|
|
)
|
|
|
|
set_encryption_definitions_and_output_path(${_Target} "${MODE}")
|
|
|
|
set_target_properties(${_Target} PROPERTIES FOLDER "SH/Core/CoreLibrary")
|
|
|
|
endforeach() |