图案填充向后移动和事务中止会导致AutoCAD崩溃
我正在研究将块爆炸到一定深度的东西。完成后,我将通过与BlockTableRecord关联的DrawOrderTable对象将模型空间中的所有阴影移到后面。在某个绘图中,它总是会导致错误“错误处理程序重新输入。立即退出。”其中消息框的标题为“AutoCAD错误中止”。这让我假设错误在AutoCAD的核心中,因为我无法用尝试/捕获块捕获错误。如果我擦除所有孵化实体,那么错误就会消失。如果我在交易中使用Commit,则没有问题。但是如果我使用Abort,我必须让所有项目恢复到原始状态,那么每次都会发生错误。我无法发布代码或绘图,但想知道我是否想错了?或者我是否应该将此传递给AutoDesk?或者有什么方法可以让绘图在我开始我的命令之前恢复到原始状态?
提前感谢。
编辑:我应该指出,该程序在所有其他测试的绘图中运行良好,只有这一个与孵化模式有问题。即使我先审核文件。
**** Hidden Message ***** 我有另一幅画展现了这一特点。我已经把问题缩小到3个图案填充和一些圆圈。发布的代码每次在此图形中都会使Autocad崩溃。如果我把电话从“点”改过来。将MoveToBottom()移动到点。MoveToTop()'然后一切都正常工作
将true或false传递给aRemoveAssoc并不重要
提前感谢,
蒂姆
公共void HatchBackCrash(){
Document doc=Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
数据库db=doc.Database
可块bt
使用(Transaction trans=db.TransactionManager.StartTransaction()){
bt=trans。GetObject(db.BlockTableId,OpenMode.ForRead,false,true)作为BlockTable
moveHatchBack(trans,bt[“*MODEL_SPACE]”,true)
trans.Abort()
}
}
公共静态void moveHatchBack(事务aTrans、ObjectId aBtrId、bool aRemoveAssoc){
dbobjectobj
DrawOrderTable点
BlockTableRecord btr
舱口帽
ObjectdCollection.hatIds=newObjectdCollection()
btr=aTrans。GetObject(aBtrId,OpenMode.ForRead,false,false)作为BlockTableRecord
foreach(btr中的ObjectId oid){
如果(oid.IsErased oid.IsNull| | oid.Iseffectivey擦除124;|!oid.IS有效)继续
obj=aTrans。GetObject(oid,OpenMode.ForRead,false,false)作为图案填充
如果(obj==null)继续
hatIds。添加(oid)
hat=obj作为图案填充
如果(aRemoveAssoc&帽子关联){
hat.UpgradeOpen()
帽子。关联=假
hat.open()
}
}
如果(hatIds.Count>0){
dot=aTrans。GetObject(btr.DrawOrderTableId,OpenMode.ForWrite,false,false)作为DrawOrder表
点。MoveToBottom(hatIds)
//点。MoveToTop(hatIds)
dot.open()
}
hatIds.Dispose()
}
Tim,如果你让交易通过 using 子句并超出范围而不是中止,会发生什么情况? 它仍然会崩溃AutoCAD。
页:
[1]