FamilyInstance instance = documentProject.Create.NewFamilyInstance(location, symbol, StructuralType.NonStructural);
这句代码在操作只需要一个定位点的族时工作得很好,但是在族需要宿主或者两个定位点时就不工作了。我应该如何确认使用何种NewFamilyInstance方法呢?
void TestAllOverloads( Document doc, XYZ startPoint, XYZ endPoint, FamilySymbol familySymbol ) { StructuralType stNon = StructuralType.NonStructural; StructuralType stBeam = StructuralType.Beam; Autodesk.Revit.Creation.Document cd = doc.Create; View view = doc.ActiveView; SketchPlane sk = view.SketchPlane; Level level = view.Level; // 根据用户指定的两点创建“线” Curve curve = doc.Application.Create.NewLineBound( startPoint, endPoint ); // 根据用户指定的两点得到“创建方向” XYZ dirVec = endPoint - startPoint; bool done = false; int index = 1; while( !done ) { FamilyInstance instance = null; // 尝试不同的 NewFamilyInstance() 重载版本 try { switch( index ) { // public FamilyInstance NewFamilyInstance( // XYZ location, FamilySymbol symbol, // StructuralType structuralType ); case 1: instance = cd.NewFamilyInstance( startPoint, familySymbol, stNon ); break; case 2: instance = cd.NewFamilyInstance( startPoint, familySymbol, stBeam ); break; // public FamilyInstance NewFamilyInstance( // XYZ origin, FamilySymbol symbol, // View specView ); case 3: instance = cd.NewFamilyInstance( startPoint, familySymbol, null ); break; case 4: instance = cd.NewFamilyInstance( startPoint, familySymbol, view ); break; // public FamilyInstance NewFamilyInstance( // XYZ location, FamilySymbol symbol, // Element host, StructuralType structuralType ); case 5: instance = cd.NewFamilyInstance( startPoint, familySymbol, sk, stNon ); break; case 6: instance = cd.NewFamilyInstance( startPoint, familySymbol, sk, stBeam ); break; // public FamilyInstance NewFamilyInstance( // XYZ location, FamilySymbol symbol, // XYZ referenceDirection, Element host, // StructuralType structuralType ); case 7: instance = cd.NewFamilyInstance( startPoint, familySymbol, dirVec, sk, stNon ); break; case 8: instance = cd.NewFamilyInstance( startPoint, familySymbol, dirVec, sk, stBeam ); break; // public FamilyInstance NewFamilyInstance( // Curve curve, FamilySymbol symbol, // Level level, StructuralType structuralType ); case 9: instance = cd.NewFamilyInstance( curve, familySymbol, null, stNon ); break; case 10: instance = cd.NewFamilyInstance( curve, familySymbol, null, stBeam ); break; case 11: instance = cd.NewFamilyInstance( curve, familySymbol, level, stNon ); break; case 12: instance = cd.NewFamilyInstance( curve, familySymbol, level, stBeam ); break; // public FamilyInstance NewFamilyInstance( // XYZ location, FamilySymbol symbol, // Level level, StructuralType structuralType ); case 13: instance = cd.NewFamilyInstance( startPoint, familySymbol, null, stNon ); break; case 14: instance = cd.NewFamilyInstance( startPoint, familySymbol, null, stBeam ); break; case 15: instance = cd.NewFamilyInstance( startPoint, familySymbol, level, stNon ); break; case 16: instance = cd.NewFamilyInstance( startPoint, familySymbol, level, stBeam ); break; // public FamilyInstance NewFamilyInstance( // XYZ location, FamilySymbol symbol, // Element host, Level level, // StructuralType structuralType ); case 17: instance = cd.NewFamilyInstance( startPoint, familySymbol, null, stNon ); break; case 18: instance = cd.NewFamilyInstance( startPoint, familySymbol, null, stBeam ); break; case 19: instance = cd.NewFamilyInstance( startPoint, familySymbol, sk, stNon ); break; case 20: instance = cd.NewFamilyInstance( startPoint, familySymbol, sk, stBeam ); break; default: done = true; break; } } catch { } // 如果族实例被创建,标记使用的重载版本编号。 if( null != instance ) { Parameter param = instance.get_Parameter( "InstanceIndex" ); if( null != param ) { param.Set( index ); } } index++; } }