internal virtual void _interpolateTwoVertices(int vertex1, int vertex2, double f, com.epl.geometry.Point outPoint) { if (vertex1 < 0 || vertex1 >= m_pointCount) { throw new com.epl.geometry.GeometryException("index out of bounds."); } if (vertex2 < 0 || vertex2 >= m_pointCount) { throw new com.epl.geometry.GeometryException("index out of bounds."); } // _ASSERT(!IsEmpty()); // _ASSERT(m_vertexAttributes != NULLPTR); _verifyAllStreams(); outPoint.AssignVertexDescription(m_description); if (outPoint.IsEmpty()) { outPoint._setToDefault(); } for (int attributeIndex = 0; attributeIndex < m_description.GetAttributeCount(); attributeIndex++) { int semantics = m_description._getSemanticsImpl(attributeIndex); for (int icomp = 0, ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); icomp < ncomp; icomp++) { double v1 = m_vertexAttributes[attributeIndex].ReadAsDbl(ncomp * vertex1 + icomp); double v2 = m_vertexAttributes[attributeIndex].ReadAsDbl(ncomp * vertex2 + icomp); outPoint.SetAttribute(semantics, icomp, com.epl.geometry.MathUtils.Lerp(v1, v2, f)); } } }
public override void GetPointByVal(int index, com.epl.geometry.Point dst) { if (index < 0 || index >= m_pointCount) { // TODO throw new com.epl.geometry.GeometryException("index out of bounds"); } // _ASSERT(!IsEmpty()); // _ASSERT(m_vertexAttributes != null); _verifyAllStreams(); com.epl.geometry.Point outPoint = dst; outPoint.AssignVertexDescription(m_description); if (outPoint.IsEmpty()) { outPoint._setToDefault(); } for (int attributeIndex = 0; attributeIndex < m_description.GetAttributeCount(); attributeIndex++) { // fix semantics int semantics = m_description._getSemanticsImpl(attributeIndex); // VertexDescription.getComponentCount(semantics); for (int icomp = 0, ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); icomp < ncomp; icomp++) { double v = m_vertexAttributes[attributeIndex].ReadAsDbl(ncomp * index + icomp); outPoint.SetAttribute(semantics, icomp, v); } } }
public override void CopyTo(com.epl.geometry.Geometry dst) { if (dst.GetType() != com.epl.geometry.Geometry.Type.Point) { throw new System.ArgumentException(); } com.epl.geometry.Point pointDst = (com.epl.geometry.Point)dst; dst._touch(); if (m_attributes == null) { pointDst.SetEmpty(); pointDst.m_attributes = null; pointDst.AssignVertexDescription(m_description); } else { pointDst.AssignVertexDescription(m_description); pointDst.ResizeAttributes(m_description.GetTotalComponentCount()); AttributeCopy(m_attributes, pointDst.m_attributes, m_description.GetTotalComponentCount()); } }
internal virtual void QueryCoord(double t, com.epl.geometry.Point point) { point.AssignVertexDescription(m_description); point.SetXY(GetCoord2D(t)); for (int iattrib = 1, nattrib = m_description.GetAttributeCount(); iattrib < nattrib; iattrib++) { int semantics = m_description._getSemanticsImpl(iattrib); int ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); for (int iord = 0; iord < ncomp; iord++) { double value = GetAttributeAsDbl(t, semantics, iord); point.SetAttribute(semantics, iord, value); } } }
private void _get(int endPoint, com.epl.geometry.Point outPoint) { if (IsEmptyImpl()) { throw new com.epl.geometry.GeometryException("empty geometry"); } // ._setToDefault(); outPoint.AssignVertexDescription(m_description); if (outPoint.IsEmptyImpl()) { outPoint._setToDefault(); } for (int attributeIndex = 0; attributeIndex < m_description.GetAttributeCount(); attributeIndex++) { int semantics = m_description._getSemanticsImpl(attributeIndex); for (int icomp = 0, ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); icomp < ncomp; icomp++) { double v = _getAttributeAsDbl(endPoint, semantics, icomp); outPoint.SetAttribute(semantics, icomp, v); } } }
public virtual void GetCenter(com.epl.geometry.Point point_out) { point_out.AssignVertexDescription(m_description); if (IsEmpty()) { point_out.SetEmpty(); return; } int nattrib = m_description.GetAttributeCount(); for (int i = 1; i < nattrib; i++) { int semantics = m_description.GetSemantics(i); int ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); for (int iord = 0; iord < ncomp; iord++) { double v = 0.5 * (GetAttributeAsDblImpl_(0, semantics, iord) + GetAttributeAsDblImpl_(1, semantics, iord)); point_out.SetAttribute(semantics, iord, v); } } point_out.SetXY(m_envelope.GetCenter()); }
// ////////////////// METHODS To REMOVE /////////////////////// public override com.epl.geometry.Point GetPoint(int index) { if (index < 0 || index >= m_pointCount) { throw new System.IndexOutOfRangeException(); } _verifyAllStreams(); com.epl.geometry.Point outPoint = new com.epl.geometry.Point(); outPoint.AssignVertexDescription(m_description); if (outPoint.IsEmpty()) { outPoint._setToDefault(); } for (int attributeIndex = 0; attributeIndex < m_description.GetAttributeCount(); attributeIndex++) { int semantics = m_description.GetSemantics(attributeIndex); for (int icomp = 0, ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); icomp < ncomp; icomp++) { double v = m_vertexAttributes[attributeIndex].ReadAsDbl(ncomp * index + icomp); outPoint.SetAttribute(semantics, icomp, v); } } return(outPoint); }
/// <summary> /// Sets the point's coordinates to the coordinates of the envelope at the /// given corner. /// </summary> /// <param name="index"> /// The index of the envelope's corners from 0 to 3. /// <p> /// 0 = lower left corner /// <p> /// 1 = top-left corner /// <p> /// 2 = top right corner /// <p> /// 3 = bottom right corner /// </param> /// <param name="ptDst"> /// The point whose coordinates are used to set the envelope's /// coordinate at a specified corner. /// </param> public virtual void QueryCornerByVal(int index, com.epl.geometry.Point ptDst) { ptDst.AssignVertexDescription(m_description); int nattrib = GetDescription().GetAttributeCount() - 1; switch (index) { case 0: { for (int i = 0; i < nattrib; i++) { int semantics = m_description.GetSemantics(i); int ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); for (int iord = 0; iord < ncomp; iord++) { ptDst.SetAttribute(semantics, iord, _getAttributeAsDbl(0, semantics, iord)); } } ptDst.SetXY(m_envelope.xmin, m_envelope.ymin); return; } case 1: { for (int i = 0; i < nattrib; i++) { int semantics = m_description.GetSemantics(i); int ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); for (int iord = 0; iord < ncomp; iord++) { ptDst.SetAttribute(semantics, iord, _getAttributeAsDbl(1, semantics, iord)); } } ptDst.SetXY(m_envelope.xmin, m_envelope.ymax); return; } case 2: { for (int i = 0; i < nattrib; i++) { int semantics = m_description.GetSemantics(i); int ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); for (int iord = 0; iord < ncomp; iord++) { ptDst.SetAttribute(semantics, iord, _getAttributeAsDbl(0, semantics, iord)); } } ptDst.SetXY(m_envelope.xmax, m_envelope.ymax); return; } case 3: { for (int i = 0; i < nattrib; i++) { int semantics = m_description.GetSemantics(i); int ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); for (int iord = 0; iord < ncomp; iord++) { ptDst.SetAttribute(semantics, iord, _getAttributeAsDbl(1, semantics, iord)); } } ptDst.SetXY(m_envelope.xmax, m_envelope.ymin); return; } default: { throw new System.IndexOutOfRangeException(); } } }