protected override bool FilterItem(vdFigure item, vdFigure sampleMajor) { var itemFigure = item as vdArc; var sampleFigure = sampleMajor as vdArc; if (itemFigure == null || sampleFigure == null) { return(false); } var radiusRange = sampleFigure.Radius * 0.1; if (radiusRange > 1) { radiusRange = 1; } if (Math.Abs(itemFigure.Radius - sampleFigure.Radius) > radiusRange) { return(false); } //使用圆弧面积进行比较 if (Math.Abs(Math.Abs(itemFigure.Area()) - Math.Abs(sampleFigure.Area())) > radiusRange * radiusRange) { return(false); } return(true); }
protected override bool FilterItem(vdFigure item, vdFigure sampleMajor) { var itemFigure = item as vdCircle; var sampleFigure = sampleMajor as vdCircle; if (itemFigure == null || sampleFigure == null) { return(false); } if (itemFigure.Layer != sampleFigure.Layer) { return(false); } if (itemFigure.PenColor != sampleFigure.PenColor) { return(false); } if (Math.Abs(itemFigure.PenWidth - sampleFigure.PenWidth) > 0.1d) { return(false); } if (Math.Abs(itemFigure.Radius - sampleFigure.Radius) > 0.1d) { return(false); } return(true); }
public void ReadXml(XmlReader reader, vdDocument document) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == nameof(Major)) { var strMajor = reader.ReadString(); Major = VdSqlUtil.GetFigureByHandle(document, ulong.Parse(strMajor)); } if (reader.NodeType == XmlNodeType.Element && reader.Name == "Entity") { var strEntity = reader.ReadString(); var entity = VdSqlUtil.GetFigureByHandle(document, ulong.Parse(strEntity)); if (entity == null) { throw new XmlException($"找不到HandleId={strEntity}的图元"); } _entities.Add(entity); } if (reader.NodeType == XmlNodeType.EndElement && reader.Name == nameof(FigureSet)) { reader.Read(); break; } } Entities = new ReadOnlyCollection <vdFigure>(_entities); }
private vdFigure FilterFigure(List <vdFigure> srcFigures, vdFigure srcMajor, vdFigure sampleFigure, vdFigure sampleMajor) { var sampleFigureType = sampleFigure.GetType(); var sampleFigureOffsetLenSquared = sampleFigure.BoundingBox.MidPoint.DistanceSquared(sampleMajor.BoundingBox.MidPoint); for (var i = 0; i < srcFigures.Count; i++) { var srcfigure = srcFigures[i]; if (srcfigure == srcMajor) { continue; } if (srcfigure.GetType() != sampleFigureType) { continue; } var offset = srcfigure.BoundingBox.MidPoint - srcMajor.BoundingBox.MidPoint; if (Math.Abs(offset.x * offset.x + offset.y * offset.y - sampleFigureOffsetLenSquared) >= 2) { continue; } var filter = FilterFactory.Get(sampleFigureType); if (filter != null) { if (filter.IsMatchable(srcfigure, sampleFigure)) { return(srcfigure); } } } return(null); }
protected override bool FilterItem(vdFigure item, vdFigure sampleMajor) { var itemFigure = item as vdLine; var sampleFigure = sampleMajor as vdLine; if (itemFigure == null || sampleFigure == null) { return(false); } if (itemFigure.Layer != sampleFigure.Layer) { return(false); } if (itemFigure.PenColor != sampleFigure.PenColor) { return(false); } if (Math.Abs(itemFigure.PenWidth - sampleFigure.PenWidth) > 0.1d) { return(false); } var sampleLen = sampleFigure.Length(); if (Math.Abs(itemFigure.Length() - sampleLen) > sampleLen * 0.1d) { return(false); } return(true); }
/// <summary> /// 在<see cref="srcFigures"/>中过滤出和<see cref="sampleFigure"/>匹配的所有图元 /// </summary> /// <param name="srcFigures"></param> /// <param name="sampleFigure"></param> /// <returns></returns> public List <vdFigure> Filter(List <vdFigure> srcFigures, vdFigure sampleFigure) { if (srcFigures == null || srcFigures.Count == 0) { throw new ArgumentNullException(nameof(srcFigures)); } if (sampleFigure == null) { throw new ArgumentNullException(nameof(sampleFigure)); } var passedSet = new List <vdFigure>(); var sampleType = sampleFigure.GetType(); foreach (vdFigure srcFigure in srcFigures) { if (srcFigure.GetType() != sampleType) { continue; } if (srcFigure == sampleFigure) { continue; } if (PreFilterFunc != null && !PreFilterFunc.Invoke(srcFigure, sampleFigure)) { continue; } if (FilterItem(srcFigure, sampleFigure)) { passedSet.Add(srcFigure); } } return(passedSet); }
public FigureSet(List <vdFigure> items, vdFigure major) { _entities.AddRange(items); _entities.Sort(new FigureMidPointComparer()); Entities = new ReadOnlyCollection <vdFigure>(_entities); Major = major; }
protected override bool FilterItem(vdFigure item, vdFigure sampleMajor) { var itemString = string.Empty; var sampleString = string.Empty; var sampleVdText = sampleMajor as vdText; var sampleVdMText = sampleMajor as vdMText; if (sampleVdText == null && sampleVdMText == null) { return(false); } if (sampleVdText != null) { var itemFigure = item as vdText; if (itemFigure != null) { itemString = itemFigure.TextString; } else { return(false); } sampleString = sampleVdText.TextString; } if (sampleVdMText != null) { var itemFigure = item as vdMText; if (itemFigure != null) { itemString = itemFigure.TextString; } else { return(false); } sampleString = sampleVdMText.TextString; } if (string.IsNullOrWhiteSpace(itemString) || string.IsNullOrWhiteSpace(sampleString)) { return(false); } var count = 0; var itemEnumerator = itemString.GetEnumerator(); var sampleEnumerator = sampleString.GetEnumerator(); while (itemEnumerator.MoveNext() && sampleEnumerator.MoveNext()) { if (itemEnumerator.Current == sampleEnumerator.Current) { ++count; } else { break; } } return(count >= 4 || count >= 2 && sampleString.Length == count); }
protected override bool FilterItem(vdFigure item, vdFigure sampleMajor) { var itemFigure = item as vdPolyline; var sampleFigure = sampleMajor as vdPolyline; if (itemFigure == null || sampleFigure == null) { return(false); } if (itemFigure.Layer != sampleFigure.Layer) { return(false); } if (itemFigure.SPlineFlag != sampleFigure.SPlineFlag) { return(false); } if (itemFigure.PenColor != sampleFigure.PenColor) { return(false); } if (Math.Abs(itemFigure.PenWidth - sampleFigure.PenWidth) > 0.1d) { return(false); } if (ConsiderVertex) { if (itemFigure.VertexList.Count != sampleFigure.VertexList.Count) { return(false); } if (sampleFigure.VertexList.Count >= 3) { //如果多余两个顶点,则判断面积 if (Math.Abs(Math.Abs(itemFigure.Area()) - Math.Abs(sampleFigure.Area())) >= 0.001d) { return(false); } } else { //如果只有俩顶点则判断长度 if (Math.Abs(itemFigure.Length() - sampleFigure.Length()) >= 0.001d) { return(false); } } } return(true); }
private void SetEntityLayer(vdFigure vdf, string layerName) { vdLayer layer = vDraw.ActiveDocument.Layers.FindName(layerName); if (layer == null) { layer = new vdLayer(vDraw.ActiveDocument, layerName); vDraw.ActiveDocument.Layers.Add(layer); } vdf.Layer = layer; }
/// <summary> /// 判断两个图元是否匹配 /// </summary> /// <param name="figure1"></param> /// <param name="figure2"></param> /// <returns></returns> public bool IsMatchable(vdFigure figure1, vdFigure figure2) { if (figure1.GetType() != figure2.GetType()) { return(false); } if (PreFilterFunc != null && !PreFilterFunc.Invoke(figure1, figure2)) { return(false); } return(FilterItem(figure1, figure2)); }
/// <summary> /// 找到对应的点和向量 /// </summary> /// <param name="i32">定点数组</param> /// <param name="points">坐标数组</param> /// <param name="vdPf">父图形,里面存点和向量</param> /// <param name="orgin">输出找到的点</param> /// <param name="vector">输出找到的向量</param> /// <returns>是否找到</returns> /// bool FindPointVector(gPoints Points, vdPolyface vdp, vdFigure vdPf, ref gPoint orign, ref Vector vector) { int iii = 1; while (true) { string strName = "POINTVECTOR" + iii.ToString(); iii++; vdXProperty vdx = vdPf.XProperties.FindName(strName); if (vdx != null) { string strValue = (string)vdx.PropValue; string[] strs = strValue.Split(new char[] { ',' }); orign = new gPoint(double.Parse(strs[0]), double.Parse(strs[1]), double.Parse(strs[2])); vector = new Vector(double.Parse(strs[3]), double.Parse(strs[4]), double.Parse(strs[5])); double d = -1.0; gPoint gEnd = orign + vector; int currenti = 0; for (int i = 0; i < Points.Count; i++) { currenti = i; gPoint gp = Points[i]; double dd = gp.DistanceFromLine(orign, gEnd); if (d < 0) { d = dd; } else { if (Math.Abs(dd - d) > Globals.VD_ZERO5) { //MessageBox.Show("Error!"); break; } } } if (currenti == Points.Count - 1) { return(true); } } else { return(false); } } }
protected override bool FilterItem(vdFigure item, vdFigure sampleMajor) { var itemFigure = item as vdPolyhatch; var sampleFigure = sampleMajor as vdPolyhatch; if (itemFigure == null || sampleFigure == null) { return(false); } if (itemFigure.HatchProperties.FillMode != sampleFigure.HatchProperties.FillMode) { return(false); } if (itemFigure.PolyCurves.Count != sampleFigure.PolyCurves.Count) { return(false); } var sampleMidPt = sampleFigure.BoundingBox.MidPoint; var itemMidPt = itemFigure.BoundingBox.MidPoint; for (var i = 0; i < sampleFigure.PolyCurves.Count; i++) { var itemCurves = itemFigure.PolyCurves[i]; var sampleCurves = sampleFigure.PolyCurves[i]; if (itemCurves.Count != sampleCurves.Count) { return(false); } for (var j = 0; j < sampleCurves.Count; j++) { var itemCurve = itemCurves[j]; var sampleCurve = sampleCurves[j]; if (itemCurve.GetType() != sampleCurve.GetType()) { return(false); } var itemDistance = gPoint.Distance2D(itemCurve.BoundingBox.MidPoint, itemMidPt); var sampleDistance = gPoint.Distance2D(sampleCurve.BoundingBox.MidPoint, sampleMidPt); if (Math.Abs(itemDistance - sampleDistance) > 1d) { return(false); } } } return(true); }
public void Draw_Elements() { //Clear_All(); ASTRADoc astdoc; //astdoc = new ASTRADoc(iACad.AstraDocument); astdoc = (iACad.AstraDocument); astdoc.Elements.Clear(); for (int i = 0; i < DGV.Rows.Count; i++) { Element elm = new Element(); DGV[0, i].Value = i + 1; //jn.NodeNo = MyList.StringToInt(DGV[0, i].Value.ToString(), 0); elm.ElementNo = MyStrings.StringToInt(DGV[0, i].Value.ToString(), 0); elm.Node1.NodeNo = MyStrings.StringToInt(DGV[1, i].Value.ToString(), 0); elm.Node2.NodeNo = MyStrings.StringToInt(DGV[2, i].Value.ToString(), 0); elm.Node3.NodeNo = MyStrings.StringToInt(DGV[3, i].Value.ToString(), 0); elm.Node4.NodeNo = MyStrings.StringToInt(DGV[4, i].Value.ToString(), 0); astdoc.Elements.Add(elm); } //iACad.Document.ActiveLayOut.Entities.EraseAll(); foreach (var item in iACad.Document.ActionLayout.Entities) { if (item is vdFigure) { vdFigure vf = item as vdFigure; if (vf.Layer.Name == "Elements") { vf.Deleted = true; } } } iACad.Document.Redraw(true); astdoc.Elements.CopyCoordinates(astdoc.Joints); astdoc.Elements.DrawElements(iACad.Document); //iACad.AstraDocument = astdoc; //AST_DOC.Members.DrawMember(VDoc); //AST_DOC.Elements.DrawElements(VDoc); //AST_DOC.Supports.DrawSupport(VDoc); }
public FigureSet(List <vdFigure> items = null) { if (items == null) { return; } _entities.AddRange(items); _entities.Sort(new FigureMidPointComparer()); Entities = new ReadOnlyCollection <vdFigure>(_entities); var list4Major = new List <vdFigure>(_entities); list4Major.Sort(new MajorFigureComparer()); Major = list4Major[0]; }
public void Draw_Joints() { //Clear_All(); ASTRADoc astdoc; //astdoc = new ASTRADoc(iACad.AstraDocument); astdoc = (iACad.AstraDocument); astdoc.Joints.Clear(); for (int i = 0; i < DGV.Rows.Count; i++) { JointCoordinate jn = new JointCoordinate(); DGV[0, i].Value = i + 1; //jn.NodeNo = MyList.StringToInt(DGV[0, i].Value.ToString(), 0); jn.NodeNo = MyStrings.StringToInt(DGV[0, i].Value.ToString(), 0); jn.Point.x = MyStrings.StringToDouble(DGV[1, i].Value.ToString(), 0.0); jn.Point.y = MyStrings.StringToDouble(DGV[2, i].Value.ToString(), 0.0); jn.Point.z = MyStrings.StringToDouble(DGV[3, i].Value.ToString(), 0.0); astdoc.Joints.Add(jn); } //iACad.Document.ActiveLayOut.Entities.EraseAll(); foreach (var item in iACad.Document.ActionLayout.Entities) { if (item is vdFigure) { vdFigure vf = item as vdFigure; if (vf.Layer.Name == "Nodes") { vf.Deleted = true; } } } iACad.Document.Redraw(true); astdoc.Joints.DrawJointsText(iACad.Document, 0.3); //iACad.AstraDocument = astdoc; //AST_DOC.Members.DrawMember(VDoc); //AST_DOC.Elements.DrawElements(VDoc); //AST_DOC.Supports.DrawSupport(VDoc); }
private static bool CATCHMENT_ProcessTerrainSurveyData(vdDocument vdoc) { vdoc.Prompt("Click Left and Right mouse button on River Centre Line Polyline :"); vdSelection sel = vdoc.ActionUtility.getUserSelection(); vdFigure vfig = sel[0]; vdPolyline pline = vfig as vdPolyline; if (pline != null) { frm_Process_Terrain_Survey_data frm = new frm_Process_Terrain_Survey_data(pline); frm.txt_select_survey_data.Text = sample_data; frm.ShowDialog(); } return(false); }
bool FindPointVector(Int32Array i32, gPoints Points, vdFigure vdPf, ref gPoint orign, ref Vector vector) { int iii = 1; while (true) { string strName = "POINTVECTOR" + iii.ToString(); iii++; vdXProperty vdx = vdPf.XProperties.FindName(strName); if (vdx != null) { string strValue = (string)vdx.PropValue; string[] strs = strValue.Split(new char[] { ',' }); orign = new gPoint(double.Parse(strs[0]), double.Parse(strs[1]), double.Parse(strs[2])); vector = new Vector(double.Parse(strs[3]), double.Parse(strs[4]), double.Parse(strs[5])); double d = -1.0; for (int i = 0; i < i32.Count; i++) { gPoint gEnd = orign + vector; gPoint gp = Points[i32[i]]; double dd = gp.DistanceFromLine(orign, gEnd); if (d < 0) { d = dd; } else { if (Math.Abs(dd - d) > Globals.VD_ZERO5) { break; } } } return(true); } else { return(false); } } }
private void timer1_Tick(object sender, EventArgs e) { timer1.Interval = Interval; for (int i = 0; i < list_index.Count; i++) { vdFigure al = doc.ActiveLayOut.Entities[list_index[i]]; if (count == 0) { al.visibility = vdFigure.VisibilityEnum.Invisible; } else { al.visibility = vdFigure.VisibilityEnum.Visible; count = -1; } } count++; doc.Redraw(true); }
private vdBlock GetSphereBlk() { vdBlock blk = vDraw.ActiveDocument.Blocks.FindName("_PointMark"); if (blk == null) { vDraw.ActiveDocument.ActivePenColor.ColorIndex = 9; vDraw.ActiveDocument.CommandAction.CmdSphere(new gPoint(0, 0, 0), 1.0, 10, 10); vdFigure vdf = vDraw.ActiveDocument.ActiveLayOut.Entities.Last; if (vdf is vdPolyface) { (vdf as vdPolyface).SmoothAngle = 30; blk = new vdBlock(vDraw.ActiveDocument, "_PointMark"); blk.Entities.Add(vdf.Clone(vDraw.ActiveDocument)); vDraw.ActiveDocument.Blocks.Add(blk); vdf.Deleted = true; return(blk); } return(null); } return(blk); }
public FigureSet MatchCore(List <vdFigure> srcFigures, vdFigure srcMajor, FigureSet sample) { if (srcFigures.Count < sample.Entities.Count) { return(null); } //后面对该集合进行改动 srcFigures = new List <vdFigure>(srcFigures); var resultItemList = new List <vdFigure>(); foreach (var sampleItem in sample.Entities) { if (sampleItem == sample.Major) { resultItemList.Add(srcMajor); continue; } var srcFigure = FilterFigure(srcFigures, srcMajor, sampleItem, sample.Major); if (srcFigure != null) { resultItemList.Add(srcFigure); srcFigures.Remove(srcFigure); } else { return(null); } } if (resultItemList.Count == sample.Entities.Count) { return(new FigureSet(resultItemList, srcMajor)); } return(null); }
public static void Merge(VectorDrawBaseControl v, FormProgress p) { p.Text = "合并面片..."; int ii = 0; int count = v.ActiveDocument.Blocks.Count; vdArray <vdBlock> blocks = new vdArray <vdBlock>(); bool LargeNum = false; foreach (vdBlock vdb in v.ActiveDocument.Blocks) { if (vdb.Entities.Count == 0) { blocks.AddItem(vdb); } ii++; int value = (ii * 100) / count; Dictionary <string, vdPolyface> layFaces = new Dictionary <string, vdPolyface>(); Dictionary <int, int> ids = new Dictionary <int, int>(); int icount = 0; p.SetProgress(value); //if (vdb.Entities.Count > 5000) //{ // LargeNum = true; //} //else //{ // LargeNum = false; //} foreach (vdFigure vdf in vdb.Entities) { if (vdf is vdPolyface) { vdPolyface vdp = vdf as vdPolyface; if (!layFaces.ContainsKey(vdp.Layer.Name)) { layFaces.Add(vdp.Layer.Name, vdp); ids.Add(vdp.Id, vdp.Id); } else { layFaces[vdp.Layer.Name].MergePolyface1(vdp); } //if (LargeNum) //{ // icount++; //} } } icount = 0; for (int i = vdb.Entities.Count - 1; i >= 0; i--) { vdFigure vdf = vdb.Entities[i]; if (vdf is vdPolyface && ids.ContainsKey(vdf.Id)) { vdPolyface vdp1 = vdf as vdPolyface; if (vdp1.FaceList.Count > 0) { vdp1.ClearVerticies1(); } else { vdb.Entities.RemoveItem(vdf); vdf.Dispose(); vdf = null; } } else if (vdf is vdPolyface) { vdb.Entities.RemoveItem(vdf); vdf.Dispose(); vdf = null; } //if (LargeNum) //{ // icount++; //} } //vdb.Update(); } foreach (vdBlock vdb in blocks) { v.ActiveDocument.Blocks.RemoveItem(vdb); vdb.Dispose(); //vdb = null; } GC.Collect(); }
/// <summary> /// 旧的合并方法,已经弃用 /// </summary> /// <param name="v"></param> /// <param name="p"></param> public static void Merge1(VectorDrawBaseControl v, FormProgress p) { p.Text = "合并面片..."; int ii = 0; int count = v.ActiveDocument.Blocks.Count; vdArray <vdBlock> blocks = new vdArray <vdBlock>(); foreach (vdBlock vdb in v.ActiveDocument.Blocks) { if (vdb.Entities.Count == 0) { blocks.AddItem(vdb); } int percent = (int)((++ii * 1.0 / count) * 100); p.SetProgress(percent); Dictionary <string, vdPolyface> layFaces = new Dictionary <string, vdPolyface>(); Dictionary <int, int> ids = new Dictionary <int, int>(); foreach (vdFigure vdf in vdb.Entities) { if (vdf is vdPolyface) { vdPolyface vdp = vdf as vdPolyface; if (!layFaces.ContainsKey(vdp.Layer.Name)) { layFaces.Add(vdp.Layer.Name, vdp); ids.Add(vdp.Id, vdp.Id); } else { layFaces[vdp.Layer.Name].MergePolyface1(vdp); } } } for (int i = vdb.Entities.Count - 1; i >= 0; i--) { vdFigure vdf = vdb.Entities[i]; if (vdf is vdPolyface && ids.ContainsKey(vdf.Id)) { vdPolyface vdp1 = vdf as vdPolyface; if (vdp1.FaceList.Count > 0) { vdp1.ClearVerticies(); } else { vdb.Entities.RemoveItem(vdf); vdf.Dispose(); vdf = null; } } else if (vdf is vdPolyface) { vdb.Entities.RemoveItem(vdf); vdf.Dispose(); vdf = null; } } } foreach (vdBlock vdb in blocks) { v.ActiveDocument.Blocks.RemoveItem(vdb); vdb.Dispose(); //vdb = null; } GC.Collect(); }
protected abstract bool FilterItem(vdFigure item, vdFigure sampleMajor);
public void setQRCode(vdFigure qrCode) { this.qrCode = qrCode; }
/// <summary> /// /处理polyface /// </summary> //bool <param name="vdp"></param> bool GetVDPBorderLine(vdPolyface vdp, vdFigure vdPf) { vdPolyface vdpOut = new vdPolyface(); Dictionary <string, bool> kvs = new Dictionary <string, bool>(); Int32Array iii32 = vdp.FaceList; for (int i = 0; i < iii32.Count; i++) { if (vdp.FaceList[i] < 0) { if (i % 5 != 4) { vdp.FaceList[i] = -vdp.FaceList[i]; } } } iii32 = vdp.FaceList; for (int i = 0; i < iii32.Count; i = i + 5) { AddSide(kvs, iii32[i], iii32[i + 1]); AddSide(kvs, iii32[i + 1], iii32[i + 2]); AddSide(kvs, iii32[i + 2], iii32[i]); } //找到外边界 Int32Array i32 = ParaseSide2List(kvs, vdp.VertexList.Count + 1); if (i32.Count < 5) { return(false); } //找到向量 ///int iii = 1; gPoints Points = vdp.VertexList; Points.makeClosed(); gPoints gps = new gPoints();// Points.Clone() as gPoints; foreach (int ii in i32) { gps.Add(Points[ii - 1]); } gps.RemoveEqualPoints(Globals.VD_ZERO5); //gps.RemoveInLinePoints(); Int32Array ii32 = new Int32Array(); gPoints gpss = new gPoints(); #region 延长线段到最长 gpss.Add(gps[0]); for (int i = 0; i < gps.Count - 1; i++) { //if (i == 5) //{ // int j = 0; //} if (i != gps.Count - 2) { double dd = Globals.distPointFromLine(gps[i + 2], gps[i], gps[i + 1]); if (Globals.distPointFromLine(gps[i + 2], gps[i], gps[i + 1]) < 0.2) { continue; } else { gpss.Add(gps[i + 1]); } } if (i == gps.Count - 2) { if (Globals.distPointFromLine(gps[1], gps[i], gps[i + 1]) < 0.2) { gpss.RemoveAt(0); } else { gpss.Add(gps[i + 1]); } } } #endregion gpss.makeClosed(); gpss.RemoveLast(); //找到四条边中符合圆柱体标准的。 if (gpss.Count % 2 != 0 || gpss.Count < 10) { return(false); } int half = gpss.Count / 2; gPoints gEndSide1 = new gPoints(); gPoints gEndSide2 = new gPoints(); gPoints gParaSide1 = new gPoints(); gPoints gParaSide2 = new gPoints(); for (int i = 0; i < gpss.Count / 2; i++) { Vector v1 = new Vector(gpss[i], gpss[i + 1]); Vector v2 = new Vector(gpss[i + half], gpss[(half + i + 1) % gpss.Count]); v1.Cross(v2); if (v1.Length < Globals.VD_ZERO6) //说明平行 { gEndSide1.RemoveAll(); gEndSide2.RemoveAll(); gParaSide1.RemoveAll(); gParaSide2.RemoveAll(); gParaSide1.Add(gpss[i]); gParaSide1.Add(gpss[i + 1]); gParaSide2.Add(gpss[i + half]); gParaSide2.Add(gpss[(half + i + 1) % gpss.Count]); for (int j = i + 1; j < i + half; j++) { gEndSide1.Add(gpss[j]); } for (int j = i + half + 1; j < i + 2 * half; j++) { gEndSide2.Add(gpss[j % gpss.Count]); } gPoint sp1 = new gPoint(); gPoint sp2 = new gPoint(); double radius = 0.0; //判断是个边是否符合圆柱体标准 if (!IS4SideCyln(gEndSide1, gEndSide2, gParaSide1, gParaSide2, ref sp1, ref sp2, out radius)) //不符合圆柱体标准 ,直接返回错误 { continue; } gpss.RemoveAll(); //这里可以进行圆柱简化 gpss.AddRange(gEndSide1); gpss.AddRange(gParaSide2); gpss.AddRange(gEndSide2); gpss.AddRange(gParaSide1); //是否齐头圆柱,即没有切过的圆柱,如果齐圆柱头,特殊处理,此处暂时不变, // half = gpss.Count / 2; vdpOut.VertexList = gpss; vdpOut.FaceList = new Int32Array(); for (int ii = 1; ii < half; ii++) { vdpOut.FaceList.Add(ii); vdpOut.FaceList.Add(ii + 1); vdpOut.FaceList.Add(gpss.Count - (ii + 1) + 1); vdpOut.FaceList.Add(gpss.Count - ii + 1); vdpOut.FaceList.Add(-1); } vdp.FaceList = vdpOut.FaceList; vdp.VertexList = vdpOut.VertexList; //vdp.Invalidate(); //vdp.Update(); break; } } //找到两个顶边,如果多个就扔掉了。 //GetNonParaSide(vdp.VertexList, i32, orign, vector); return(true); //Int32Array side1= }
public void Draw_Members() { //Clear_All(); ASTRADoc astdoc; //astdoc = new ASTRADoc(ACad.AstraDocument); astdoc = (iACad.AstraDocument); astdoc.Members.Clear(); for (int i = 0; i < DGV.Rows.Count; i++) { MemberIncidence mbr = new MemberIncidence(); DGV[0, i].Value = i + 1; mbr.MemberNo = MyStrings.StringToInt(DGV[0, i].Value.ToString(), 0); if (DGV[1, i].Value.ToString().StartsWith("C")) { mbr.MemberType = MembType.CABLE; } else if (DGV[1, i].Value.ToString().StartsWith("T")) { mbr.MemberType = MembType.TRUSS; } else { mbr.MemberType = MembType.BEAM; } mbr.StartNode.NodeNo = MyStrings.StringToInt(DGV[2, i].Value.ToString(), 0); mbr.EndNode.NodeNo = MyStrings.StringToInt(DGV[3, i].Value.ToString(), 0); astdoc.Members.Add(mbr); } foreach (var item in iACad.Document.ActionLayout.Entities) { if (item is vdFigure) { vdFigure vf = item as vdFigure; if (vf.Layer.Name == "Members") { vf.Deleted = true; } } } iACad.Document.Redraw(true); astdoc.Members.CopyJointCoordinates(astdoc.Joints); astdoc.MemberProperties.CopyMemberIncidence(astdoc.Members); astdoc.Members.DrawMember(iACad.Document, 0.3); }
void BaseControl_vdMouseDown(MouseEventArgs e, ref bool cancel) { Childform frm = this.ActiveMdiChild as Childform; if (frm == null) { return; } if (e.Button != MouseButtons.Left) { return; } if (frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveActions == null) { return; } if (frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveActions.Count > 1) { return; } if (frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveAction is VectorDraw.Professional.CommandActions.ActionLine) { return; } vdSelection GripEntities = GetGripsCollection(); gPoint p1 = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.World2Pixelmatrix.Transform(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveAction.MouseLocation); gPoint p1viewCS = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.CurrentMatrix.Transform(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveAction.MouseLocation); Point location = new Point((int)p1.x, (int)p1.y); #region Grip Move Code if (System.Windows.Forms.Control.ModifierKeys == Keys.None) { Box box = new Box(); box.AddPoint(p1viewCS); box.AddWidth(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.GlobalProperties.GripSize * frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.PixelSize / 2.0d); vdSelection selset = new vdSelection(); vdArray <Int32Array> indexesArray = new vdArray <Int32Array>(); gPoint pt = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.Document.World2UserMatrix.Transform(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveAction.MouseLocation); foreach (vdFigure fig in GripEntities) { Int32Array indexes = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.getGripIndexes(fig, box); if (indexes.Count != 0) { selset.AddItem(fig, false, vdSelection.AddItemCheck.Nochecking); indexesArray.AddItem(indexes); } } if (selset.Count > 0) { VectorDraw.Professional.ActionUtilities.CmdMoveGripPoints MoveGrips = new VectorDraw.Professional.ActionUtilities.CmdMoveGripPoints(pt, frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut, selset, indexesArray); frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActionAdd(MoveGrips); VectorDraw.Actions.StatusCode ret = MoveGrips.WaitToFinish(); cancel = true; return; } } #endregion #region One by One implementation vdFigure Fig = null; Fig = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.GetEntityFromPoint(location, frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.GlobalProperties.PickSize, false, vdDocument.LockLayerMethodEnum.EnableGetObjectGrip); frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.Document.LockLayerMethodStack.Push(vdDocument.LockLayerMethodEnum.DisableAll | ((frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.Document.LockLayerMethod & vdDocument.LockLayerMethodEnum.EnableGetObjectGrip) != 0 ? vdDocument.LockLayerMethodEnum.EnableAddToSelections : 0)); bool bShift = ((System.Windows.Forms.Control.ModifierKeys & Keys.Shift) == Keys.Shift); if (Fig != null) { ClearAllGrips(GripEntities); GripEntities.AddItem(Fig, true, vdSelection.AddItemCheck.RemoveInVisibleEntities); if (cancel) { Fig.ShowGrips = false; } else { Fig.ShowGrips = true; } frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.RefreshGraphicsControl(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.control); // DrawGrips(GripEntities); } frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.Document.LockLayerMethodStack.Pop(); #endregion }
public void SetAlign() { vdFigure vdFig = null; vdLine stln = null; vdLine endln = null; object ret = null; gPoint EPT, SPT; gPoint FSP; // First Start Point gPoint FDP; // First Destination Point gPoint SSP; // Second Start Point gPoint SDP; // Second Destination Point vdSelection vdSel = null; document.Prompt("Select Entities:"); ret = document.ActionUtility.getUserSelection(); document.Prompt(null); if (ret == null || !(ret is vdSelection)) { return; } vdSel = ret as vdSelection; document.Prompt("Enter First Source Point:"); ret = document.ActionUtility.getUserPoint(); document.Prompt(null); if (ret == null || !(ret is gPoint)) { return; } FSP = ret as gPoint; document.Prompt("Enter First Destination Point:"); ret = document.ActionUtility.getUserPoint(); document.Prompt(null); if (ret == null || !(ret is gPoint)) { return; } FDP = ret as gPoint; document.Prompt("Enter Second Source Point:"); ret = document.ActionUtility.getUserPoint(); document.Prompt(null); if (ret == null || !(ret is gPoint)) { return; } SSP = ret as gPoint; document.Prompt("Enter Second Destination Point:"); ret = document.ActionUtility.getUserPoint(); document.Prompt(null); if (ret == null || !(ret is gPoint)) { return; } SDP = ret as gPoint; //endln.StartPoint = FSP //stln.StartPoint = FDP //endln.EndPoint = SSP //stln.EndPoint = SDP FSP.z = 0.0; SSP.z = 0.0; FDP.z = 0.0; SDP.z = 0.0; stln = new vdLine(FDP, SDP); endln = new vdLine(FSP, SSP); double scaleFactor = stln.Length() / endln.Length(); document.CommandAction.CmdScale(vdSel, endln.StartPoint, scaleFactor); document.CommandAction.CmdMove(vdSel, endln.StartPoint, stln.StartPoint); double ang = stln.StartPoint.GetAngle(stln.EndPoint); double ang1 = endln.StartPoint.GetAngle(endln.EndPoint); ang = ang - ang1; document.CommandAction.CmdRotate(vdSel, stln.StartPoint, ang); }