Esempio n. 1
0
        public ApplicationPlaceholderObject AdaptiveComponentToNative(AdaptiveComponent speckleAc)
        {
            var docObj = GetExistingElementByApplicationId(speckleAc.applicationId);

            string familyName = speckleAc["family"] as string != null ? speckleAc["family"] as string : "";

            DB.FamilySymbol   familySymbol = GetElementType <DB.FamilySymbol>(speckleAc);
            DB.FamilyInstance revitAc      = null;

            //try update existing
            if (docObj != null)
            {
                try
                {
                    var revitType = Doc.GetElement(docObj.GetTypeId()) as ElementType;

                    // if family changed, tough luck. delete and let us create a new one.
                    if (familyName != revitType.FamilyName)
                    {
                        Doc.Delete(docObj.Id);
                    }
                    else
                    {
                        revitAc = (DB.FamilyInstance)docObj;

                        // check for a type change
                        if (speckleAc.type != null && speckleAc.type != revitType.Name)
                        {
                            revitAc.ChangeTypeId(familySymbol.Id);
                        }
                    }
                }
                catch
                {
                    //something went wrong, re-create it
                }
            }

            //create family instance
            if (revitAc == null)
            {
                revitAc = AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance(Doc, familySymbol);
            }

            SetAdaptivePoints(revitAc, speckleAc.basePoints);
            AdaptiveComponentInstanceUtils.SetInstanceFlipped(revitAc, speckleAc.flipped);

            SetInstanceParameters(revitAc, speckleAc);

            return(new ApplicationPlaceholderObject {
                applicationId = speckleAc.applicationId, ApplicationGeneratedId = revitAc.UniqueId, NativeObject = revitAc
            });
        }