Implemented osPenCap, that sets EndCap and StartCap to Pen. This allows using arrow, diamond, round and flat caps.

* Made image request safer, if it can't find an image for any reason, draws a square where the image should be and a message alerting the user.
remotes/origin/0.6.7-post-fixes
Arthur Valadares 2009-08-25 10:32:45 -03:00
parent 9c9fa51b0f
commit efb287f28f
4 changed files with 85 additions and 7 deletions

View File

@ -443,7 +443,16 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
endPoint.X = (int) x; endPoint.X = (int) x;
endPoint.Y = (int) y; endPoint.Y = (int) y;
Image image = ImageHttpRequest(nextLine); Image image = ImageHttpRequest(nextLine);
if (image != null)
{
graph.DrawImage(image, (float)startPoint.X, (float)startPoint.Y, x, y); graph.DrawImage(image, (float)startPoint.X, (float)startPoint.Y, x, y);
}
else
{
graph.DrawString("URL couldn't be resolved or is", new Font("Arial",6), myBrush, startPoint);
graph.DrawString("not an image. Please check URL.", new Font("Arial", 6), myBrush, new Point(startPoint.X, 12 + startPoint.Y));
graph.DrawRectangle(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);
}
startPoint.X += endPoint.X; startPoint.X += endPoint.X;
startPoint.Y += endPoint.Y; startPoint.Y += endPoint.Y;
} }
@ -539,6 +548,57 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
float size = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture); float size = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture);
drawPen.Width = size; drawPen.Width = size;
} }
else if (nextLine.StartsWith("PenCap"))
{
bool start = true, end = true;
nextLine = nextLine.Remove(0, 6);
nextLine = nextLine.Trim();
string[] cap = nextLine.Split(partsDelimiter);
if (cap[0].ToLower() == "start")
end = false;
else if (cap[0].ToLower() == "end")
start = false;
else if (cap[0].ToLower() != "both")
return;
string type = cap[1].ToLower();
if (end)
{
switch (type)
{
case "arrow":
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
break;
case "round":
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
break;
case "diamond":
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor;
break;
case "flat":
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.Flat;
break;
}
}
if (start)
{
switch (type)
{
case "arrow":
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
break;
case "round":
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
break;
case "diamond":
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor;
break;
case "flat":
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.Flat;
break;
}
}
}
else if (nextLine.StartsWith("PenColour")) else if (nextLine.StartsWith("PenColour"))
{ {
nextLine = nextLine.Remove(0, 9); nextLine = nextLine.Remove(0, 9);
@ -609,6 +669,8 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
} }
private Bitmap ImageHttpRequest(string url) private Bitmap ImageHttpRequest(string url)
{
try
{ {
WebRequest request = HttpWebRequest.Create(url); WebRequest request = HttpWebRequest.Create(url);
//Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used. //Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used.
@ -619,7 +681,8 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
Bitmap image = new Bitmap(response.GetResponseStream()); Bitmap image = new Bitmap(response.GetResponseStream());
return image; return image;
} }
}
catch { }
return null; return null;
} }
} }

View File

@ -879,6 +879,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return drawList; return drawList;
} }
public string osSetPenCap(string drawList, string direction, string type)
{
CheckThreatLevel(ThreatLevel.None, "osSetPenColour");
m_host.AddScriptLPS(1);
drawList += "PenCap " + direction + "," + type + "; ";
return drawList;
}
public string osDrawImage(string drawList, int width, int height, string imageUrl) public string osDrawImage(string drawList, int width, int height, string imageUrl)
{ {
CheckThreatLevel(ThreatLevel.None, "osDrawImage"); CheckThreatLevel(ThreatLevel.None, "osDrawImage");

View File

@ -101,6 +101,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
string osSetFontSize(string drawList, int fontSize); string osSetFontSize(string drawList, int fontSize);
string osSetPenSize(string drawList, int penSize); string osSetPenSize(string drawList, int penSize);
string osSetPenColour(string drawList, string colour); string osSetPenColour(string drawList, string colour);
string osSetPenCap(string drawList, string direction, string type);
string osDrawImage(string drawList, int width, int height, string imageUrl); string osDrawImage(string drawList, int width, int height, string imageUrl);
vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize); vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize);
void osSetStateEvents(int events); void osSetStateEvents(int events);

View File

@ -282,6 +282,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_OSSL_Functions.osSetPenSize(drawList, penSize); return m_OSSL_Functions.osSetPenSize(drawList, penSize);
} }
public string osSetPenCap(string drawList, string direction, string type)
{
return m_OSSL_Functions.osSetPenCap(drawList, direction, type);
}
public string osSetPenColour(string drawList, string colour) public string osSetPenColour(string drawList, string colour)
{ {
return m_OSSL_Functions.osSetPenColour(drawList, colour); return m_OSSL_Functions.osSetPenColour(drawList, colour);