public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uidoc = uiApp.ActiveUIDocument;
Document doc = uidoc.Document;
//基于面的引用 doc.Create.NewFamilyInstance(face, xyz, xyz, symbol);
using (Transaction ts = new Transaction(doc, "BIM"))
{
ts.Start();
Reference refer = uidoc.Selection.PickObject(ObjectType.Element, "");
Wall wall = doc.GetElement(refer) as Wall;
Face face = PaintFace(uiApp, wall);
PlanarFace pf = face as PlanarFace;
XYZ xyz = refer.GlobalPoint;
xyz = face.Project(xyz).XYZPoint;
XYZ normal = pf.FaceNormal;
//XYZ normal = wall.Orientation;
XYZ refdir = normal.CrossProduct(XYZ.BasisZ);
FamilySymbol symbol = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_SecurityDevices).Where(o => o.Name == "左右通用").First() as FamilySymbol;
symbol.Activate();
FamilyInstance instance = doc.Create.NewFamilyInstance(face, xyz, refdir, symbol);
ts.Commit();
}
// 基于SketchPlane
using (Transaction tt = new Transaction(doc, "BIM"))
{
tt.Start();
SubTransaction sub = new SubTransaction(doc);
sub.Start();
Plane plane = new Plane(new XYZ(1, 0, 0), XYZ.Zero);
SketchPlane sp = SketchPlane.Create(doc, plane);
doc.ActiveView.SketchPlane = sp;
doc.ActiveView.ShowActiveWorkPlane();
sub.Commit();
Level level=new FilteredElementCollector(doc).OfClass(typeof(Level)).OrderBy(o=>(o as Level).ProjectElevation).First() as Level;
FamilySymbol symbol = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_SecurityDevices).Where(o => o.Name == "左右通用").First() as FamilySymbol;
symbol.Activate();
FamilyInstance instance = doc.Create.NewFamilyInstance(XYZ.Zero,symbol,sp,level,StructuralType.NonStructural);
tt.Commit();
}
return Result.Succeeded;
}