public override bool Draw(out IModelPoint mp, out IModel fmodel, out IModel smodel) { int index = -1; IDrawPrimitive primitive = null; IDoubleArray vArray = null; IUInt16Array indexArray = null; IFloatArray array3 = null; IDoubleArray norms = null; base.Draw(out mp, out fmodel, out smodel); try { object renderInfo = (base._renderType == RenderType.Texture) ? ((object)base._tcNames) : ((object)base._colors); int[] numArray = new int[2]; numArray[1] = 1; if (!base.NewEmptyModel(numArray, base._renderType, renderInfo, out fmodel)) { return(false); } primitive = fmodel.GetGroup(0).GetPrimitive(0); if (DrawGeometry.ConvertPolygon(base._vtx, 0.0, 0, out vArray, out indexArray, out array3, out norms)) { for (index = 0; index < vArray.Length; index++) { primitive.VertexArray.Append((float)vArray.Array[index]); } for (index = 0; index < indexArray.Length; index++) { primitive.IndexArray.Append(indexArray.Array[index]); } double naN = double.NaN; double ty = double.NaN; for (index = 0; index < (vArray.Length / 3); index++) { base.GetTexcoord(vArray.Array[index * 3], vArray.Array[(index * 3) + 1], out naN, out ty); primitive.TexcoordArray.Append((float)naN); primitive.TexcoordArray.Append((float)ty); } for (index = 0; index < norms.Length; index++) { primitive.NormalArray.Append((float)norms.Array[index]); } } primitive = fmodel.GetGroup(0).GetPrimitive(1); if (DrawGeometry.ConvertPolygon(base._vtx, -this._depth, 1, out vArray, out indexArray, out array3, out norms)) { for (index = 0; index < vArray.Length; index++) { primitive.VertexArray.Append((float)vArray.Array[index]); } for (index = 0; index < indexArray.Length; index++) { primitive.IndexArray.Append(indexArray.Array[index]); } for (index = 0; index < (vArray.Length / 3); index++) { float num2 = (float)vArray.Array[index * 3]; primitive.TexcoordArray.Append(num2); num2 = (float)vArray.Array[(index * 3) + 1]; primitive.TexcoordArray.Append(num2); } for (index = 0; index < norms.Length; index++) { primitive.NormalArray.Append((float)norms.Array[index]); } } int num5 = base._vtx.Length / 2; List <ushort> list = new List <ushort>(); for (index = 0; index < num5; index++) { primitive.VertexArray.Append((float)base._vtx[index * 2]); primitive.VertexArray.Append((float)base._vtx[(index * 2) + 1]); primitive.VertexArray.Append(0f); list.Add((ushort)((primitive.VertexArray.Length / 3) - 1)); primitive.VertexArray.Append((float)base._vtx[index * 2]); primitive.VertexArray.Append((float)base._vtx[(index * 2) + 1]); primitive.VertexArray.Append(-((float)this._depth)); list.Add((ushort)((primitive.VertexArray.Length / 3) - 1)); primitive.TexcoordArray.Append((index * 4f) / ((float)(num5 - 1))); primitive.TexcoordArray.Append(0f); primitive.TexcoordArray.Append((index * 4f) / ((float)(num5 - 1))); primitive.TexcoordArray.Append((float)this._depth); primitive.NormalArray.Append((float)Math.Sin((6.2831853071795862 * index) / 24.0)); primitive.NormalArray.Append((float)Math.Cos((6.2831853071795862 * index) / 24.0)); primitive.NormalArray.Append(0f); primitive.NormalArray.Append((float)Math.Sin((6.2831853071795862 * index) / 24.0)); primitive.NormalArray.Append((float)Math.Cos((6.2831853071795862 * index) / 24.0)); primitive.NormalArray.Append(0f); } for (index = 0; index < (num5 - 1); index++) { primitive.IndexArray.Append(list[index * 2]); primitive.IndexArray.Append(list[((index + 1) * 2) + 1]); primitive.IndexArray.Append(list[(index * 2) + 1]); primitive.IndexArray.Append(list[index * 2]); primitive.IndexArray.Append(list[(index + 1) * 2]); primitive.IndexArray.Append(list[((index + 1) * 2) + 1]); } return(true); } catch (Exception exception) { return(false); } }
public override bool Draw(out IModelPoint mp, out IModel fmodel, out IModel smodel) { int index = -1; IDrawPrimitive primitive = null; IDoubleArray vArray = null; IUInt16Array indexArray = null; IFloatArray array3 = null; IDoubleArray norms = null; base.Draw(out mp, out fmodel, out smodel); try { object renderInfo = (base._renderType == RenderType.Texture) ? ((object)base._tcNames) : ((object)base._colors); int[] numArray = new int[2]; numArray[1] = 1; if (!base.NewEmptyModel(numArray, base._renderType, renderInfo, out fmodel)) { return(false); } //绘制底部 primitive = fmodel.GetGroup(0).GetPrimitive(0); if (DrawGeometry.ConvertPolygon(this._vtx2, 0.0, 0, out vArray, out indexArray, out array3, out norms)) { for (index = 0; index < vArray.Length; index++) { primitive.VertexArray.Append((float)vArray.Array[index]); } for (index = 0; index < indexArray.Length; index++) { primitive.IndexArray.Append(indexArray.Array[index]); } for (index = 0; index < (vArray.Length / 3); index++) { float num2 = (float)vArray.Array[index * 3]; primitive.TexcoordArray.Append(num2); num2 = (float)vArray.Array[(index * 3) + 1]; primitive.TexcoordArray.Append(num2); } for (index = 0; index < norms.Length; index++) { primitive.NormalArray.Append((float)norms.Array[index]); } } double num3 = 0.0; int num4 = base._vtx.Length / 2; List <ushort> list = new List <ushort>(); primitive = fmodel.GetGroup(0).GetPrimitive(1); for (index = 0; index < num4; index++) { primitive.VertexArray.Append((float)base._vtx[index * 2]); primitive.VertexArray.Append((float)base._vtx[(index * 2) + 1]); primitive.VertexArray.Append((float)(this._terrainLine[index] - base._hBottom)); list.Add((ushort)((primitive.VertexArray.Length / 3) - 1)); primitive.VertexArray.Append((float)this._vtx2[index * 2]); primitive.VertexArray.Append((float)this._vtx2[(index * 2) + 1]); primitive.VertexArray.Append(0f); list.Add((ushort)((primitive.VertexArray.Length / 3) - 1)); num3 = (index == 0) ? num3 : (num3 += this._segLenth[index - 1]); primitive.TexcoordArray.Append((float)num3); primitive.TexcoordArray.Append((float)(this._terrainLine[index] - base._hBottom)); primitive.TexcoordArray.Append((float)num3); primitive.TexcoordArray.Append(0f); IVector3 vector = new Vector3Class { X = base._vtx[index * 2], Y = base._vtx[(index * 2) + 1], Z = 0.0 }; vector.Normalize(); primitive.NormalArray.Append((float)vector.X); primitive.NormalArray.Append((float)vector.Y); primitive.NormalArray.Append((float)vector.Z); //工程开挖挖洞效果贴图模型出错,添加法向量数组,使其与顶点数组数量一致 primitive.NormalArray.Append((float)vector.X); primitive.NormalArray.Append((float)vector.Y); primitive.NormalArray.Append((float)vector.Z); } for (index = 0; index < (num4 - 1); index++) { primitive.IndexArray.Append(list[index * 2]); primitive.IndexArray.Append(list[(index * 2) + 1]); primitive.IndexArray.Append(list[((index + 1) * 2) + 1]); primitive.IndexArray.Append(list[index * 2]); primitive.IndexArray.Append(list[((index + 1) * 2) + 1]); primitive.IndexArray.Append(list[(index + 1) * 2]); } return(true); } catch (Exception exception) { return(false); } }