---
# System prepended metadata

title: How to register FactoryItemTools for regular and custom shapes

---

This example demonstrates how to register `FactoryItemTools` for regular shapes and shapes that are created from SVG images or ShapeTemplates.
To register a `FactoryItemTool` you need to [create](https://docs.devexpress.com/CoreLibraries/DevExpress.Diagram.Core.DiagramStencil.Create.overloads) a stencil or use one of existed stencils and pass your `FactoryItemTool` instance to the `RegisterTool` method:

```
public void RegularFactoryItemTool(DiagramStencil stencil) {
	var itemTool = new FactoryItemTool("CustomShape1",
	   () => "Custom Shape 1",
	   diagram => new DiagramShape() { Content = "Predefined text" },
	   new System.Windows.Size(200, 200), false);

	stencil.RegisterTool(itemTool);
}

```

If you use a custom shape and wish to register a custom tool for it, it's necessary to use two stencils:
1) An [invisible stencil](https://docs.devexpress.com/WindowsForms/116881/controls-and-libraries/diagrams/diagram-control/shapes-panel#create-hidden-stencils) that contains your custom shape;
2) A visible instance that contains the custom tool. This tool should access the custom shape by its `ID` from the invisible stencil:

```
public void FactoryItemToolForCustomShape(DiagramStencil stencil) {
	DiagramControl.ItemTypeRegistrator.Register(typeof(DiagramShapeEx));
	var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsFormsApp4.CustomShapes.xml");
	var invisibleStencil = DiagramStencil.Create("InvisibleStencil", "Invisible Stencil", stream, shapeName => shapeName, false);
	DiagramToolboxRegistrator.RegisterStencil(invisibleStencil);

	var itemTool = new FactoryItemTool("CustomShape2",
	   () => "Custom Shape 2",
	   diagram => new DiagramShapeEx() { Shape = DiagramToolboxRegistrator.GetStencil("InvisibleStencil").GetShape("Shape1"), CustomProperty = "Some value" },
	   new System.Windows.Size(200, 200), false);

	stencil.RegisterTool(itemTool);
}

```