EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 571|回复: 1
打印 上一主题 下一主题

Revit二次开发错误提示集锦

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12408

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-9 13:16:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
根据异常提示,快速准确判断错误原因,找到错误位置,是开发的基本功。

一、事务(待定)
错误提示:
Autodesk.Revit.Exceptions.InvalidOperationException:A sub-transaction can only be active inside an open Transaction.

                               
登录/注册后可看大图

错误原因:
为了方便使用Add-In-Manager调试,把命令统一写成如下格式: [Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public
class HelloWorld : IExternalCommand
{
   
public Result Execute(ExternalCommandData commandData, ref
string messages, ElementSet elements)
    {
        MessageBox.Show(
"Hello World");
        
return Result.Succeeded;
    }
}


但是在创建Revit对象比如Pipe的时候,这样的属性就会提示上面的错误,必须这样限制,使用手写Add-In文件。[Transaction(TransactionMode.Automatic)]
[Regeneration(RegenerationOption.Manual)]
[Journaling(JournalingMode.NoCommandData)]
public
class NewPipeCommand : IExternalCommand
{
   
public Result Execute(ExternalCommandData commandData, ref
string messages, ElementSet elements)
    {
        UIApplication uiApp
= commandData.Application;
        Document doc
= uiApp.ActiveUIDocument.Document;
        CreateNewPipe(doc);
        
return Result.Succeeded;
    }
   
public Pipe CreateNewPipe(Document document)
    {
        FilteredElementCollector collector
=
new FilteredElementCollector(document);
        collector.OfClass(
typeof(PipeType));
        PipeType pipeType
= collector.FirstElement() as PipeType;

        Pipe pipe
=
null;
        
if (null
!= pipeType)
        {
            
//create pipe between 2 points
            XYZ p1 =
new XYZ(0, 0, 0);
            XYZ p2
=
new XYZ(10, 0, 0);
            pipe
= document.Create.NewPipe(p1, p2, pipeType);
        }
        
return pipe;
    }
}


NewPipe.addin <?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="Command">
<Assembly>F:\RevitCodes\RevitCodes\bin\Debug\RevitCodes.dll</Assembly>
<ClientId>738dfa84-e739-48c9-892c-4a397f08b49f</ClientId>
<FullClassName>RevitCodes.NewPipeCommand</FullClassName>
<Text>NewPipe</Text>
<Description>""</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
</AddIn>
</RevitAddIns>

这样便可以正常运行,创建Pipe
Automatic自动
Manual手动


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-12-1 00:40

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表