[LispFunction("insert")]
public object InsertOrReturnNil(ResultBuffer resbuf)
{
if (resbuf == null)
return null;
TypedValue[] args = resbuf.AsArray();
if (args.Length < 6)
return null;
TypedValue tv = args[0];
if (tv.TypeCode != (int)LispDataType.Text)
return null;
string blockName = (string)tv.Value;
tv = args[1];
Point3d insPoint;
if (tv.TypeCode == (int)LispDataType.Point2d)
{
Point2d pt = (Point2d)tv.Value;
insPoint
= new Point3d
(pt
.X, pt
.Y,
0.0); }
else if (tv.TypeCode == (int)LispDataType.Point3d)
insPoint = (Point3d)tv.Value;
else
return null;
tv = args[2];
double scale;
if (tv.TypeCode == (int)LispDataType.Int16 ||
tv.TypeCode == (int)LispDataType.Int32 ||
tv.TypeCode == (int)LispDataType.Double)
scale = Convert.ToDouble(tv.Value);
else
return null;
tv = args[3];
if (tv.TypeCode != (int)LispDataType.Text)
return null;
string layer = (string)tv.Value;
tv = args[4];
int colorIndex;
if (tv.TypeCode == (int)LispDataType.Int16 ||
tv.TypeCode == (int)LispDataType.Int32)
colorIndex = Convert.ToInt32(tv.Value);
else
return null;
tv = args[5];
if (tv.TypeCode != (int)LispDataType.Text)
return null;
string lineType = (string)tv.Value;
List
<string> attribs
= new List
<string>(); if (args.Length > 6)
{
tv = args[6];
if (tv.TypeCode != (int)LispDataType.ListBegin)
return null;
for (int i = 7; i < args.Length - 1; i++)
{
tv = args[i];
if (tv.TypeCode != (int)LispDataType.Text)
return null;
attribs.Add((string)tv.Value);
}
}
return InsertBlock(blockName, insPoint, scale, layer, colorIndex, lineType, attribs.ToArray());
}