From 4fc910d6fd60a41ce7fa2433db5e641b0af96dc2 Mon Sep 17 00:00:00 2001 From: company-desktop-computer Date: Thu, 22 Oct 2026 10:24:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9B=B2=E7=BA=BF=E9=80=9A=E9=81=93?= =?UTF-8?q?=E9=87=8D=E5=BB=BA=E6=88=AA=E9=9D=A2=E6=97=B6=E9=98=B2=E5=B4=A9?= =?UTF-8?q?=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RegionFromCurvesDwgInFields 里两处: - isRegionNull(pRegion) && isRegionNull(pRegionBig) 改为 ||,原写法要求 两个都无效才跳过,实际 pRegionBig 此时必非空,条件恒假,无效 region 照样进布尔运算 - booleanOper 改走已有的 rawBooleanOperWrapper,ACIS 内部异常时由 SEH 捕获,不再直接崩 CAD 顺带 delete pRegion:arRegPtrs 不拥有对象,原来 subtract 完没有释放。 曲线通道只读,spline 参数在写端从未落盘,几何缺失无法靠读端修复, 本次只处理崩溃路径,重建逻辑与启发式保持原样。 --- SourceCode/Code2026/CoreLibrary/AecDbEwPipeBase.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/SourceCode/Code2026/CoreLibrary/AecDbEwPipeBase.cpp b/SourceCode/Code2026/CoreLibrary/AecDbEwPipeBase.cpp index 8317b37..9620505 100644 --- a/SourceCode/Code2026/CoreLibrary/AecDbEwPipeBase.cpp +++ b/SourceCode/Code2026/CoreLibrary/AecDbEwPipeBase.cpp @@ -771,17 +771,19 @@ AcDbRegion *AecDbEwPipeBase::RegionFromCurvesDwgInFields(AcDbDwgFiler *pFiler, A arRegPtrs.removeAt(nPos); } - Acad::ErrorStatus es; for (int j = 0;j < arRegPtrs.length();j++) { pRegion = (AcDbRegion*)arRegPtrs.at(j); - if (isRegionNull(pRegion) && isRegionNull(pRegionBig)) + // 任一 region 无效就跳过,无效 region 参与布尔运算可能让 ACIS 崩溃 + if (isRegionNull(pRegion) || isRegionNull(pRegionBig)) { + delete pRegion; continue; } - es = pRegionBig->booleanOper(AcDb::kBoolSubtract, pRegion); + rawBooleanOperWrapper(pRegionBig, pRegion, AcDb::kBoolSubtract); + delete pRegion; } return pRegionBig; }