Пример #1
0
        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);
        }
Пример #2
0
        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
            }
        }
Пример #3
0
        //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
            }
        }
Пример #4
0
        /// <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
            }
        }