// Ex: localhost:8001/flowsharp?cmd=CmdDropShape&ShapeName=Box&X=50&Y=100 // Ex: localhost:8001/flowsharp?cmd=CmdDropShape&ShapeName=Box&X=50&Y=100&Text=Foobar&FillColor=!FF00ff&Width=300 public void Process(ISemanticProcessor proc, IMembrane membrane, CmdDropShape cmd) { List <Type> shapes = proc.ServiceManager.Get <IFlowSharpToolboxService>().ShapeList; var controller = proc.ServiceManager.Get <IFlowSharpCanvasService>().ActiveController; Type t = shapes.Where(s => s.Name == cmd.ShapeName).SingleOrDefault(); if (t != null) { controller.Canvas.FindForm().BeginInvoke(() => { GraphicElement el = (GraphicElement)Activator.CreateInstance(t, new object[] { controller.Canvas }); el.DisplayRectangle = new Rectangle(cmd.X, cmd.Y, cmd.Width ?? el.DefaultRectangle().Width, cmd.Height ?? el.DefaultRectangle().Height); el.Name = cmd.Name; el.Text = cmd.Text; cmd.FillColor.IfNotNull(c => el.FillColor = GetColor(c)); cmd.BorderColor.IfNotNull(c => el.BorderPenColor = GetColor(c)); cmd.TextColor.IfNotNull(c => el.TextColor = GetColor(c)); el.UpdateProperties(); el.UpdatePath(); controller.Insert(el); }); } }