Beispiel #1
0
        /// <summary>
        /// Проверка на пересечения с другими закладными элементами.
        /// TRUE - если проверка пройдена
        /// </summary>
        private bool checkForIntersects(PenetrVueTask task, PenetrInfo penInfo)
        {
            task.scanInfo();

            BCOM.Element penElement =
                PenetrHelper.getPenElementWithoutFlanges(task, penInfo);

            IEnumerable <BCOM.Element> intersects =
                ElementHelper.scanIntersectsInElementRange(penElement,
                                                           App.ActiveModelReference);

            foreach (BCOM.Element intersection in intersects)
            {
                if (intersection.IsPenetrationCell())
                {
                    var body = getBodyWithOutFlanges(intersection.AsCellElement());

                    var contrIntersects =
                        ElementHelper.scanIntersectsInElementRange(body,
                                                                   App.ActiveModelReference);

                    BCOM.Range3d res = App.Range3dInit();
                    if (App.Range3dIntersect2(ref res, body.Range, penElement.Range))
                    {
                        return(false);
                    }
                }
                else if (intersection.IsCompundCell())
                {
                    return(false);
                }
            }
            return(true);
        }
Beispiel #2
0
        private void selectElement_(Element element)
        {
            PenetrVueTask task;

            if (PenetrVueTask.getFromElement(element, AttrsXDoc, out task) &&
                !taskElemsToRows_.ContainsKey(element) &&
                null == rowsToTasks_.Values.FirstOrDefault(x => x.Oid == task.Oid)) // ?
            {
                TaskTable.BeginLoadData();
                DataRow row = TaskTable.Rows.Add();

                row.SetField(PropKey.CODE, task.Code);
                row.SetField(PropKey.NAME, task.Name);
                row.SetField(FieldName.FLANGES, task.FlangesType);
                row.SetField(FieldName.DIAMETER, task.DiameterTypeStr);
                row.SetField(FieldName.LENGTH, task.LengthCm);

                row.SetField <string>(FieldName.REF_POINT1, task.GetRefPointCoords(0));
                row.SetField <string>(FieldName.REF_POINT2, task.GetRefPointCoords(1));
                row.SetField <string>(FieldName.REF_POINT3, task.GetRefPointCoords(2));

                foreach (var pair in task.DataGroupPropsValues)
                {
                    Sp3dToDataGroupMapProperty dgProp = pair.Key;
                    if (TaskTable.Columns.Contains(dgProp.TargetName))
                    {
                        row.SetField(dgProp.TargetName, pair.Value);
                    }
                }

                taskElemsToRows_.Add(element, row);
                rowsToTasks_.Add(row, task);
                TaskTable.AcceptChanges();
                TaskTable.EndLoadData();

        #if DEBUG
                //BCOM.Element comEl = ElementHelper.getElementCOM(element);

                //if (comEl.IsCompundCell())
                //{
                //    var cell = comEl.AsCellElement();

                //    var cross = ElementHelper.createCrossRound(10, cell.Origin);
                //    var pointEl = ElementHelper.createCircle(10, cell.Origin);

                //    previewTranCon_.AppendCopyOfElement(pointEl);
                //    previewTranCon_.AppendCopyOfElement(cross);
                //}
        #endif
            }
        }
Beispiel #3
0
        private void taskTable_RowChanged_(DataRow row)
        {
            if (!rowsToTasks_.ContainsKey(row))
            {
                return;
            }

            PenetrVueTask task = rowsToTasks_[row];

            // TODO
            task.Code            = row.Field <string>(PropKey.CODE);
            task.DiameterTypeStr = row.Field <string>(FieldName.DIAMETER);
            task.FlangesType     = row.Field <long>(FieldName.FLANGES);
            task.LengthCm        = row.Field <int>(FieldName.LENGTH);

            { // RefPoints:
                task.SetRefPoint(0, row.Field <string>(FieldName.REF_POINT1));
                task.SetRefPoint(1, row.Field <string>(FieldName.REF_POINT2));
                task.SetRefPoint(2, row.Field <string>(FieldName.REF_POINT3));
            }

            foreach (Sp3dToDataGroupMapProperty dgProp in task.DataGroupPropsValues.Keys.ToList())
            {
                foreach (string key in new string[] { dgProp.Key, dgProp.TargetName })
                {
                    if (dgProp.Key == PropKey.CODE)
                    {
                        task.DataGroupPropsValues[dgProp] = task.Code;
                    }
                    else if (dgProp.Key == PropKey.NAME)
                    {
                        task.DataGroupPropsValues[dgProp] = task.Name;
                    }
                    else if (row.Table.Columns.Contains(key))
                    {
                        task.DataGroupPropsValues[dgProp] = row.Field <string>(key);
                    }
                }
            }

            { // ! обновление DataRow
                row.BeginEdit();
                row.SetField(PropKey.NAME, task.Name);

                row.SetField(FieldName.REF_POINT1, task.GetRefPointCoords(0));
                row.SetField(FieldName.REF_POINT2, task.GetRefPointCoords(1));
                row.SetField(FieldName.REF_POINT3, task.GetRefPointCoords(2));

                row.EndEdit();
            }
        }
Beispiel #4
0
        public static bool getFromElement(Element element, XDocument attrsXDoc, out PenetrVueTask penTask)
        {
            penTask = null;

            XDocument xDoc = ElementHelper.getSp3dXDocument(element);

            xDoc.Merge(attrsXDoc);

            Sp3dPenTask sp3dTask = new Sp3dPenTask(xDoc);

            if (sp3dTask.Type == Sp3dPenTask.TaskType.Pipe && sp3dTask.IsValid)
            {
                penTask = new PenetrVueTask(element, sp3dTask);
                Sp3dToDGMapping.Instance.LoadValuesFromXDoc(xDoc, penTask.DataGroupPropsValues);
            }

            return(penTask != null ? penTask.isValid : false);
        }
Beispiel #5
0
        public void changeSelection(IEnumerable <DataRow> selection)
        {
            selectionTranCon_?.Reset();

            foreach (DataRow taskRow in selection)
            {
                PenetrVueTask task = rowsToTasks_[taskRow];

                BCOM.ModelReference modelRef = task.ModelRef;
                BCOM.View           view     = ViewHelper.getActiveView();

                var taskUOR   = new UOR(task.ModelRef);
                var activeUOR = new UOR(App.ActiveModelReference);

                List <long> itemsIds = new List <long> {
                    task.elemId
                };
                // добавляем фланцы:
                foreach (PenetrTaskFlange flangeTask in task.FlangesGeom)
                {
                    itemsIds.Add(flangeTask.elemId);
                }

                foreach (long id in itemsIds)
                {
                    BCOM.Element temp = modelRef.GetElementByID(id).Clone();
                    temp.Color      = 2; // зелёный
                    temp.LineWeight = 5;

            #if CONNECT
                    // для версии CONNECT требуется поправка
                    // в V8i возмоно она производится автоматически
                    BCOM.Attachment attachment = task.getAttachment();
                    if (attachment != null)
                    {
                        temp.Transform(attachment.GetReferenceToMasterTransform());
                    }
            #endif

                    selectionTranCon_.AppendCopyOfElement(temp);
                }
            }
        }
Beispiel #6
0
        public void addToModel()
        {
            previewTranCon_?.Reset();

            Session.Instance.StartUndoGroup();

            ElementHelper.RunByRecovertingSettings(() => {
                foreach (DataRow row in TaskTable.Rows)
                {
                    Session.Instance.SetUndoMark();

                    PenetrVueTask task = rowsToTasks_[row];
                    try
                    {
                        var penetr = new Penetration(task);
                        penetr.AddProjection();
                        penetr.AddPerforation();
                        penetr.AddToModel(false);
                        penetr.SetTags();

                        row.SetField(FieldName.STATUS, "DONE");
                        // TODO статус о выполнении
                    }
                    catch (Exception ex)
                    {
                        // TODO статус о выполнении
                        row.SetField(FieldName.STATUS, "ERROR");
                        Session.Instance.Keyin("undo");
                        var last = App.ActiveModelReference.GetLastValidGraphicalElement();
                        last?.Rewrite();
                    }
                }
            });

            Session.Instance.EndUndoGroup();
        }
Beispiel #7
0
 public IList <DiameterType> getDiametersList(PenetrVueTask task)
 {
     return(penData_.getDiameters(task.FlangesType));
 }
Beispiel #8
0
        public void preview()
        {
            previewTranCon_.Reset();

            try
            {
                foreach (DataRow row in TaskTable.Rows)
                {
                    PenetrVueTask task = rowsToTasks_[row];

                    var penetration = new Penetration(task);
                    penetration.AddProjection();

                    previewTranCon_.AppendCopyOfElement(penetration.GetElement());

                    foreach (BCOM.Element projElement in penetration.GetProjections())
                    {
                        previewTranCon_.AppendCopyOfElement(projElement);
                    }
                }
            }
            catch (Exception ex) // TODO
            {
                ex.AddToMessageCenter();
            }


            //try
            //{
            //    //foreach (PenetrVueTask task in TaskSelection)
            //    //{
            //    //    PenetrInfo penInfo = penData_.getPenInfo(
            //    //        task.FlangesType, task.DiameterType.Number);

            //    //    TFCOM.TFFrameList frameList =
            //    //        PenetrHelper.createFrameList(task, penInfo, PenetrTaskBase.LevelMain);

            //    //    previewTranCon_.AppendCopyOfElement(
            //    //            frameList.AsTFFrame.Get3DElement());

            //    //    var projList = frameList.AsTFFrame.GetProjectionList();

            //    //    if (projList == null)
            //    //        continue;

            //    //    do
            //    //    {
            //    //        try
            //    //        {
            //    //            BCOM.Element projEl = null;
            //    //            projList.AsTFProjection.GetElement(out projEl);
            //    //            if(projEl != null)
            //    //                previewTranCon_.AppendCopyOfElement(projEl);
            //    //        }
            //    //        catch (Exception) { /* !не требует обработки  */ }
            //    //    } while ((projList = projList.GetNext()) != null);
            //    //}

            //}
            //catch (Exception ex) // TODO
            //{
            //    ex.AddToMessageCenter();
            //}
        }
Beispiel #9
0
        private void rowsAdded_(IEnumerable <DataGridViewRow> rows)
        {
            foreach (var row in rows)
            {
                var comboCell = row.Cells[GroupByTaskModel.FieldName.DIAMETER] as DataGridViewComboBoxCell;

                PenetrVueTask task = groupModel_.GetTask(row.GetDataRow());
                if (task == null)
                {
                    continue;
                }

                IList <DiameterType> diameters = groupModel_.getDiametersList(task);
                var          diamStrList       = new List <string>();
                DiameterType matchValue        = null;
                foreach (DiameterType diamType in diameters)
                {
                    if (diamType.Equals(task.DiameterType))
                    {
                        matchValue = diamType;
                        Logger.Log.Debug(
                            $"Найден диаметр в таблице диаметров: {diamType}" +
                            $" для задания '{task}'");
                    }
                    diamStrList.Add(diamType.ToString());
                }

                comboCell.DataSource = diamStrList;
                if (matchValue != null)
                {
                    Logger.Log.Debug($"Установка диаметра: {matchValue}");
                    comboCell.Value = matchValue.ToString();
                }
                else
                {
                    Logger.Log.Debug(
                        $"невалиное значение диаметра '{task.DiameterType}'" +
                        $" для задания '{task}'" +
                        $"\n валидные занчения: {diameters.ToStringEx()}");

                    comboCell.ErrorText = "невалидное значение диаметра";
                }

                DataRow dataRow = row.GetDataRow();
                if (!dataRow.HasErrors && !dataRow.AnyColumnHasError())
                {
                    dataRow.SetField(GroupByTaskModel.FieldName.STATUS, "OK");
                }
                else
                {
                    dataRow.SetField(GroupByTaskModel.FieldName.STATUS, "ERROR");
                }
            }
            UpdateRowsStylesByStatus();

            try
            {
                var tabCtrl = form_.tabCtrlMain;
                if (tabCtrl.SelectedTab.Name != "tabGroupByTask")
                {
                    tabCtrl.SelectedTab = tabCtrl.TabPages["tabGroupByTask"];
                    form_.Refresh();
                }
            }
            catch (Exception)
            {
            }
        }