C# Revit 2014 API PromptForFamilyInstancePlacement方法

C# Revit 2014 API PromptForFamilyInstancePlacement方法,c#,instance,revit,C#,Instance,Revit,我正在尝试使用loadrevitfamily()加载Revit文件,并希望用户在Revit中的当前项目上放置特定的族符号。我的代码如下: public void loadRevitFamily(String f) { //Filename without extension String fname = Path.GetFileNameWithoutExtension(f); Family family = null; F

我正在尝试使用loadrevitfamily()加载Revit文件,并希望用户在Revit中的当前项目上放置特定的族符号。我的代码如下:

public void loadRevitFamily(String f)
    {
        //Filename without extension
        String fname = Path.GetFileNameWithoutExtension(f);

        Family family = null;
        FamilySymbol familyFound = null;

        Transaction t = new Transaction(s_document, "Test");
        t.Start();

        s_document.LoadFamily(f, out family);
        t.Commit();
        FilteredElementCollector familyCollector = new FilteredElementCollector(s_document);
        familyCollector.OfClass(typeof(FamilySymbol));

        foreach (FamilySymbol sym in familyCollector)
        {
            if (sym.Family.Name == fname)
            {
                familyFound = sym;
            }
        }
        UIDocument uidoc = new UIDocument(s_document);
        uidoc.PromptForFamilyInstancePlacement(familyFound);
    }   

但它不允许我放置符号。请提供任何帮助。

我相信这与您尝试放置的族的宿主方式有关(面、工作平面、垂直面等)。在Revit 2014及更早版本中,PromptForFamilyInstancePlacement不允许用户更改宿主方法、更改视图等。请尝试放置未宿主的族,然后查看是否得到相同的结果。你也可以看看这个变通方法


您是否看到任何错误消息或其他有用的调试信息?请提供有关您的问题的详细信息,以便其他人能够帮助您,确保没有错误。我生成了代码并运行Revit 2014。然后,我从外部网站下载revit文件,并使用loadrevitfamily()将下载的文件加载到我的拖放列表中。在那之后,我就开始做Revit项目了。PromptForFamilyInstancePlacement由于某些原因无法工作。能否在foreach循环和PromptForFamilyInstancePlacement调用之间的代码中添加一些内容,以确保familyFound不为null?类似于if(familyFound==null){TaskDialog.Show(“Error”,“familyFound为null”);}是的,我尝试了,得到的错误是“子事务只能在打开的事务中活动”。然后我将Transactionmode更改为Automatic,在这里我得到另一个错误,即“不允许从运行在API上下文之外的外部应用程序启动事务”。任何建议。