在CE里显示如左图,通过ElementGraphicsProcessor的ProcessCurveVector获取DEllipse3d ,然后通过PolyfaceConstruction mesh导入到three.js中显示如右图,圆弧显示有问题,这块是代码有问题吗?
代码如下:
public override BentleyStatus ProcessCurveVector(CurveVector curves, bool isFilled) { //if (!curves.IsClosedPath) // return BentleyStatus.Success;
List<DEllipse3d> allArcs = new List<DEllipse3d>(); List<DPoint3d> allPoints = new List<DPoint3d>(); for (int a = 0; a < curves.Count(); a++) { CurvePrimitive curvePri = curves.GetAt(a); MyTypes += curvePri.GetCurvePrimitiveType().ToString(); MyTypes += "\n";
IList<DPoint3d> points = new List<DPoint3d>(); if (curves.GetAt(a).TryGetLineString(points)) { allPoints.AddRange(points); }
DEllipse3d arc; if (curves.GetAt(a).TryGetArc(out arc)) { //allPoints.Add(arc.StartAngle); allArcs.Add(arc); } }
FacetOptions facetOpt = GetFacetOptions(); facetOpt.SetCurveDefaultsDefaults(); PolyfaceConstruction polyface = new PolyfaceConstruction(facetOpt); polyface.AddTriangulation(allPoints); for( int i =0; i<allArcs.Count; i ++) { DEllipse3d arc = allArcs[i]; polyface.AddFullDisk(ref arc, 3); }
PolyfaceHeader polyfaceHeader = polyface.GetClientMesh(); if (polyfaceHeader != null) ExportFacets(polyfaceHeader);
return BentleyStatus.Success; }
public override FacetOptions GetFacetOptions() { FacetOptions options = new FacetOptions(); //options.SetCurveDefaultsDefaults();
//options.ChordTolerance = 10000; options.AngleTolerance = LevelOfDetail; //options.MaxEdgeLength = 0.0f;
options.EdgeHiding = false; options.MaxPerFace = 3; options.CurvedSurfaceMaxPerFace = 3; options.NormalsRequired = true; options.ParamsRequired = true;
return options; }
数据文件如下:
testarc.dgn
有可能是你后续工作的问题。我导出后再导回到Mstn没有问题。附件是我导出的一种JSON格式的数据文件,你从该文件中构造一下你的Mesh试一下。
geo.zip
下图是我导回Mstn后显示的效果:
好的,我这边检查下处理mesh的代码。你方便把你处理mesh的代码发我参考下吗?
已经私信发给你了。这个是我们项目中的代码,请不要外传!
好的,谢谢。
付老师:
我看了下您给的是从json里面读取数据在CE里创建mesh的代码,我怀疑我这边是保存mesh的时候出的问题,这块的代码方法我参考下吗?就是把PolyfaceHeader 存到json这块的代码,非常感谢。
你只需要保证你输出的结果和我发给你的JSON文件中的结果一致即可。