public ROI ConvertToProgROI(GeoDataGridViewModel raw, GeoDataGridViewModel[] dependROIs, int _circleDistanceSetting) { var model = convertToProgGraphicModel(raw, dependROIs); ROI progROI = null; switch (model.GeoType) { case MeasureType.Angle: progROI = new ROIProgAngle(model); break; case MeasureType.Circle: case MeasureType.PointCircle: progROI = new ROIProgCircle(model) { CircleDistanceSetting = _circleDistanceSetting }; break; case MeasureType.CrossPoint: progROI = new ROIProgPoint(model); break; case MeasureType.Distance: case MeasureType.DistanceX: case MeasureType.DistanceY: progROI = new ROIProgDistance(model); break; case MeasureType.SymmetryLine: progROI = new ROIProgSymmetryLine(model); break; } return progROI; }
private ProgGraphicModel assignValue(GeoDataGridViewModel raw) { ProgGraphicModel model = null; try { model = new ProgGraphicModel() { ID = raw.RecordID, Name = raw.Name, GeoType = raw.GeoType, RowBegin = raw.Row1, RowEnd = raw.Row2, ColBegin = raw.Col1, ColEnd = raw.Col2, StartPhi = (raw.StartPhi), EndPhi = raw.EndPhi, PointerOrder = raw.PointOrder, Distance = raw.Distance, IsExportItem = raw.IsExportItem, }; } catch (Exception ex) { Hanbo.Log.LogManager.Error(ex); } return model; }
public static IMeasureGeoModel Resolve(GeoDataGridViewModel rawModel) { MeasureViewModel model = null; if (rawModel != null) { model = new MeasureViewModel() { Row1 = new HTuple(rawModel.Row1), Row2 = new HTuple(rawModel.Row2), Col1 = new HTuple(rawModel.Col1), Col2 = new HTuple(rawModel.Col2), Distance = new HTuple(rawModel.Distance), GeoType = rawModel.GeoType }; } return model; }
public static HObject GenContour(ViewModel.GeoDataGridViewModel geoModel) { HObject displayObject = null; switch (geoModel.GeoType) { case MeasureType.Distance: case MeasureType.DistanceX: case MeasureType.DistanceY: double[] rows = new double[] { geoModel.Row1, geoModel.Row2 }; double[] cols = new double[] { geoModel.Col1, geoModel.Col2 }; HOperatorSet.GenContourPolygonXld(out displayObject, rows, cols); break; case MeasureType.PointCircle: HOperatorSet.GenCircle(out displayObject, geoModel.Row1, geoModel.Col1, geoModel.Distance); break; case MeasureType.CrossPoint: HOperatorSet.GenCrossContourXld(out displayObject, geoModel.Row1, geoModel.Col1, 25, 0.785398); break; } return(displayObject); }
public static ResultDisplayViewModel CreateDisplayViewModel(GeoDataGridViewModel model) { return CreateDisplayViewModel(model, false); }
private TreeNode getGeoTreeNode(GeoDataGridViewModel geoModel) { var number = _DataList.Count; var geoNodeDisplayName = (String.IsNullOrEmpty(geoModel.Name)) ? String.Format(_treeNodeDispNamePattern, number, geoModel.GeoType) : geoModel.Name; var geoImageKey = geoModel.GeoType.ToString(); TreeNode geoNode = new TreeNode() { Name = geoModel.RecordID, Text = geoNodeDisplayName, ImageKey = geoImageKey, SelectedImageKey = geoImageKey, Tag = geoModel.ROIID, }; if (_geoContextMenuStrip != null) { geoNode.ContextMenuStrip = _geoContextMenuStrip; } return geoNode; }
private void addTreeNode(ROI activeROI, GeoDataGridViewModel geoModel) { if (_TreeViewContainer != null) { var number = _DataList.Count; var roiNodeName = String.IsNullOrEmpty(geoModel.Name) ? String.Format("{0} {1}", number.ToString("d2"), activeROI.ROIMeasureType) : geoModel.Name; var roiImageKey = activeROI.ROIMeasureType.ToString(); var index = _TreeViewContainer.Nodes.Count; TreeNode roiNode = new TreeNode() { Name = geoModel.RecordID, Text = roiNodeName, ImageKey = roiImageKey, SelectedImageKey = roiImageKey, Checked = activeROI.Visiable, Tag = activeROI, }; if (_geoContextMenuStrip != null) { roiNode.ContextMenuStrip = _geoContextMenuStrip; } _TreeViewContainer.Nodes.Add(roiNode); _TreeViewContainer.Focus(); _TreeViewContainer.SelectedNode = roiNode; } }
/// <summary> /// 新增有 ROI model 的資料列 /// </summary> /// <param name="roi"></param> /// <param name="tmpGeoDataViewModel"></param> private void addROIRecord(ROI roi, GeoDataGridViewModel tmpGeoDataViewModel) { _DataList.Add(tmpGeoDataViewModel); addTreeNode(roi, tmpGeoDataViewModel); }
/// <summary> /// 將 Model 的參考座標清空, 設為 Default /// </summary> /// <param name="model"></param> private void resetModelCoordinate(GeoDataGridViewModel model) { model.CoordinateID = model.CoordinateName = ""; model.CoordinateRow = model.Row1; model.CoordinateCol = model.Col1; }
private void reAssignModelValue(GeoDataGridViewModel oldModel, GeoDataGridViewModel newModel) { var lineTypes = new MeasureType[] { MeasureType.Distance, MeasureType.DistanceX, MeasureType.DistanceY, MeasureType.SymmetryLine }; var isCrossPoint = (oldModel.GeoType == MeasureType.CrossPoint); var isCircleType = (oldModel.GeoType == MeasureType.Circle || oldModel.GeoType == MeasureType.PointCircle); if (newModel == null) { modelSetToDefault(oldModel); } else { oldModel.Row1 = newModel.Row1; oldModel.Col1 = newModel.Col1; if (!isCrossPoint) { if (lineTypes.Contains(oldModel.GeoType)) { oldModel.Row2 = newModel.Row2; oldModel.Col2 = newModel.Col2; } oldModel.Distance = (isCircleType) ? newModel.Distance * _circleDistanceSetting : newModel.Distance; oldModel.WorldDistance = (isCircleType) ? newModel.WorldDistance * _circleDistanceSetting : newModel.WorldDistance; } } if (isCrossPoint) { updateDependGeoObject(oldModel); } }
private GeoDataGridViewModel makeSymmetryLineGeoDataViewModel(GeoDataGridViewModel lineOne, GeoDataGridViewModel lineTwo) { GeoDataGridViewModel result = null; var measure = new MeasurementSymmetryLine(MeasureViewModelResolver.Resolve(lineOne), MeasureViewModelResolver.Resolve(lineTwo), mAssistant); var mModel = measure.GetViewModel(); if (mModel != null) { var number = _DataList.Count + 1; var measureName = number.ToString("d2") + " " + Hanbo.Resources.Resource.Model_SymmetryLine; result = new GeoDataGridViewModel() { Name = measureName, Distance = mModel.Distance, WorldDistance = pixelToRealWorldValue(mModel.Distance), Icon = _ImageList[MeasureType.SymmetryLine.ToString()], GeoType = MeasureType.SymmetryLine, Row1 = mModel.Row1, Col1 = mModel.Col1, Row2 = mModel.Row2, Col2 = mModel.Col2, DependGeoRowNames = new string[] { lineOne.RecordID, lineTwo.RecordID }, Selected = false, Unit = _ExportUnit, }; } else { notifyRecordChanged(GeoDataGridViewNotifyType.ErrorMessage, Hanbo.Resources.Resource.Message_SymmetryLineError); } return result; }
private GeoDataGridViewModel makeDistanceYGeoDataViewModel(GeoDataGridViewModel pA, GeoDataGridViewModel pB) { GeoDataGridViewModel result = null; var measure = new MeasurementDistanceY(MeasureViewModelResolver.Resolve(pA), MeasureViewModelResolver.Resolve(pB), mAssistant); var mModel = measure.GetViewModel(); if (mModel != null) { var number = _DataList.Count + 1; var measureName = number.ToString("d2") + " " + Hanbo.Resources.Resource.Model_YwayDistance; result = new GeoDataGridViewModel() { Name = measureName, Distance = mModel.Distance, WorldDistance = pixelToRealWorldValue(mModel.Distance), Icon = _ImageList[MeasureType.DistanceY.ToString()], GeoType = MeasureType.DistanceY, Row1 = mModel.Row1, Col1 = mModel.Col1, Row2 = mModel.Row2, Col2 = mModel.Col2, DependGeoRowNames = new string[] { pA.RecordID, pB.RecordID }, Selected = false, Unit = _ExportUnit, }; } else { notifyRecordChanged(GeoDataGridViewNotifyType.ErrorMessage, Hanbo.Resources.Resource.Message_DistanceYWarning); } return result; }
private GeoDataGridViewModel makeDistanceGeoDataViewModel(GeoDataGridViewModel firstModel, GeoDataGridViewModel secondModel) { GeoDataGridViewModel result = null; if (firstModel != null && secondModel != null) { var newModel = DistanceHelper.CaculateDistance(MeasureViewModelResolver.Resolve(firstModel), MeasureViewModelResolver.Resolve(secondModel)); if (newModel != null) { var number = _DataList.Count + 1; var measureName = number.ToString("d2") + " " + Hanbo.Resources.Resource.Model_Distance; result = new GeoDataGridViewModel() { Name = measureName, Distance = newModel.Distance, WorldDistance = pixelToRealWorldValue(newModel.Distance), Icon = _ImageList[MeasureType.Distance.ToString()], GeoType = MeasureType.Distance, Row1 = newModel.Row1, Col1 = newModel.Col1, Row2 = newModel.Row2, Col2 = newModel.Col2, DependGeoRowNames = new string[] { firstModel.RecordID, secondModel.RecordID }, Selected = false, Unit = _ExportUnit, }; } } else { notifyRecordChanged(GeoDataGridViewNotifyType.ErrorMessage, Hanbo.Resources.Resource.Message_DependencyNotExists); } return result; }
private GeoDataGridViewModel makeCrossPointGeoDataViewModel(GeoDataGridViewModel lineOne, GeoDataGridViewModel lineTwo) { GeoDataGridViewModel result = null; var measure = new MeasurementTwoLineCrossPoint(MeasureViewModelResolver.Resolve(lineOne), MeasureViewModelResolver.Resolve(lineTwo), mAssistant); var mModel = measure.GetViewModel(); if (mModel != null) { var resultData = measure.getMeasureResultData(); var isParallel = (resultData as PointResult).IsParallel; if (isParallel) { notifyRecordChanged(GeoDataGridViewNotifyType.ErrorMessage , Hanbo.Resources.Resource.Message_CrossPointWarning); } else { var number = _DataList.Count + 1; var measureName = number.ToString("d2") + " " + Hanbo.Resources.Resource.Model_CrossPoint; var curSkew = _refSkew.SingleOrDefault(p => p.ID == _currentSkewID); result = new GeoDataGridViewModel() { Name = measureName, Icon = _ImageList[MeasureType.CrossPoint.ToString()], GeoType = MeasureType.CrossPoint, Row1 = mModel.Row1, Col1 = mModel.Col1, DependGeoRowNames = new string[] { lineOne.RecordID, lineTwo.RecordID }, Selected = false, Unit = "", SkewID = _currentSkewID, }; if (curSkew != null) { result.SkewID = _currentSkewID; result.SkewName = curSkew.Name; result.Skew = getSkew(_currentSkewID); } } } else { notifyRecordChanged(GeoDataGridViewNotifyType.ErrorMessage , "運算模型資料不正確!"); } return result; }
/// <summary> /// 3點成圓計算 /// </summary> /// <param name="pA">幾何模型 點 A</param> /// <param name="pB">幾何模型 點 B</param> /// <param name="pC">幾何模型 點 C</param> /// <returns></returns> private GeoDataGridViewModel make3PointToCircleGeoDataViewModel(GeoDataGridViewModel pA, GeoDataGridViewModel pB, GeoDataGridViewModel pC) { GeoDataGridViewModel result = null; var pAModel = MeasureViewModelResolver.Resolve(pA); var pBModel = MeasureViewModelResolver.Resolve(pB); var pcModel = MeasureViewModelResolver.Resolve(pC); var isAllPointModel = DistanceHelper.IsPointType(pAModel) && DistanceHelper.IsPointType(pBModel) && DistanceHelper.IsPointType(pcModel); if (!isAllPointModel) { notifyRecordChanged(GeoDataGridViewNotifyType.ErrorMessage , Hanbo.Resources.Resource.Message_DependencyNotExists); return result; } MeasureViewModel newModel = DistanceHelper.Get3PointToCircleModel(pAModel, pBModel, pcModel); if (newModel != null) { var number = _DataList.Count + 1; var measureName = number.ToString("d2") + " " + Hanbo.Resources.Resource.Model_3PointCircle; result = new GeoDataGridViewModel() { Name = measureName, Distance = newModel.Distance, WorldDistance = pixelToRealWorldValue(newModel.Distance), Icon = _ImageList[MeasureType.PointCircle.ToString()], GeoType = MeasureType.PointCircle, Row1 = newModel.Row1, Col1 = newModel.Col1, DependGeoRowNames = new string[] { pA.RecordID, pB.RecordID, pC.RecordID }, Selected = false, Unit = _ExportUnit, }; } else { notifyRecordChanged(GeoDataGridViewNotifyType.ErrorMessage, Hanbo.Resources.Resource.Message_3PointCircleWarning); } return result; }
/// <summary> /// 新增量測記錄 (distance, symmetrylin, angle, 3pointCircle) /// </summary> /// <param name="model"></param> private void addMeasuredViewModel(GeoDataGridViewModel model) { if (model.GeoType == MeasureType.PointCircle || model.GeoType == MeasureType.Circle) { model.Distance = model.Distance * _circleDistanceSetting; model.WorldDistance = model.WorldDistance * _circleDistanceSetting; } _DataList.Add(model); addMeasuredTreeNode(model); }
private void resetModelSkew(GeoDataGridViewModel refModel) { refModel.Skew = 0; refModel.SkewID = ""; refModel.SkewName = ""; }
/// <summary> /// 以ROI 元素為主的呈現結構 (量測元素會加入在 ROI 元素下) /// </summary> /// <param name="geoModel"></param> private void addSubNodeBaseOnROIMeasureElement(GeoDataGridViewModel geoModel) { ///* // //目前 Focus 的節點 var selectedNode = _TreeViewContainer.SelectedNode; //相依的 ROI 資料列 var dependsRecordIDs = _DataList.Where(p => geoModel.DependGeoRowNames.Contains(p.RecordID) && p.ROIID != null).Select(p => p.RecordID); //找到樹狀結構中相對應的 ROI 節點 var nodes = _TreeViewContainer.Nodes.Cast<TreeNode>().Where(p => dependsRecordIDs.Contains(p.Name)); foreach (TreeNode pNode in nodes) { //add subNode var geoNode = getGeoTreeNode(geoModel); pNode.Nodes.Add(geoNode); HideCheckBox(_TreeViewContainer, geoNode); } _TreeViewContainer.Focus(); _TreeViewContainer.SelectedNode = selectedNode; // */ }
/// <summary> /// 組成 GeoDataViewModel /// <para>把 ROI 轉成GeoDataViewModel</para> /// </summary> /// <param name="roiIndex">active ROI index</param> /// <param name="viewModel">MeasureViewModel</param> /// <param name="roi">ROI</param> /// <returns></returns> private GeoDataGridViewModel transferROIToGeoDataViewModel(MeasureViewModel viewModel, ROI roi, bool isAddNew) { var number = _DataList.Count + 1; var measureName = number.ToString("d2") + " " + roi.ROIMeasureType; var exportUnit = roi.ROIMeasureType == MeasureType.Angle ? "Angle" : roi.ROIMeasureType == MeasureType.Point ? "" : _ExportUnit; var distance = (viewModel.Distance != null && viewModel.Distance.TupleLength() > 0) ? viewModel.Distance.D : 0.0; //圓類型, 距離為半徑 or 直徑 var isCircleType = (viewModel.GeoType == MeasureType.PointCircle || viewModel.GeoType == MeasureType.Circle); distance = (isCircleType) ? distance * _circleDistanceSetting : distance; var curCoordinate = _refCoordinate.SingleOrDefault(p => p.ID == _currentCoordinateID); var curSkew = _refSkew.SingleOrDefault(p => p.ID == _currentSkewID); GeoDataGridViewModel geoModel = new GeoDataGridViewModel() { Icon = getGeoViewModelIcon(roi), Name = measureName, ROIID = roi.ID, ROIModel = roi.ToROIViewModel(), Col1 = (viewModel.Col1 != null && viewModel.Col1.TupleLength() > 0) ? viewModel.Col1.D : -1.0, Row1 = (viewModel.Row1 != null && viewModel.Row1.TupleLength() > 0) ? viewModel.Row1.D : -1.0, Distance = distance, WorldDistance = pixelToRealWorldValue(distance), Col2 = (viewModel.Col2 != null && viewModel.Col2.TupleLength() > 0) ? viewModel.Col2.D : -1.0, Row2 = (viewModel.Row2 != null && viewModel.Row2.TupleLength() > 0) ? viewModel.Row2.D : -1.0, Selected = false, Unit = exportUnit, GeoType = roi.ROIMeasureType, }; var arcRoi = roi as SmartArc; if (arcRoi != null) { var roiModelData = arcRoi.getModelData(); geoModel.StartPhi = roiModelData[3]; geoModel.EndPhi = roiModelData[4]; } if (isAddNew) { if (curCoordinate != null) { geoModel.CoordinateID = curCoordinate.ID; geoModel.CoordinateName = curCoordinate.Name; } } //設定參考座標值 double refCoordinateCol, refCoordinateRow; getRefCoordinate(geoModel, out refCoordinateCol, out refCoordinateRow); geoModel.CoordinateCol = refCoordinateCol; geoModel.CoordinateRow = refCoordinateRow; //計算軸擺正 if (curSkew != null) { geoModel.SkewID = curSkew.ID; geoModel.SkewName = curSkew.Name; geoModel.Skew = getSkew(geoModel.SkewID); } return geoModel; }
private bool deleteGridViewRecord(GeoDataGridViewModel model) { var hasROIDependencyModels = _DataList.Where(p => p.RecordID != model.RecordID && p.DependGeoRowNames != null); var relatedModelIDs = hasROIDependencyModels.Where(q => q.DependGeoRowNames.Contains(model.RecordID)).Select(p => p.RecordID); string message = (relatedModelIDs.Count() > 0) ? Hanbo.Resources.Resource.Message_DependencyWarning : Hanbo.Resources.Resource.Message_DeleteNotice; var confirmDelete = MessageBox.Show(message, Hanbo.Resources.Resource.Message_Confirm, MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes; if (confirmDelete) { //參考我的座標的資料列 RemoveRefCoordinate(model.RecordID); RemoveRefSkew(model.RecordID); //刪除相依的 Model var modelROIID = model.ROIID; var deletedRows = _DataList.Where(p => relatedModelIDs.Contains(p.RecordID)).ToList(); for (int i = 0; i < deletedRows.Count; i++) { var row = deletedRows[i]; var recordID = row.RecordID; RemoveRefCoordinate(row.RecordID); RemoveRefSkew(row.RecordID); _DataList.Remove(row); } _DataList.Remove(model); notifyRecordChanged(GeoDataGridViewNotifyType.DeleteRow, modelROIID); } return confirmDelete; }
/// <summary> /// <para>*******************************</para> /// 更新與「我」相依的物件 /// <para>Ex: 物件相依關系如下</para> /// <para> A </para> /// <para> B </para> /// <para> C 由 A, B 構成 </para> /// <para>--------------------------------------</para> /// <para> 則 A 或 B 異動時, 其相依物件 C 需被更新 </para> /// <para>*******************************</para> /// </summary> /// <param name="geoParent">傳入小孩的父親,即目前被異動的物件</param> private void updateDependGeoObject(GeoDataGridViewModel geoParent) { //去除自已以外,其他有相依的資料列們 var hasDependObjectRecords = _DataList.Where(p => p.DependGeoRowNames != null && p.RecordID != geoParent.RecordID); //與本列相關的資料列 var oneToManyGeoList = hasDependObjectRecords.Where(q => q.DependGeoRowNames.Contains(geoParent.RecordID)); foreach (var geoModel in oneToManyGeoList) { var firstID = geoModel.DependGeoRowNames.Length > 0 ? geoModel.DependGeoRowNames[0] : ""; var secondID = geoModel.DependGeoRowNames.Length > 1 ? geoModel.DependGeoRowNames[1] : ""; var thirdID = geoModel.DependGeoRowNames.Length > 2 ? geoModel.DependGeoRowNames[2] : ""; var firstModel = _DataList.SingleOrDefault(p => p.RecordID == firstID); var secondModel = _DataList.SingleOrDefault(p => p.RecordID == secondID); var thirdModel = _DataList.SingleOrDefault(p => p.RecordID == thirdID); GeoDataGridViewModel newModel = null; switch (geoModel.GeoType) { case MeasureType.Angle: newModel = makeAngleGeoDataViewModel(firstModel, secondModel); break; case MeasureType.CrossPoint: newModel = makeCrossPointGeoDataViewModel(firstModel, secondModel); break; case MeasureType.Distance: newModel = makeDistanceGeoDataViewModel(firstModel, secondModel); break; case MeasureType.DistanceX: newModel = makeDistanceXGeoDataViewModel(firstModel, secondModel); break; case MeasureType.DistanceY: newModel = makeDistanceYGeoDataViewModel(firstModel, secondModel); break; case MeasureType.PointCircle: newModel = make3PointToCircleGeoDataViewModel(firstModel, secondModel, thirdModel); break; case MeasureType.SymmetryLine: newModel = makeSymmetryLineGeoDataViewModel(firstModel, secondModel); break; } reAssignModelValue(geoModel, newModel); //更新參考"我"座標的物件 updateDependOnCoordinateObjects(geoModel); //更新參考我作為軸擺正的物件 updateDependOnSkewObjects(geoModel); } }
/// <summary> /// 我的位置 - 我參考的座標的位置 /// <para>****取得參考座標位置****</para> /// </summary> /// <param name="geoModel">我</param> /// <param name="coordinateCol"></param> /// <param name="coordinateRow"></param> private void getRefCoordinate(GeoDataGridViewModel geoModel, out double coordinateCol, out double coordinateRow) { coordinateCol = geoModel.Col1; coordinateRow = geoModel.Row1; var refCoordinateModel = _DataList.SingleOrDefault(p => p.RecordID == geoModel.CoordinateID); if (refCoordinateModel != null) { //影像座標 - 參考座標 coordinateCol = geoModel.Col1 - refCoordinateModel.Col1; coordinateRow = geoModel.Row1 - refCoordinateModel.Row1; } }
/// <summary> /// 更新參考我的座標的物件 /// </summary> /// <param name="coordinateModel"></param> private void updateDependOnCoordinateObjects(GeoDataGridViewModel coordinateModel) { foreach (var model in _DataList.Where(p => p.CoordinateID == coordinateModel.RecordID)) { model.CoordinateRow = model.Row1 - coordinateModel.Row1; model.CoordinateCol = model.Col1 - coordinateModel.Col1; } }
/// <summary> /// 轉換為 工程圖 ROI /// </summary> /// <param name="raw"></param> /// <param name="dependROIs"></param> /// <returns></returns> public ROI ConvertToProgROI(GeoDataGridViewModel raw, GeoDataGridViewModel[] dependROIs) { return ConvertToProgROI(raw, dependROIs, 1); }
/// <summary> /// 更新參考我作為軸擺正的物件 /// </summary> /// <param name="rowModel"></param> private void updateDependOnSkewObjects(GeoDataGridViewModel rowModel) { var isSkewModel = _refSkew.Any(p => p.ID == rowModel.RecordID); if (isSkewModel) { //參考我的物件們 var models = _DataList.Where(p => p.SkewID == rowModel.RecordID); var skewValue = getSkew(rowModel.RecordID); foreach (var model in models) { model.Skew = skewValue; } } }
private ProgGraphicModel convertToProgGraphicModel(GeoDataGridViewModel raw, GeoDataGridViewModel[] dependROIs) { var model = assignValue(raw); /*var basicGeoType = new List<MeasureType>() { {MeasureType.FitLine}, {MeasureType.Line}, {MeasureType.Point}, {MeasureType.Circle} }; */ //有相依的ROI var basicROIs = dependROIs;//.Where(p => basicGeoType.Contains(p.GeoType)).ToArray(); int dependROICount = basicROIs.Length; if (dependROICount > 0) { model.ROIs = new ProgGraphicModel[dependROICount]; for (int i = 0; i < dependROICount; i++) { var dependROI = basicROIs[i]; var dependItem = assignValue(dependROI); model.ROIs[i] = dependItem; } } return model; }
/// <summary> /// 更新 ViewModel /// <para>有 ROI model 的資料列更新</para> /// </summary> /// <param name="recordID">RecordID</param> /// <param name="tmpGeoDataViewModel"></param> private void updateROIRecord(string recordID, GeoDataGridViewModel tmpGeoDataViewModel) { var rowModel = _DataList.SingleOrDefault(p => p.RecordID == recordID); if (rowModel != null) { // var newDistance = tmpGeoDataViewModel.Distance; double coordinateCol, coordinateRow; getRefCoordinate(rowModel, out coordinateCol, out coordinateRow); //參考座標異動 rowModel.CoordinateRow = coordinateRow; rowModel.CoordinateCol = coordinateCol; rowModel.Col1 = tmpGeoDataViewModel.Col1; rowModel.Row1 = tmpGeoDataViewModel.Row1; rowModel.Distance = newDistance; rowModel.WorldDistance = pixelToRealWorldValue(newDistance); rowModel.Col2 = tmpGeoDataViewModel.Col2; rowModel.Row2 = tmpGeoDataViewModel.Row2; rowModel.ROIModel = tmpGeoDataViewModel.ROIModel; //更新參考我的座標的物件 updateDependOnCoordinateObjects(rowModel); //更新參考我作為軸擺正的物件 updateDependOnSkewObjects(rowModel); //更新與此Geo 相關的 Geo Objects updateDependGeoObject(rowModel); } }
/// <summary> /// 建立文字及圖形 /// </summary> /// <param name="model"></param> /// <param name="textOnly">是否只建立文字</param> /// <returns></returns> public static ResultDisplayViewModel CreateDisplayViewModel(GeoDataGridViewModel model, bool textOnly) { return CreateDisplayViewModel(model, textOnly, 1); }
/// <summary> /// <para>***************</para> /// 位置及距離數值設為 -1 /// <para>***************</para> /// </summary> /// <param name="model"></param> private static void modelSetToDefault(GeoDataGridViewModel model) { model.Row1 = model.Col1 = -1; model.Row2 = model.Col2 = -1; model.Distance = model.WorldDistance = -1; model.CoordinateCol = model.CoordinateRow = -1; }
public static ResultDisplayViewModel CreateDisplayViewModel(GeoDataGridViewModel model, bool textOnly, int circleDistanceSetting) { ResultDisplayViewModel viewModel = null; try { //init var dispXLD = new HXLDCont(); dispXLD.Dispose(); dispXLD.GenEmptyObj(); double posX = model.Col1, posY = model.Row1; string dispName = model.Name; switch (model.GeoType) { case ViewROI.MeasureType.Angle: break; case ViewROI.MeasureType.Circle: case ViewROI.MeasureType.PointCircle: var radius = model.Distance / circleDistanceSetting; dispXLD.GenCircleContourXld(model.Row1, model.Col1, radius, 0.0, 6.28318, "positive", 1.0); viewModel = new ResultDisplayViewModel() { DisplayText = dispName, PositionX = posX, PositionY = posY, }; break; case ViewROI.MeasureType.CrossPoint: case ViewROI.MeasureType.Point: dispXLD.GenCrossContourXld(model.Row1, model.Col1, 12, 0.785398); viewModel = new ResultDisplayViewModel() { DisplayText = dispName, PositionX = posX, PositionY = posY, }; break; case ViewROI.MeasureType.Distance: case ViewROI.MeasureType.DistanceX: case ViewROI.MeasureType.DistanceY: case ViewROI.MeasureType.FitLine: case ViewROI.MeasureType.Line: case ViewROI.MeasureType.SymmetryLine: var arrowXLD = new HXLDCont(); //dispXLD.GenContourPolygonXld(new double[] { model.Row1, model.Row2 }, new double[] { model.Col1, model.Col2 }); posX = (model.Col1 + model.Col2) / 2.0; posY = (model.Row1 + model.Row2) / 2.0; viewModel = new ResultDisplayViewModel() { DisplayText = dispName, PositionX = posX, PositionY = posY, FirstArrowX = model.Col1, FirstArrowY = model.Row1, SecArrowX = model.Col2, SecArrowY = model.Row2, }; break; } // if (!textOnly && viewModel != null) viewModel.ImageXLD = dispXLD; } catch (Exception ex) { Hanbo.Log.LogManager.Error(ex); } return viewModel; }
/// <summary> /// 新增量測記錄 (distance, symmetrylin, angle, 3pointCircle) /// <para>Tree View</para> /// </summary> /// <param name="geoModel"></param> private void addMeasuredTreeNode(GeoDataGridViewModel geoModel) { if (_TreeViewContainer != null) { //addSubNodeBaseOnROIMeasureElement(geoModel); var parentNode = getGeoTreeNode(geoModel); _TreeViewContainer.Nodes.Add(parentNode); //Depend models as child node foreach (var recordID in geoModel.DependGeoRowNames) { //depend model var model = _DataList.SingleOrDefault(p => p.RecordID == recordID); if (model != null) { var childNode = getGeoTreeNode(model); parentNode.Nodes.Add(childNode); //childNode. HideCheckBox(_TreeViewContainer, childNode); } } _TreeViewContainer.Focus(); _TreeViewContainer.SelectedNode = parentNode; } }