AnyCAD C#開發-StepReader::Read讀取STEP


Form1.cs

AnyCAD2020+VS2012

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using AnyCAD.Platform; using AnyCAD.Exchange; using AnyCAD.Presentation; namespace WindowsFormsApplication3 { public partial class Form1 : Form { AnyCAD.Presentation.RenderWindow3d renderView; AnyCAD.Platform.BrepTools BrepToolsFeat = new AnyCAD.Platform.BrepTools(); AnyCAD.Exchange.StepReader reader = new AnyCAD.Exchange.StepReader(); public Form1() { InitializeComponent(); this.renderView = new AnyCAD.Presentation.RenderWindow3d(); this.Controls.Add(renderView); renderView.Size = this.ClientSize; } private void button1_Click(object sender, EventArgs e) { //創建塊1 TopoShape box1 = BrepToolsFeat.MakeBox(new Vector3(0, 0, 0), new Vector3(0, 0, 1), new Vector3(100, 50, 20)); //把體上所有的邊倒角 TopoShape NewBox1 = BrepToolsFeat.Chamfer(box1, 5, 8); //顯示幾何 int NewBox1ID = 0; renderView.ShowGeometry(NewBox1, NewBox1ID); } private void button2_Click(object sender, EventArgs e) { //讀取STEP CADBrower browser = new CADBrower(this.renderView); reader.Read("D:\\model1.stp", browser); } } } Caesar盧尚宇 2020年6月28日

CADBrower.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using AnyCAD.Platform; using AnyCAD.Presentation; using System.IO; namespace WindowsFormsApplication3 { class CADBrower : AnyCAD.Platform.TopoShapeReaderContext { private System.Windows.Forms.TreeView treeView = null; private AnyCAD.Presentation.RenderWindow3d renderView = null; private Stack<System.Windows.Forms.TreeNode> nodeStack = new Stack<System.Windows.Forms.TreeNode>(); private int nShapeCount = 100; private FaceStyle faceStyle; private LineStyle holeStyle; private System.Collections.Generic.Dictionary<int, FaceStyle> faceStyleDict = new System.Collections.Generic.Dictionary<int, FaceStyle>(); public CADBrower(AnyCAD.Presentation.RenderWindow3d _renderView) { renderView = _renderView; faceStyle = new FaceStyle(); holeStyle = new LineStyle(); holeStyle.SetLineWidth(3); holeStyle.SetColor(0, 256, 0); } ~CADBrower() { } public override void OnSetFaceColor(ColorValue clr) { if (clr.ToRGBA() == faceStyle.GetColor().ToRGBA()) return; FaceStyle fs = null; if (!faceStyleDict.TryGetValue(clr.ToRGBA(), out fs)) { fs = new FaceStyle(); fs.SetColor(clr); faceStyleDict.Add(clr.ToRGBA(), fs); } faceStyle = fs; } public override void OnBeginGroup(String name) { if (name.Length == 0) { name = "<UNKNOWN>"; } if (nodeStack.Count == 0) { } else { nodeStack.Push(nodeStack.Peek().Nodes.Add(name)); } } public override void OnEndGroup() { } public override bool OnBeiginComplexShape(TopoShape shape) { ++nShapeCount; String type = "Shape"; var st = shape.GetShapeType(); if (st == EnumTopoShapeType.Topo_COMPOUND) { type = "Compound"; } else if(st == EnumTopoShapeType.Topo_COMPSOLID) { type = "CompSolid"; } else if(st == EnumTopoShapeType.Topo_SOLID) { type = "Solid"; } else if(st == EnumTopoShapeType.Topo_SHELL) { type = "Shell"; } return true; } public override void OnEndComplexShape() { } public override void OnFace(TopoShape face) { ++nShapeCount; SceneNode node = renderView.ShowGeometry(face, nShapeCount); node.SetFaceStyle(faceStyle); GeomSurface gs = new GeomSurface(); gs.Initialize(face); if (gs.IsUClosed() || gs.IsVClosed()) { WireClassifier wc = new WireClassifier(); if (!wc.Initialize(face)) return; var holes = wc.GetInnerWires(); for (int ii = 0, len = holes.Size(); ii < len; ++ii) { var holeEdge = holes.GetAt(ii); ++nShapeCount; var holeNode = renderView.ShowGeometry(holeEdge, nShapeCount); holeNode.SetLineStyle(holeStyle); } } } } } Caesar盧尚宇 2020年6月28日


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM