public void Assign(IClone src)
{
//1. make sure that src is pointing to a valid object
if (null == src)
{
throw new COMException("Invalid object.");
}
//2. make sure that the type of src is of type 'TriangleElementClass'
if (!(src is TriangleElementClass))
{
throw new COMException("Bad object type.");
}
//3. assign the properties of src to the current instance
TriangleElementClass srcTriangle = (TriangleElementClass)src;
m_elementName = srcTriangle.Name;
m_elementType = srcTriangle.Type;
m_autoTrans = srcTriangle.AutoTransform;
m_scaleRef = srcTriangle.ReferenceScale;
m_rotation = srcTriangle.Angle;
m_size = srcTriangle.Size;
m_anchorPointType = srcTriangle.AnchorPoint;
IObjectCopy objCopy = new ObjectCopyClass();
//take care of the custom property
if (null != srcTriangle.CustomProperty)
{
if (srcTriangle.CustomProperty is IClone)
m_customProperty = (object)((IClone)srcTriangle.CustomProperty).Clone();
else if (srcTriangle.CustomProperty is IPersistStream)
{
m_customProperty = objCopy.Copy((object)srcTriangle.CustomProperty);
}
else if (srcTriangle.CustomProperty.GetType().IsSerializable)
{
//serialize to a memory stream
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, srcTriangle.CustomProperty);
byte[] bytes = memoryStream.ToArray();
memoryStream = new MemoryStream(bytes);
m_customProperty = binaryFormatter.Deserialize(memoryStream);
}
}
if (null != srcTriangle.SpatialReference)
m_nativeSR = objCopy.Copy(srcTriangle.SpatialReference) as ISpatialReference;
else
m_nativeSR = null;
if (null != srcTriangle.FillSymbol)
{
m_fillSymbol = objCopy.Copy(srcTriangle.FillSymbol) as ISimpleFillSymbol;
}
else
m_fillSymbol = null;
if (null != srcTriangle.Geometry)
{
m_triangle = objCopy.Copy(srcTriangle.Geometry) as IPolygon;
m_pointGeometry = objCopy.Copy(((IArea)m_triangle).Centroid) as IPoint;
}
else
{
m_triangle = null;
m_pointGeometry = null;
}
}