johnvisiomvp

Life with Visio and other Microsoft Toys!

Colour My World

leave a comment »

When I was working on the Windows 7&8 phone apps I created a Visio template to help design phone apps. As usually, it was a Visio stencil that was a bit more than dragging and dropping clipart. One of the WP7 and WP8 features it replicated was accent colours that were set on the phone and were applied to the apps. If you changed the Accent colour any object that used the Accent colour would change.
The technique I used was based on a technique demonstrated by Mark Nelson. The original Visio was based on a palette of 24 colours that were enumerated 0 to 24. Mark’s technique used a Lookup formula in the colour cell that looked up the colour in a list. It basically used the list to find the index of the colour.
The instructions are to put this formula in the FillForegnd cell.
=Lookup(Prop.Status,”Black;White;Red;Green;Blue;Yellow”)
Lookup will match the value of the custom property (the old name for Shape Data) Status to the list shown above. The value returned by Lookup will be a number, starting with 0, which corresponds to the position of the matched value in the list. The list shows Visio’s numbering sequence for the first couple of colours. As I said, there were 24 originalcolours, So the list of colour string can be extended to add the missing colours.

If the Status property choices are “Warning”, “Caution” and “Clear”, in the Lookup formula, replace the words “Red”, “Yellow” and “Green” with “Warning”, “Caution” and “Clear”. You must leave the other colours in as place holders to get the correct colour position. Actually, you should keep the list of colours as a comment so that if you want add or change the colours or strings you have a template for their placement. The final formula would be:
=Lookup(Prop.Status,”Black;White;Warning;Clear;Blue;Caution”)

This is fine if the colours you want are in the original 24 colours of the Visio colour palette. Luckily Visio has been extended so in addition to the original colour names you can use a string in the colour cell as long as it evaluates to an RGB value. So now it is a matter of manipulating strings.
In Mark’s solution, everything was within one formula. The string manipulation will require a few more cells. So, what cells and where should they be placed? Most of the strings do not have to be available to the user, so User cells rather than Shape Data cells makes more sense. A Shape Data cell will be required to let the user choose the colour. In Visio there are three shapesheets that can be used. In addition to the shapes’s shapesheet there is a page and a document shapesheet. To reference the document stencil, precede the cell name with TheDoc! And use ThePage! As the prefix for the page. To actually access these shapesheets go to the Developer tab. There is a dropdown for each shapesheet on the ribbon. So why use them? If you have an item that is referenced several times on a page or many times in a document, placing it in the shapesheet with the appropriate scope makes sense. The value is in one location and maintenance is reduced. Do you really want to be hunting through a document to find out where a list is used to change a value? Use a reference and keep a single copy of the value.
So, to solve the limitation on colours, I create two user properties. Both were lists (Type 1 shape data). One list was the names and a the other was a matching list of the RGB values. I could have placed these values in the User Data section for the shape, but I placed them in the User data for the document. So any shape in the document could use these values. The difference between a User property and a shape data property is that the user property is hidden from the user.
I put the reference to an occurrence of the colour in the Page Shapesheet. So the control of the Accent colour is at the page level. So if I change the accent colour, all shapes on that page using an accent colour will change. I chose the page level because I may want to have different accent colours on different pages.
So, the Document shapesheet would have two user data cells:
User.WP7Colours =”Magenta;Purple;Teal;Lime;Brown;Pink;Mango;Blue;Red ;Green”

User.WP7ColoursRGB =”RGB(255,00,151);RGB(162, 00, 255);RGB(00, 171, 169);RGB(140,191, 38);RGB(153, 102,00); RGB(233,113,184);RGB(240, 150, 09);RGB(27, 161, 226);RGB(229, 20, 00);RGB(51, 153, 51)”

Or for the Windows phone 8 accent colours
User.WP8Colours =”Amber;Brown;Cobalt;Crimson;Cyan;Emerald;Green;Indigo;Lime;Magenta;Mauve;Olive; Orange;Pink;Red;Steel;Taupe;Teal;Violet;Yellow”

User.WP8ColoursRGB =”RGB(240,163,10);RGB(130,90,44);RGB(0,80,239);RGB(162,0,37);RGB(27,161,226); RGB(0,138,0);RGB(96,169,23);RGB(106,0,255);RGB(164,196,0);RGB(216,0,115);RGB(118,96,138);RGB(109,135,100); RGB(250,104,0);RGB(244,114,208);RGB(229,20,0);RGB(100,118,135);RGB(135,121,78);RGB(0,171,169);RGB(170,0,255); RGB(227,200,0)”

The Page shapesheet would have one user cell:
User.WP7AccentColour =INDEX(LOOKUP(Prop.WP7AccentColour,TheDoc!User.WP7Colours),TheDoc!User.WP7ColoursRGB)

Or for the Windows phone 8 accent colours
User.WP8AccentColour =INDEX(LOOKUP(Prop.WP8AccentColour,TheDoc!User.WP8Colours),TheDoc!User.WP8ColoursRGB)

And a Shape Data cell :
Prop.WP7AccentColour Type=1
Label = Accent Colour 7
Format =TheDoc!User.WP7Colours
Value =INDEX(5,Prop.WP7AccentColour.Format)
Or
Prop.WP8AccentColour Type=1
Label = Accent Colour 8
Format =TheDoc!User.WP8Colours
Value =INDEX(9,Prop.WP8AccentColour.Format)

In the actual shape shapesheet Fill Format section the FillForegnd cell would be ThePage!User.WP7AccentColour or ThePage!User.WP8AccentColour.

So if you need to add colour palettes to a shape or group of shapes you can create two lists, one for the name of the colour and the other the RGB values. Treating the colour as a string, create a shape data to hold the value and assign that string to the appropriate colour cell. Where you place the user cells or shape data cells is dependent on whether the colour palette is limited to a shape or to a page or a document.
I have added a sample Visio drawing in the Technet Gallery. https://gallery.technet.microsoft.com/Visio-Colour-picker-29158b2c

Enjoy…

John Marshall… Visio MVP Visio.MVPs.org

Written by johnvisiomvp

July 8, 2017 at 6:15 pm

Posted in Shapes, Uncategorized, Visio

Tagged with ,

Stand up and be counted.

leave a comment »

Last Year I joined a number of the Canadian MVPs for a day of NDA, skill improvement and general interactions.

For most of the sessions, the key word was caNaDA, so the only thing I can say about those sessions is the Microsoft has some interesting announcements coming up in the near future. Of course, some of the skill building sessions were not and I can talk about them.

There were several sessions on how to make presentations, from preparing to presenting. Unfortunately, there were a number of death by PowerPoint comments. PowerPoint is a tool and as such, the power of that tool is in the hands of the presenter. Only a poor workman blames their tools. PowerPoint has a lot of power and can greatly enhance a presentation, but you need to learn it properly and practice with it. It is not a crutch, so do not overload it with information. Keep it simple. The slides have a notes feature for highlighting points about the slide, possibly question that the slide may invoke.  Audience tend to ask if the slides will be published. So a little extra in the slides would be appreciated.

Enjoy.

John Marshall… Visio MVP       Visio.MVPs.org

Written by johnvisiomvp

March 27, 2017 at 6:36 pm

Who Messed up my bed?

leave a comment »

One of the things I love about Visio is smart shapes. Unfortunately, there are a lot of Visio shapes that are not smart. Including a number of shape collections from Microsoft that are just basic shapes. This is not the Visio team’s fault because Microsoft is a large company and not everyone really understands what a real Visio shape is. It is very easy to create a Visio shape, it is just a matter of dragging an image to a Visio page and Visio will wrap a Visio shape around the image. At this point, this new Visio shape acts like any other Visio shape and can be embellished with connection points and shape data. For most purposes, this is enough.
Real Visio shapes have smarts.
Formulas … The cells within a Geometry Section can contain formulas that react to stretching the shape. The arrow head was an early example of this. No matter how the shape was stretched, the arrowhead point remained at 45 degrees.
NoShow … The Geometry section had a NoShow cell that controlled the visibility of that specific Geometry section. The flowchart shape was an early example. The shape contained a Geometry section for each of the flowchart shapes. Which flowchart shape was visible was dependant on the value in Shape Data Section (formerly Custom Properties). This made it easy to switch, but it meant that the drawing contained redundant information that was not visible and made the drawing larger.
Inter Shape references … One of the powers of grouped shapes is that a shape can refer to a different shape. When you group shapes, you can have the subshape reference a value in the top (group) shape. The downside is that if you ungroup, the references are destroyed.

So what does this have to do with beds? Well, one of my favourite examples of a smart Visio shape was the bed. Unfortunately, in 2013, it got messed up. It was “fixed” in 2016, but it lost some of its’ Visio smarts. Rather than one shape controlled by shape data it is now several shapes, King, Queen, Standard. The bed was a great example of a Visio shape. It was basically a rectangle with rounded corners and the only difference was the length and width. Which would be boring, but it used Visio smarts to have a blanket, turned down sheets and pillow(s).
Before I tried to figure out what was wrong with the shape I decided to find out if those were the only three sizes. I came up with forty sizes including, Bunk bed, California King, California Queen, Crib, Double/Full, Double/Full extra long, Eastern King, Euro King 200, Grand King, Half Queen/Split Queen, King, King Single, Long Single, Olympic/Expanded Queen, Queen, Queen RV, Single extra long, Small Double, Small Single, Split California King, Split Eastern King, Split Euro King 100, Split Euro King 90, Standard, Super King, Super Size Queen, Three Quarter, Twin/Single, Twin/Single extra long, Western King and Youth. Some of the sizes had multiple dimensions.
So, what was wrong with the shape? Other than being a bit more complex that it should, someone in attempting to modify the shape added an extra shape to the main group. I was able to delete this extra shape and the main shape returned to its’ original functioning.
So, how should the shape have been created? A basic Visio shape is limited to one colour, so there should have been a separate shape for the various areas that could have different colours, the pillows, blankets and sheets. In the original bed shape, it seems that it contains two grouped shapes, one for one pillow and one for two pillow. Each group seemed to consist of a pillow, blanket and sheet shape. I did not examine it closely, but that is how it appears. In which case, that would be over kill. I also prefer grouped shapes to use their User sections as an interface to other shapes in the group, so if the group is ungrouped, the formulas are not destroyed and the references in the User cells can be reestablished. I would also replace the use of theme colours with user chosen colours for blanket, sheet and pillows. Using a right click to select the size rather than Shape Data would also be a nice touch.

At some point, I will update the original shape to include right click behaviour and colour selection and post them in the Visio gallery.

So what other shapes are similar, but only differ in overall dimensions? Pool tables! As far as I can find out, there are only four or five sizes. The edges are a standard width and the holes are a standard size. So a pool table would be an ideal candidate for a Visio smart shape. Colour schemes are easy too, green cloth and black rails.

Enjoy…

John Marshall… Visio MVP Visio.MVPs.org

Written by johnvisiomvp

March 22, 2017 at 8:54 pm

Posted in Shapes, Uncategorized

Tagged with ,

Visio 2016 Electrical Engineering Shapes

leave a comment »

While researching a new PowerPoint deck on Visio 2016, I came across a supposed update to the Electrical Engineering stencil.

ee

Unfortunately, the way I learned how to draw EE shapes, long before Visio existed when I was getting my EE degree, was what was in Visio 2013. The bold lines in 2016 are distracting and so is the misalignment of the “wires”. The stubs on the components is also distracting.

Enjoy…

John Marshall… Visio MVP Visio.MVPs.org

Written by johnvisiomvp

March 13, 2017 at 1:24 am

Posted in Shapes, Visio

Tagged with ,

Friendly Visio Stencil

with 2 comments

I am working with a stencil that contains almost 400 shapes and it is far from friendly. Normally a new stencil will show the icon for the shape and its’ name. With this project, the name is far from helpful. Undecypherable is more appropriate. If you right click the band at the top of the stencil window, you are given a choice for View of Icons and Names, Names Under ICons, Icons Only, Names Only and  Icons and Details. The last looks tempting, but there is no such cell as Details. What it is, is … Icons & Names over a prompt.
stencil2
Luckily there is something in the master called prompt. Now, of course, populating that field for almost 400 masters is not trivial, or is it? Back in the days of Visio 3.0, Visio was the first non Microsoft company to fully implement VBA, including the macro recorder. So, it should just be a matter of a few lines of VBA code. It does help if the shape does contain some text that can be used. In this case, I have a Shape Data field called Description that contains the necessary text.

Public Sub EditMaster()
Dim vsoMaster As Visio.Master
Dim vsoCell As Visio.Cell
Dim vsoShapes As Visio.Shapes
Dim vsoShape As Visio.Shape

For Each vsoMaster In ActiveDocument.Masters
If vsoMaster.Shapes(1).CellExists(“Prop.Description”, 0) Then
Set vsoCell = vsoMaster.Shapes(1).Cells(“Prop.Description”)
vsoMaster.Prompt=
Replace(Replace(vsoCell.ResultStr(Visio.visNone), “””, “IN”), “&”, “&”)
End If
Next vsoMaster
End Sub

A few things to note;
– The original text for the field came from XML, so there is a little playing to handle the abbreviation for inches and the ampersand. Luckily I did not have to deal with feet. 😉
– Only masters that have a shape data of Description are changed, all others are left alone.
– for those familiar to using VBA with masters, you do NOT need to wrap the code with an Open / Close that is required when modifying other fields in a master.
Enjoy…

John Marshall… Visio MVP Visio.MVPs.org

Written by johnvisiomvp

October 9, 2016 at 4:52 pm

Posted in Shapes, VBA, Visio

Tagged with , ,

Visio – Rip out the ShapeSheet!

leave a comment »

The Visio Shapesheet has been a core part of Visio almost from the beginning. Though, over the years, it has undergone some revisions to handle new cells, it is basically unchanged. Now, it is long overdue for a major overhaul.
(and give shape developers some love)
To line up with the Office 365, Visio will need an online version. So that would mean writing two changes, a desktop and a online version.
So, I would suggest ripping the shapesheet out of the desktop version and make it a standalone app. When working on the shapesheet the focus is inwards toward the shape, so a standalone application would be sufficient. As a standalone app, it would not have to be redone for the online version of Visio.
Since the new file format uses XML, it should be relatively easy for the standalone app to extract a shape from a file to work on.
I can see several ways the shapesheeet can be enhanced.
The AutoCAD converter creates terrible shapes, I have had a few that have ended up being more than a thousand Geometry shapes with hundreds of rows and totally unworkable. It is not the conversion’s fault, it is basically gIgO. AutoCAD users have different criteria than Visio users. What is needed is a good set of tools.
Like…

  • Sorting? Not necessarily sorting, but the developer should be able to change the order of the rows in the shape data, user data and connection sections. Rather than using a menu item, an up/down toggle button would be preferred. Using a menu item, is not a big deal, but do it a hundred times and it becomes tedious.
  • In addition to rows, Geometry sections should also be able to be reordered, so that one section ends at the point the next section starts. Which would allow …
  • Join two sections. If the order of the Geometry sections can be changed, joining adjacent Geometry sections should be relatively easy. Each Geometry section has a start and end point, so joining would mean there would be a common end and start row in the middle of the new section.
  • Of course, not all Geometry sections have a convenient start and end point. So it would be useful to be able to reverse a Geometry Section so the section ends where the adjacent section starts.
  • A preview window so you can see what the shapesheet generates. This can be down with the drawing page, but you have to switch windows to change focus. A dedicated preview window would keep up with where the designer is in the shapesheet and keep the preview focused.
  • Remove the shapesheet window from within the Visio window, so it can be moved to a separate monitor. Actually being able to tear any window off and place it outside the window on a separate monitor would be useful.
  • Highlight the current geometry section in the preview window. Use a gradient so the direction of the geometry section is obvious. Let the designer have an idea of where the geometry section starts and where it ends. As before, keep the content of the preview window centered on the current work.
  • Allow the user to set the highlight colours.
  • A few versions back, Visio added relative positioning in the Geometry section. Another useful feature would be a toggle button to switch between absolute to relative.Sometimes it is easier to enter absolute positions, other times it is easier to use relative. Currently we can use a menu item, but that involves selecting the Change Item type and remembering the appropriate alternate type.
  • Add a command to turn a shape with many geometry sections into individual shapes.
  • Add a command to split a Geometry sections in two, based on what row is selected.
  • Replace Shot gun editing with fully automatic editing. Shot gun editing should remain, but full auto will speed up repetitive editing. What am I talking about? To delete a row, you have to select the right click menu and then choose delete row. It is like pumping a shot gun before pulling the trigger. Once or twice, not bad, but when you have to delete hundreds of rows it gets tedious. Being able to click a button is faster, being able to hold down the button and continuously delete is even faster. (and very dangerous)
  • An alternate to the bounding box is needed. Rather than just a box, the shape involved should change color. The bounding box just shows that something in that area was selected.
  • A bonus would be to use gradient colors that show the direction of lines.
  • One of the first things that bites first time shape developers is the ungroup command. For some applications Group and Ungroup are complements and you can ungroup and then group to get back to where you were. In most cases this is true, but with Visio, grouping creates a new shape to control the other shapes and ungroup deletes that shape. This group shape, like any other shape can be enhanced, but ungrouping will also remove these enhancements. So, if you add user data, shape data, actions or connection points, these will be lost. Another nicety for shape developers would be the ability to copy these sections from other shapes. So, never ungroup should be the rule? No, during shape development, grouping and ungrouping is a very useful tool. You can align a set of shapes on their centers, group them and then align or distribute this group with other shapes/groups without destroying the group on center the shapes have in the original group.
  • If the shapesheet is like a spreadsheet, why can we not copy and paste cells, rows and sections between shapesheets like Excel? What about copying from a shapesheet to Excel and back.
  • When you are working on a Geometry section, the row you are working on is highlighted in the drawing to let the designer know where that point is. Also for reference, if the PinX or PinY cells are selected, a cross should be placed over that point so the designer can see where the point is.
  • So, where do these new buttons go? When the shapesheet is open, a dialog box with edit buttons should open for the full session. Far faster than using right click events.
  • The dialog should have hooks for third party developers.
  • Make the points on the pencil tool more visible. Currently they disappear as the scale gets bigger. A small blue dot buried inside a black line is tricky to see, let alone be able to determine if it is a dot or shape.
  • There should be a tool to select a connection point and nudge it. The current Connection tool is not the easiest way to correctly place a Connection Point. There is also no way to easily move the Connection Point.

I know that the shapesheet is not just about the shape, but it could be about the page or the doc, but these last two cases can be easily addressed. Of course, these shapesheets shoud receive a similar upgrade.
Outside the Shapsheet
Of course, before even getting into the shapesheet, the ability to sort the shapes in the stencil would be very useful. Yes, this can be done with VBA, but this should be a standard feature.
Add an option to the UnGroup command to preserve the shape that was created by the Group command, but free the sub shapes from their servitude to it. Later on, the shape can be converted to a group and the sub shapes re-added to the group.
Universal Shapes
While we are at it, the team should be working with the other Office teams to create a standardized shape and how it is handled. Word, Excel, PowerPoint and Publisher have their own shapes, MSOshapes and can easily transfer between each other, but Visio has its’ own way. You can copy one of these diagrams into Visio and all is fine, but it has lost all its’ smarts and is just a collection of objects. Even what was a red text block in Word or Excel goes from a single object to multiple objects, one for the text, one for the red background and another for the border. They also have WordArt. This is not a new suggestion, we have discussed it at previous summits in the early 2000s.

John Marshall… Visio MVP Visio.MVPs.org

Written by johnvisiomvp

August 5, 2016 at 7:03 pm

Posted in Uncategorized

Visio – Making a point

leave a comment »

Visio does have a tool for adding Connection points, but it does not have a tool for nudging that point if you missed the first time or decided at a later date you anted it elsewhere. Normally, Visio Connection points are simple, middle of the shape, one of the corners or the center of one of the sides. Once you get into creating Visio shapes, the Connection point can be anywhere.

In my current project, I am dealing with shapes that connect to tubing. On the surface, this seems like a simple task. The connection point should be centered on the tube. Unfortunately, to create the shape involves a lot of unioning joining and other operations. I could leave the shape as a collection of basic shapes so the tube connection stands out, but that would mean a complex shape with poor performance.

In the Connection sections, the Connection points are positioned at a percentage of the Width and a percentage of the Height. So, simply playing with the scaling factor is a hit and miss operation. The movement by tenth of an inch may have radically different scaling factors for different shapes. Basically, a lot of playing to get it right.

My solution is to create a new shape that when dropped on the shape that needs adjustment would expand to the height and Width of that shape and display a control handle with a bullseye. You can then use the control handle to position the bullseye to the location of the Connection point. At the same time as you are doing this, the shapesheet for the shape is open in a different Visio session at the Connection section. Next to the bullseye would be the scaling factors for that position. So, it would be a simple matter of copying the values to Connection points in the other spreadsheet.

I have created this Connection tool and will be publishing it next week to the Visio Gallery.
John Marshall… Visio MVP Visio.MVPs.org

Written by johnvisiomvp

August 3, 2016 at 8:51 am

Posted in Uncategorized, Visio

Tagged with