public static bool SetDataGroupPropertyValue(this BCOM.Element bcomElement, string catalogName, string instanceName, string propXpath, string propName, object value, bool readOnly = false, bool visible = true) { Element element = ElementHelper.getElement(bcomElement); if (element == null) { return(false); } //var schemas = DataGroupDocument.Instance.CatalogSchemas.Schemas; // НВС для подгрузки схем using (var catalogEditHandle = new CatalogEditHandle(element, true, true)) { if (catalogEditHandle == null || (catalogEditHandle.CatalogInstanceName != null && catalogEditHandle.CatalogInstanceName != instanceName)) { return(false); } if (!(catalogEditHandle.HasDataGroupData() && catalogEditHandle.CatalogTypeName.Equals(catalogName) && catalogEditHandle.CatalogInstanceName.Equals(instanceName))) { catalogEditHandle.InsertDataGroupCatalogInstance(catalogName, instanceName); catalogEditHandle.UpdateInstanceDataDefaults(); } DataGroupProperty prop = catalogEditHandle.Properties .FirstOrDefault(x => x.Xpath.Equals(propXpath)); if (prop == null) { prop = new DataGroupProperty(propName, value, readOnly, visible) { Xpath = propXpath }; catalogEditHandle.Properties.Add(prop); } else { catalogEditHandle.SetValue(prop, value.ToString()); } int res = catalogEditHandle.Rewrite((int)BCOM.MsdDrawingMode.Normal); return(res == 0); // TODO решить проблему вылета при команде Modify DataGroup Instance } return(true); }
private bool SetDataGroupInstance_() { BCOM.Element bcomElement; FrameList.GetElement(out bcomElement); Element element = bcomElement.ToElement(); using (var catalogEditHandle = new CatalogEditHandle(element, true, true)) { if (catalogEditHandle == null || catalogEditHandle.CatalogInstanceName != null) { return(false); } catalogEditHandle.InsertDataGroupCatalogInstance( CatalogTypeName, CatalogInstanceName); catalogEditHandle.UpdateInstanceDataDefaults(); if (DataGroupPropsValues != null) { foreach (var pair in DataGroupPropsValues) { Sp3dToDataGroupMapProperty mapProp = pair.Key; string value = pair.Value; DataGroupProperty prop = catalogEditHandle.GetProperties() .FirstOrDefault(x => x.Xpath == mapProp.TargetXPath); if (prop == null) { prop = new DataGroupProperty( mapProp.TargetName, value, mapProp.ReadOnly, mapProp.Visible); prop.Xpath = mapProp.TargetXPath; catalogEditHandle.Properties.Add(prop); } catalogEditHandle.SetValue(prop, value); } } int res = catalogEditHandle.Rewrite((int)BCOM.MsdDrawingMode.Normal); return(res == 0); // TODO решить проблему вылета при команде Modify DataGroup Instance } }
//TFCOM.TFFrameList createFrameList_Old(PenetrTask task) //{ // task.scanInfo(); // if (!Keyins.Penetrations.DEBUG_MODE) { // if (task.isCompoundExistsInPlace || task.TFFormsIntersected.Count == 0) // return null; // } // BCOM.ModelReference taskModel = // Addin.App.MdlGetModelReferenceFromModelRefP((int)task.modelRefP); // taskModel.MdlModelRefP(); // double task_toUOR = taskModel.UORsPerMasterUnit; // double task_subPerMaster = taskModel.SubUnitsPerMasterUnit; // double task_unit3 = taskModel.UORsPerStorageUnit; // double task_unit4 = taskModel.UORsPerSubUnit; // BCOM.ModelReference activeModel = Addin.App.ActiveModelReference; // double toUOR = activeModel.UORsPerMasterUnit; // double subPerMaster = activeModel.SubUnitsPerMasterUnit; // double unit3 = activeModel.UORsPerStorageUnit; // double unit4 = activeModel.UORsPerSubUnit; // if (Keyins.Penetrations.DEBUG_MODE) { // ОТЛАДКА: // BCOM.LineElement line = // Addin.App.CreateLineElement2(null, task.Location, task.ProjectPoint); // line.Color = 3; // line.LineWeight = 5; // previewTranContainer.AppendCopyOfElement(line); // } // long diamIndex = DiameterType.Parse(task.DiameterTypeStr).number; // PenetrInfo penInfo = penData.getPenInfo(task.FlangesType, diamIndex); // double pipeInsideDiam = penInfo.pipeDiameterInside / subPerMaster; // double pipeOutsideDiam = penInfo.pipeDiameterOutside / subPerMaster; // double flangeInsideDiam = penInfo.flangeDiameterInside / subPerMaster; // double flangeOutsideDiam = penInfo.flangeDiameterOutside / subPerMaster; // double flangeThick = penInfo.flangeThick / subPerMaster; // double length = task.Length *10 / subPerMaster; // var solids = Addin.App.SmartSolid; // // ! длина трубы меньше размера проходки на толщину фланца // // ! ЕСЛИ ФЛАНЕЦ ЕСТЬ // double delta = task.FlangesCount == 0 ? 0 : // task.FlangesCount * flangeThick / 2; // BCOM.SmartSolidElement cylindrInside = // solids.CreateCylinder(null, pipeInsideDiam / 2, length - delta); // BCOM.SmartSolidElement cylindrOutside = // solids.CreateCylinder(null, pipeOutsideDiam / 2, length - delta); // var cylindr = solids.SolidSubtract(cylindrOutside, cylindrInside); // var elements = new Dictionary<BCOM.Element, double>(); // var projections = new Dictionary<BCOM.Element, double>(); // { // double shift = task.FlangesCount == 1 ? delta : 0; // shift *= task.isSingleFlangeFirst() ? 1 : -1; // elements.Add(cylindr, (length + shift)/2); // } // { // Перекрестия: всегда в плоскости стены // var zero = Addin.App.Point3dZero(); // projections.Add( // ElementHelper.createCrossRound(ref zero, pipeInsideDiam), // 0.0); // projections.Add(ElementHelper.createCircle(ref zero, pipeInsideDiam), // 0.0); // projections.Add( // ElementHelper.createCrossRound(ref zero, pipeInsideDiam), // length); // projections.Add(ElementHelper.createCircle(ref zero, pipeInsideDiam), // length); // } // { // Точка установки: // var pt = Addin.App.Point3dZero(); // BCOM.Element refPoint = // Addin.App.CreateLineElement2(null, pt, pt); // projections.Add(refPoint, 0.0); // } // // Фланцы: // for (int i = 0; i < task.FlangesCount; ++i) // { // BCOM.SmartSolidElement flangeCylindr = solids.SolidSubtract( // solids.CreateCylinder(null, flangeOutsideDiam / 2, flangeThick), // solids.CreateCylinder(null, pipeOutsideDiam / 2, flangeThick)); // double shift = 0; // if (task.FlangesCount == 1) // { // bool isNearest = Addin.App.Vector3dEqualTolerance(task.singleFlangeSide, // Addin.App.Vector3dFromXYZ(0, 0, -1), 0.1); // 0.001 // // 0.5 - для видимости фланцев на грани стены/плиты // shift = isNearest ? // 0.0 + flangeThick / 2 - 1: // 0.02: // length - flangeThick / 2 + 1; // 0.02; // } // else // { // shift = i == 0 ? 0.0 : length; // // для самих фланцев: // // 0.5 - для видимости фланцев на грани стены/плиты // shift += Math.Pow(-1, i) * (flangeThick/2 - 1); //0.02); // } // elements.Add(flangeCylindr, shift); // } // //********************************************************************** // //{ // ПОСТРОЕНИЕ ЧЕРЕЗ ПРОФИЛЬ И ПУТЬ // // ********************************************************************* // // BCOM.LineElement line = Addin.App.CreateLineElement2(null, // // Addin.App.Point3dZero(), Addin.App.Point3dFromXYZ(0, 1, 1)); // // BCOM.EllipseElement circle = Addin.App.CreateEllipseElement2(null, // // Addin.App.Point3dZero(), pipeOutsideDiam/2, pipeOutsideDiam/2, // // Addin.App.Matrix3dIdentity()); // // elements.Clear(); // // elements.Add(solids.SweepProfileAlongPath(circle, line),task.Location); // //} // BCOM.Transform3d taskTran; // { // taskTran = Addin.App.Transform3dFromMatrix3d(task.Rotation); // //taskTran = Addin.App.Transform3dInverse( // // Addin.App.Transform3dFromMatrix3d(task.Rotation)); // //taskTran = Addin.App.Transform3dFromMatrix3d( // // Addin.App.Matrix3dIdentity()); // } // /* // Ориентация тела построения solid - вдоль оси Z // Z _____ // ^ Y | // | /' | // !/___> X __*__ // */ // double correctAboutX; // double correctAboutY; // if (task.TaskType == PenetrTask.TaskObjectType.PipeEquipment) // { // /* Ориентация проходки перед применением матрицы поворота задания // * должна быть вдоль оси X // * // Y | | // ^ • ========| // !___> X | | // */ // correctAboutX = 0; // correctAboutY = Math.PI/2; // //rawVector = Addin.App.Point3dFromXYZ(1, 0, 0); // } // else // { // /* Ориентация проходки перед применением матрицы поворота задания // * должна быть вдоль оси Y // * _____ // Y | // ^ | // !___> X __*__ // */ // correctAboutX = -Math.PI/2; // correctAboutY = 0; // //rawVector = Addin.App.Point3dFromXYZ(0, 1, 0); // } // //BCOM.Point3d taskLocation = taskModel.IsAttachment ? // // Addin.App.Point3dScale(task.Location, task_subPerMaster) : // // task.Location; // BCOM.Point3d taskLocation = task.Location; // BCOM.Level level = ElementHelper.getOrCreateLevel(PenetrTask.LEVEL_NAME); // BCOM.Level levelSymb = // ElementHelper.getOrCreateLevel(PenetrTask.LEVEL_SYMB_NAME); // BCOM.Level levelRefPoint = // ElementHelper.getOrCreateLevel(PenetrTask.LEVEL_POINT_NAME); // TFCOM.TFFrameList frameList = Addin.AppTF.CreateTFFrame(); // foreach (var pair in elements) // { // BCOM.Element elem = pair.Key; // double shift = pair.Value; // elem.Color = 0; // TODO // BCOM.Point3d offset = Addin.App.Point3dAddScaled( // Addin.App.Point3dZero(), Addin.App.Point3dFromXYZ(0, 0, 1), shift); // elem.Move(offset); // elem.Rotate(Addin.App.Point3dZero(), correctAboutX, correctAboutY, 0); // elem.Transform(taskTran); // elem.Move(taskLocation); // elem.Level = level; // ElementHelper.setSymbologyByLevel(elem); // frameList.AsTFFrame.Add3DElement(elem); // } // //frameList.AsTFFrame.Get3DElement().Level = level; // //ElementHelper.setSymbologyByLevel(frameList.AsTFFrame.Get3DElement()); // TFCOM.TFProjectionList projList = Addin.AppTF.CreateTFProjection(); // projList.Init(); // foreach (var pair in projections) // { // BCOM.Element elem = pair.Key; // double shift = pair.Value; // elem.Color = 0; // TODO // BCOM.Point3d offset = Addin.App.Point3dAddScaled( // Addin.App.Point3dZero(), Addin.App.Point3dFromXYZ(0, 0, 1), shift); // elem.Move(offset); // elem.Rotate(Addin.App.Point3dZero(), correctAboutX, correctAboutY, 0); // elem.Transform(taskTran); // elem.Move(taskLocation); // elem.Level = (elem.Type == BCOM.MsdElementType.Line) ? // levelRefPoint : levelSymb; // ElementHelper.setSymbologyByLevel(elem); // if (elem.Type == BCOM.MsdElementType.Line) { // // точка вставки - линия с нулевой длинной // elem.Level = levelRefPoint; // } // var elemProjList = Addin.AppTF.CreateTFProjection(); // elemProjList.AsTFProjection.SetEmbeddedElement(elem); // projList.Append(elemProjList); // } // frameList.AsTFFrame.SetProjectionList(projList); // // ПЕРФОРАТОР // BCOM.EllipseElement perfoEl = // Addin.App.CreateEllipseElement2(null, Addin.App.Point3dZero(), // pipeInsideDiam/2, pipeInsideDiam/2, // Addin.App.Matrix3dIdentity(), BCOM.MsdFillMode.Filled); // { // BCOM.Point3d offset = Addin.App.Point3dAddScaled( // Addin.App.Point3dZero(), // Addin.App.Point3dFromXYZ(0, 0, 1), length/2); // perfoEl.Move(offset); // perfoEl.Rotate(Addin.App.Point3dZero(), correctAboutX, correctAboutY, 0); // } // perfoEl.Level = levelSymb; // ElementHelper.setSymbologyByLevel(perfoEl); // perfoEl.Transform(taskTran); // perfoEl.Move(taskLocation); // BCOM.Point3d perfoVec = perfoEl.Normal; // TFCOM.TFPerforatorList perfoList = Addin.AppTF.CreateTFPerforator(); // var tranIdentity = Addin.App.Transform3dIdentity(); // perfoList.InitFromElement(perfoEl, perfoVec, length/2 * 1.01, tranIdentity); // perfoList.SetSweepMode( // TFCOM.TFdPerforatorSweepMode.tfdPerforatorSweepModeBi); // //perfoList.SetSenseDist(1.01 * length / 2); // perfoList.SetPolicy( // TFCOM.TFdPerforatorPolicy.tfdPerforatorPolicyThroughHoleWithinSenseDist); // frameList.AsTFFrame.SetPerforatorList(perfoList); // frameList.AsTFFrame.SetSenseDistance2(length/2); // frameList.AsTFFrame.SetName("Penetration"); // ранее было 'EmbeddedPart' // frameList.AsTFFrame.SetPerforatorsAreActive(true); // frameList.Synchronize(); // return frameList; //} private static void setDataGroupInstance( BCOM.Element bcomElement, PenetrTask task) { Element element = ElementHelper.getElement(bcomElement); if (element == null) { return; } using (var catalogEditHandle = new CatalogEditHandle(element, true, true)) { if (catalogEditHandle == null || catalogEditHandle.CatalogInstanceName != null) { return; } catalogEditHandle.InsertDataGroupCatalogInstance("EmbeddedPart", "Embedded Part"); catalogEditHandle.UpdateInstanceDataDefaults(); DataGroupProperty code = null; DataGroupProperty name = null; foreach (DataGroupProperty property in catalogEditHandle.GetProperties()) { if (property?.Xpath == "EmbPart/@PartCode") { code = property; } else if (property?.Xpath == "EmbPart/@CatalogName") { name = property; } } if (code != null) { catalogEditHandle.SetValue(code, task.Code); } else { code = new DataGroupProperty("PartCode", task.Code, false, true); code.SchemaName = "EmbPart"; code.Xpath = "EmbPart/@PartCode"; catalogEditHandle.Properties.Add(code); } catalogEditHandle.SetValue(code, task.Code); if (name != null) { catalogEditHandle.SetValue(name, task.Name); } else { name = new DataGroupProperty("CatalogName", task.Name, false, true); name.SchemaName = "EmbPart"; name.Xpath = "EmbPart/@CatalogName"; catalogEditHandle.Properties.Add(name); } catalogEditHandle.Properties.Add(name); catalogEditHandle.Rewrite((int)BCOM.MsdDrawingMode.Normal); // TODO решить проблему вылета при команде Modify DataGroup Instance } }
/// <summary> /// Заполнение у элемента проходки свойств DataGroup /// </summary> public static void setDataGroupInstance( BCOM.Element bcomElement, IPenetrTask task) { Element element = ElementHelper.getElement(bcomElement); if (element == null) { return; } task.prepairDataGroup(); var schemas = DataGroupDocument.Instance.CatalogSchemas.Schemas; // НВС для подгрузки схем using (var catalogEditHandle = new CatalogEditHandle(element, true, true)) { if (catalogEditHandle == null || catalogEditHandle.CatalogInstanceName != null) { return; } catalogEditHandle.InsertDataGroupCatalogInstance("EmbeddedPart", "Embedded Part"); catalogEditHandle.UpdateInstanceDataDefaults(); foreach (var pair in task.DataGroupPropsValues) { Sp3dToDataGroupMapProperty mapProp = pair.Key; string value = pair.Value; DataGroupProperty prop = catalogEditHandle.GetProperties() .FirstOrDefault(x => x.Xpath == mapProp.TargetXPath); if (prop == null) { prop = new DataGroupProperty( mapProp.TargetName, value, mapProp.ReadOnly, mapProp.Visible); prop.Xpath = mapProp.TargetXPath; } catalogEditHandle.SetValue(prop, value); catalogEditHandle.Properties.Add(prop); } catalogEditHandle.Rewrite((int)BCOM.MsdDrawingMode.Normal); //foreach (DataGroupProperty property in catalogEditHandle.GetProperties()) //{ // if (property?.Xpath == "EmbPart/@PartCode") // code = property; // else if (property?.Xpath == "EmbPart/@CatalogName") // name = property; //} //if (code != null) // catalogEditHandle.SetValue(code, task.Code); //else { // code = new DataGroupProperty("PartCode", task.Code, false, true); // //code.SchemaName = "EmbPart"; // code.Xpath = "EmbPart/@PartCode"; // catalogEditHandle.Properties.Add(code); //} //catalogEditHandle.SetValue(code, task.Code); //if (name != null) // catalogEditHandle.SetValue(name, task.Name); //else { // name = new DataGroupProperty("CatalogName", task.Name, false, true); // //name.SchemaName = "EmbPart"; // name.Xpath = "EmbPart/@CatalogName"; // catalogEditHandle.Properties.Add(name); //} //catalogEditHandle.SetValue(name, task.Name); //catalogEditHandle.Rewrite((int)BCOM.MsdDrawingMode.Normal); // TODO решить проблему вылета при команде Modify DataGroup Instance } }