public void CopyElementsFlatToWarped(Document doc, FamilyInstance familyInstance, ICollection <ElementId> elementIds, Selection sel)
        {
            ICollection <ElementId> newlist = new List <ElementId>();
            CopyPasteOptions        option  = new CopyPasteOptions();
            ElementtransformToCopy  tr      = new ElementtransformToCopy();
            FamilyInstance          flat    = tr.GetFlat(doc, familyInstance);
            List <PlanarFace>       list1   = FlFaces(flat);
            FamilyInstance          warped  = tr.GetWarped(doc, familyInstance);
            PlanarFace    face1             = Facemax(list1);
            Element       element1          = doc.GetElement(elementIds.First());
            LocationPoint loc      = element1.Location as LocationPoint;
            XYZ           pointorg = loc.Point;
            //double minspace = MinSpacePlanarFace(doc, familyInstance, face1, pointorg);
            Transform transform = TransformFlatWapred(doc, flat, warped);

            //Solid solid1 = Solidhelper.AllSolids(flat).First();
            //Solid solid2 = Solidhelper.AllSolids(warped).First();
            //Transform transform1 = solid1.GetBoundingBox().Transform;
            //Transform transform2 = solid2.GetBoundingBox().Transform;
            //Transform transform = transform1.Inverse.Multiply(transform2);
            using (Transaction tran = new Transaction(doc, "copy"))
            {
                tran.Start();
                FailureHandlingOptions options       = tran.GetFailureHandlingOptions();
                IgnoreProcess          ignoreProcess = new IgnoreProcess();
                options.SetClearAfterRollback(true);
                options.SetFailuresPreprocessor(ignoreProcess);
                tran.SetFailureHandlingOptions(options);
                try
                {
                    newlist = ElementTransformUtils.CopyElements(doc, elementIds, doc, transform, option);
                    Remove_product(doc, newlist);
                }
                catch (Exception)
                {
                }
                foreach (ElementId eleid in newlist)
                {
                    Element            ele      = doc.GetElement(eleid);
                    LocationPoint      locele   = ele.Location as LocationPoint;
                    XYZ                pointcon = locele.Point;
                    List <HermiteFace> list2    = WarpedFace(warped);
                    if (list2.Count != 0)
                    {
                        HermiteFace face2 = FacemaxWraped(list2);
                        //double distanceloc = kcpointtoHemiteFace(face2, pointcon);

                        double distanceloc = MinSpaceHermiteFace(doc, familyInstance, face2, pointcon);
                        var    xv1         = FIndpointonwraped(pointcon, new XYZ(0, 0, 1), distanceloc);
                        XYZ    point1      = pointcon - xv1;
                        ElementTransformUtils.MoveElement(doc, eleid, point1);
                    }
                    else
                    {
                        List <RevolvedFace> revolvedFaces = WarpedFaceRevolFace(warped);
                        RevolvedFace        face2         = FacemaxWrapedRevolFace(revolvedFaces);
                        //double distanceloc = kcpointtoHemiteFace(face2, pointcon);

                        double distanceloc = MinSpaceRevolFace(doc, familyInstance, face2, pointcon);
                        var    xv1         = FIndpointonwraped(pointcon, new XYZ(0, 0, 1), distanceloc);
                        XYZ    point1      = pointcon - xv1;
                        ElementTransformUtils.MoveElement(doc, eleid, point1);
                    }
                    //if (minspace > 0)
                    //{
                    //    var xv1 = FIndpointonwraped(pointcon,doc.ActiveView.UpDirection, distanceloc);
                    //    XYZ point1 = pointcon - xv1;
                    //    ElementTransformUtils.MoveElement(doc, eleid, point1);
                    //}
                    //else
                    //{
                    //    var xv1 = FIndpointonwraped(pointcon, doc.ActiveView.UpDirection, distanceloc);
                    //    XYZ point1 = xv1 - pointcon;
                    //    ElementTransformUtils.MoveElement(doc, eleid, point1);
                    //}
                }
                tran.Commit();
            }
        }
示例#2
0
        public void Setvalue(Document doc, List <FamilyInstance> list, string value)
        {
            ProgressbarWPF progressBarform = new ProgressbarWPF(list.Count, "Loading...");

            progressBarform.Show();
            var ListCorbelHaunch = FindAllLedgeHaunches(doc);

            foreach (var i in list)
            {
                progressBarform.Giatri();
                if (progressBarform.iscontinue == false)
                {
                    break;
                }
                if (!CheckInAssembly(doc, i))
                {
                    var       listintersect = FindledgeandhaunchesNearly(doc, i, ListCorbelHaunch);
                    Parameter commentdata   = i.LookupParameter(value);
                    string    hj            = commentdata.AsString();
                    using (Transaction tran = new Transaction(doc, "Set"))
                    {
                        tran.Start();
                        ElementtransformToCopy tr     = new ElementtransformToCopy();
                        FamilyInstance         flat   = tr.GetFlat(doc, i);
                        FamilyInstance         wapred = tr.GetWarped(doc, i);
                        if (flat != null)
                        {
                            Parameter FlatVolumnTag   = flat.LookupParameter(value);
                            Parameter WarpedVolumnTag = wapred.LookupParameter(value);
                            Parameter volume          = flat.LookupParameter("Volume");
                            double    Value           = volume.AsDouble() + VolumnCorbelHaunch(listintersect);
                            double    kl = Value * 150;
                            double    k1 = Math.Round(kl / 1000, 1);
                            double    k2 = k1 * 1000;
                            commentdata.Set(k2.ToString());
                            FlatVolumnTag.Set(k2.ToString());
                            WarpedVolumnTag.Set(k2.ToString());
                            string gh = commentdata.AsString();
                        }
                        else
                        {
                            Parameter volume = i.LookupParameter("Volume");
                            double    Value  = volume.AsDouble() + VolumnCorbelHaunch(listintersect);
                            double    kl     = Value * 150;
                            double    k1     = Math.Round(kl / 1000, 1);
                            double    k2     = k1 * 1000;
                            commentdata.Set(k2.ToString());
                            string gh = commentdata.AsString();
                        }
                        tran.Commit();
                    }
                }
                else
                {
                    using (Transaction tran = new Transaction(doc, "Set"))
                    {
                        tran.Start();
                        Parameter commentdata = i.LookupParameter(value);
                        if (!string.IsNullOrEmpty(commentdata.AsString()))
                        {
                            ElementtransformToCopy tr     = new ElementtransformToCopy();
                            FamilyInstance         flat   = tr.GetFlat(doc, i);
                            FamilyInstance         wapred = tr.GetWarped(doc, i);
                            Parameter paproduct           = i.LookupParameter(value);
                            string    CVl = paproduct.AsString();
                            if (flat != null)
                            {
                                Parameter FlatVolumnTag   = flat.LookupParameter(value);
                                Parameter WarpedVolumnTag = wapred.LookupParameter(value);
                                FlatVolumnTag.Set(CVl);
                                WarpedVolumnTag.Set(CVl);
                            }
                        }
                        else
                        {
                            var listintersect             = FindledgeandhaunchesNearly(doc, i, ListCorbelHaunch);
                            ElementtransformToCopy tr     = new ElementtransformToCopy();
                            FamilyInstance         flat   = tr.GetFlat(doc, i);
                            FamilyInstance         wapred = tr.GetWarped(doc, i);
                            if (flat != null)
                            {
                                Parameter FlatVolumnTag   = flat.LookupParameter(value);
                                Parameter WarpedVolumnTag = wapred.LookupParameter(value);
                                Parameter volume          = flat.LookupParameter("Volume");
                                double    Value           = volume.AsDouble() + VolumnCorbelHaunch(listintersect);
                                double    kl = Value * 150;
                                double    k1 = Math.Round(kl / 1000, 1);
                                double    k2 = k1 * 1000;
                                commentdata.Set(k2.ToString());
                                FlatVolumnTag.Set(k2.ToString());
                                WarpedVolumnTag.Set(k2.ToString());
                                string gh = commentdata.AsString();
                            }
                            else
                            {
                                Parameter volume = i.LookupParameter("Volume");
                                double    Value  = volume.AsDouble() + VolumnCorbelHaunch(listintersect);
                                double    kl     = Value * 150;
                                double    k1     = Math.Round(kl / 1000, 1);
                                double    k2     = k1 * 1000;
                                commentdata.Set(k2.ToString());
                                string gh = commentdata.AsString();
                            }
                        }
                        tran.Commit();
                    }
                }
            }
            progressBarform.Close();
        }