/// <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); }
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 } }
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(); } }
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); }
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); } } }
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(); }
public IList <DiameterType> getDiametersList(PenetrVueTask task) { return(penData_.getDiameters(task.FlangesType)); }
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(); //} }
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) { } }