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(); } }
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(); }