/// <summary> /// Internal constructor for the AdaptiveComponent wrapper /// </summary> /// <param name="pts">Points to use as reference</param> /// <param name="f">Face to use as reference</param> /// <param name="fs">FamilySymbol to place</param> private AdaptiveComponent(double[][] pts, Face f, FamilySymbol fs) { // if the family instance is present in trace... var oldFam = ElementBinder.GetElementFromTrace<Autodesk.Revit.DB.FamilyInstance>(Document); // just mutate it... if (oldFam != null) { InternalSetFamilyInstance(oldFam); if (fs.InternalFamilySymbol.Id != oldFam.Symbol.Id) InternalSetFamilySymbol(fs); InternalSetUvsAndFace(pts.ToUvs(), f.InternalFace ); return; } // otherwise create a new family instance... TransactionManager.Instance.EnsureInTransaction(Document); var fam = AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance(Element.Document, fs.InternalFamilySymbol); if (fam == null) throw new Exception("An adaptive component could not be found or created."); InternalSetFamilyInstance(fam); InternalSetUvsAndFace(pts.ToUvs(), f.InternalFace); TransactionManager.Instance.TransactionTaskDone(); }
/// <summary> /// Create an adaptive component by uv points on a face. /// </summary> /// <param name="uvs">An array of UV pairs</param> /// <param name="face">The face on which to place the AdaptiveComponent</param> /// <param name="face">The face on which to place the AdaptiveComponent</param> /// <returns></returns> public static AdaptiveComponent ByParametersOnFace(double[][] uvs, Face face, FamilySymbol familySymbol) { if (uvs == null) { throw new ArgumentNullException("uvs"); } if (face == null) { throw new ArgumentNullException("face"); } if (familySymbol == null) { throw new ArgumentNullException("familySymbol"); } return new AdaptiveComponent(uvs, face, familySymbol); }
static FamilyInstance ByUvsOnFace(FamilySymbol fs, Vector uv, Face f) { throw new NotImplementedException(); }