public override object Execute(vdControls.vdFramedControl vdFramedControl) { if (_setList == null) { return(null); } if (_moveNothingCount >= 1) { _setIndex = -1; } ++_setIndex; if (_setIndex <= _setList.Count - 1) { _moveNothingCount = 0; var entities = _setList[_setIndex]; VdActionUtil.SelectFigures(vdFramedControl.BaseControl.ActiveDocument, entities); VdActionUtil.LocateFigures(vdFramedControl.BaseControl.ActiveDocument, entities); VdActionUtil.RefreshVectorDraw(vdFramedControl.BaseControl.ActiveDocument); } else { ++_moveNothingCount; } return(null); }
private void btnFindById_Click(object sender, EventArgs e) { var handles = GetHandles(txtHandleId.Text.Trim()); if (handles.Count == 0) { MessageBox.Show($"输入参数错误,无法识别为HandleId"); return; } var document = VD.BaseControl.ActiveDocument; var figures = new List <vdFigure>(); foreach (var handleId in handles) { var figure = VdSqlUtil.GetFigureByHandle(document, handleId); if (figure == null) { MessageBox.Show($"没有找到HandleId={handleId}的图元"); return; } figures.Add(figure); } VdActionUtil.SelectFigures(document, figures); VdActionUtil.LocateFigures(document, figures); VdActionUtil.RefreshVectorDraw(document); }
public Box GetBoundingBox() { if (_boundingBox.IsEmpty && _entities.Count != 0) { _boundingBox = VdActionUtil.GetBoundingBox(_entities); } return(_boundingBox); }
private void btnInsertRect_Click(object sender, EventArgs e) { var document = VD.BaseControl.ActiveDocument; var layout = document.ActiveLayOut; if (document.CommandAction.CmdRect("USER", "USER")) { var rect = layout.Entities.Last; rect.PenColor = new vdColor(Color.BlueViolet); VdActionUtil.RefreshVectorDraw(document); } }
private void tree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { var figureSet = e.Node.Tag as FigureSet; if (figureSet == null) { return; } VdActionUtil.SelectFigures(VD.BaseControl.ActiveDocument, figureSet.Entities); VdActionUtil.LocateFigures(VD.BaseControl.ActiveDocument, figureSet.Entities); VdActionUtil.RefreshVectorDraw(VD.BaseControl.ActiveDocument); }
public override object Execute(vdControls.vdFramedControl vdFramedControl) { var document = vdFramedControl.BaseControl.ActiveDocument; var layout = vdFramedControl.BaseControl.ActiveDocument.ActiveLayOut; var gripSelection = VdActionUtil.GetGripSelection(layout); var srcList = layout.Entities.Cast <vdFigure>().ToList(); var entitiesOfSample = gripSelection.Cast <vdFigure>().ToList(); var processor = new MatchProcessor(document); return(processor.Match(srcList, entitiesOfSample)); }
private void btnViewBox_Click(object sender, EventArgs e) { Box box = null; if (VdActionUtil.TryGetUserRect(VD.BaseControl.ActiveDocument, out box)) { var form = new FormViewer { Document = VD.BaseControl.ActiveDocument, RenderingArea = box }; form.Show(this); } }
public override object Execute(vdControls.vdFramedControl vdFramedControl) { var document = vdFramedControl.BaseControl.ActiveDocument; var vdGrid = vdFramedControl.vdGrid; var selectedObjArr = vdGrid.SelectedObject as object[]; if (selectedObjArr == null) { return(null); } VdActionUtil.LocateFigures(document, selectedObjArr.OfType <vdFigure>().ToList()); VdActionUtil.RefreshVectorDraw(document); return(null); }
public override object Execute(vdControls.vdFramedControl vdFramedControl) { var document = vdFramedControl.BaseControl.ActiveDocument; var selection = VdActionUtil.GetGripSelection(document.ActionLayout); if (selection.Count == 0) { return(string.Empty); } var sb = new StringBuilder(); foreach (vdFigure figure in selection) { sb.AppendLine($"{figure.GetType().Name}, Handle={figure.HandleId}"); } return(sb); }
public static void SmartVisibleLayout(vdControls.vdFramedControl vd, vdControls.vdFramedControl.LayoutStyle layoutStyle) { var visible = vd.GetLayoutStyle(layoutStyle); vd.SetLayoutStyle(layoutStyle, !visible); if (visible) { return; } if (layoutStyle == vdControls.vdFramedControl.LayoutStyle.PropertyGrid) { var selection = VdActionUtil.GetGripSelection(vd.BaseControl.ActiveDocument.ActionLayout); if (selection.Count > 0) { vd.vdGrid.SelectedObject = selection; } else { vd.vdGrid.SelectedObject = vd.BaseControl.ActiveDocument; } } }
private void btnDisNode_Click(object sender, EventArgs e) { var list = new List <vdFigure>(); foreach (TreeNode node in tree.Nodes) { foreach (TreeNode subNode in node.Nodes) { if (!subNode.Checked) { continue; } var figureSet = subNode.Tag as FigureSet; if (figureSet == null) { continue; } list.AddRange(figureSet.Entities); } } VdActionUtil.SelectFigures(VD.BaseControl.ActiveDocument, list); VdActionUtil.LocateFigures(VD.BaseControl.ActiveDocument, list); VdActionUtil.RefreshVectorDraw(VD.BaseControl.ActiveDocument); }
/// <summary> /// 匹配 /// </summary> /// <param name="srcFigures"></param> /// <param name="itemsOfSample">样本组,里面包含多个图元</param> /// <returns></returns> public MatchItem Match(List <vdFigure> srcFigures, List <vdFigure> itemsOfSample) { if (itemsOfSample == null || itemsOfSample.Count < 2) { throw new ArgumentException(nameof(itemsOfSample)); } //选中的样品,后续就是找跟这个相似的 var sample = new FigureSet(itemsOfSample); var majorFilter = FilterFactory.Get(sample.Major.GetType()); if (majorFilter == null) { return(null); } //从源图元集合中找出符合样本特征图元的元素 var majorList = majorFilter.Filter(srcFigures, sample.Major); //样本组外包矩形 var sampleBoundingBox = sample.GetBoundingBox(); //样本组特征图元到中心点的位移 var sampleOffsetOfMajor2Center = new gPoint( sampleBoundingBox.MidPoint.x - sample.Major.BoundingBox.MidPoint.x, sampleBoundingBox.MidPoint.y - sample.Major.BoundingBox.MidPoint.y); //样本组特征图元到中心点的位移长度 var sampleOffsetLenOfMajor2Center = gPoint.Distance2D(sampleBoundingBox.MidPoint, sample.Major.BoundingBox.MidPoint); //sampleBoundingBox.MidPoint - sample.Major.BoundingBox.MidPoint; //样本外包矩形的对角线长度 var sampleDiagonalLen = Math.Pow(Math.Pow(sampleBoundingBox.Width, 2.0) + Math.Pow(sampleBoundingBox.Height, 2.0), 0.5); //找到的和样本组类似的图元组集合 var result = new MatchItem { Sample = sample, CadFileName = _document.FileName }; //选择集合 var selectingList = new List <vdFigure>(); var debugLayer = VdSqlUtil.AppendLayer(_document, "DebugLayer"); VdSqlUtil.DeleteFiguresByLayer(_document.ActionLayout, debugLayer); foreach (var major in majorList) { //根据特征图元的中心点、样本组外包矩形的对角线长度,样本组特征图元到中心点的位移 //计算该次框选的范围 var boundingBox = new Box(); boundingBox.AddPoint(major.BoundingBox.MidPoint); boundingBox.AddWidth((sampleDiagonalLen + sampleOffsetLenOfMajor2Center) / 2d + 1); //boundingBox.AddWidth(sampleMajorMaxLenOfBox); //boundingBox.AddWidth(1); //boundingBox.Offset(sampleOffsetOfMajor2Center.x, sampleOffsetOfMajor2Center.y, 0); //框选 var selection = _document.Selections.Add("BoundingByMajor"); selection.RemoveAll(); selection.Select(RenderSelect.SelectingMode.WindowRectangle, new gPoints(new[] { boundingBox.UpperLeft, boundingBox.LowerRight })); //selectingList.Add(major); //selectingList.Add(AppendRect(_document, boundingBox, debugLayer)); //continue; var fromFigures = selection.OfType <vdFigure>().ToList(); fromFigures.Sort(new FigureMidPointComparer()); //从框选结果中筛选图元 var item = MatchCore(fromFigures, major, sample); if (item != null && GetXorItem(result, item) == null) { result.Results.Add(item); //selectingList.AddRange(item.Entities); } else { //VdUtil.SelectFigures(_document, fromFigures); //VdUtil.RefreshVectorDraw(_document); //break; } } if (selectingList.Count > 0) { VdActionUtil.SelectFigures(_document, selectingList); VdActionUtil.RefreshVectorDraw(_document); } return(result); }