You can use the shape designer tool to create Shape definitions. E.g. to create the Speaker shape from the "Fundamental Items" Visio palette, choose File->New in shape designer, right-click the top and bottom lines of the default rectangle and choose Split -> To Line, and arrange the 6 line segments to get the Speaker outline. Then right click on empty area and choose Insert Decoration -> Line, do that three times, and arrange them as in the Speaker shape.
You can either save the result in a shape library file and later load it for use by calling ShapeLibrary.LoadFrom(...), or copy and paste the generated code to your app init method:
// C# ShapeTemplate definition
new Shape(
new ElementTemplate[]
{
new LineTemplate(30, 20, 70, 20),
new LineTemplate(70, 20, 100, 0),
new LineTemplate(100, 0, 100, 100),
new LineTemplate(100, 100, 70, 80),
new LineTemplate(70, 80, 30, 80),
new LineTemplate(30, 80, 30, 20)
},
new ElementTemplate[]
{
new LineTemplate(70, 20, 70, 80),
new LineTemplate(0, 40, 30, 40),
new LineTemplate(0, 60, 30, 60)
},
null, FillMode.Winding, "Speaker" );
Later you can assign the shape to a node by calling node.Shape = Shape.FromId("Speaker").
For Visio shapes that are not filled, e.g. the "Alternating pulse" shape, leave the default rectangular outline in the shape definition, and later in the code set Shape.EnableOutline = false to leave only the decoration lines visible.
I hope that helps,
Stoyan