Internally, a shape type is defined as a fixed set of property values, the most important being the geometry of the shape (the pVertices property, etc.). Each shape stores in itself only those properties that differ from its shape type. When a shape is asked for a property that isn't in its local table, it looks in the shape type's table. If the shape type doesn't define a value for the property, then the property's default value is used.
In the file format, shapes store their shape types in the instance field of the msofbtSp record.
typedef enum { msosptMin = 0, msosptNotPrimitive = msosptMin, msosptRectangle = 1, msosptRoundRectangle = 2, msosptEllipse = 3, msosptDiamond = 4, msosptIsocelesTriangle = 5, msosptRightTriangle = 6, msosptParallelogram = 7, msosptTrapezoid = 8, msosptHexagon = 9, msosptOctagon = 10, msosptPlus = 11, msosptStar = 12, msosptArrow = 13, msosptThickArrow = 14, msosptHomePlate = 15, msosptCube = 16, msosptBalloon = 17, msosptSeal = 18, msosptArc = 19, msosptLine = 20, msosptPlaque = 21, msosptCan = 22, msosptDonut = 23, msosptTextSimple = 24, msosptTextOctagon = 25, msosptTextHexagon = 26, msosptTextCurve = 27, msosptTextWave = 28, msosptTextRing = 29, msosptTextOnCurve = 30, msosptTextOnRing = 31, msosptStraightConnector1 = 32, msosptBentConnector2 = 33, msosptBentConnector3 = 34, msosptBentConnector4 = 35, msosptBentConnector5 = 36, msosptCurvedConnector2 = 37, msosptCurvedConnector3 = 38, msosptCurvedConnector4 = 39, msosptCurvedConnector5 = 40, msosptCallout1 = 41, msosptCallout2 = 42, msosptCallout3 = 43, msosptAccentCallout1 = 44, msosptAccentCallout2 = 45, msosptAccentCallout3 = 46, msosptBorderCallout1 = 47, msosptBorderCallout2 = 48, msosptBorderCallout3 = 49, msosptAccentBorderCallout1 = 50, msosptAccentBorderCallout2 = 51, msosptAccentBorderCallout3 = 52, msosptRibbon = 53, msosptRibbon2 = 54, msosptChevron = 55, msosptPentagon = 56, msosptNoSmoking = 57, msosptSeal8 = 58, msosptSeal16 = 59, msosptSeal32 = 60, msosptWedgeRectCallout = 61, msosptWedgeRRectCallout = 62, msosptWedgeEllipseCallout = 63, msosptWave = 64, msosptFoldedCorner = 65, msosptLeftArrow = 66, msosptDownArrow = 67, msosptUpArrow = 68, msosptLeftRightArrow = 69, msosptUpDownArrow = 70, msosptIrregularSeal1 = 71, msosptIrregularSeal2 = 72, msosptLightningBolt = 73, msosptHeart = 74, msosptPictureFrame = 75, msosptQuadArrow = 76, msosptLeftArrowCallout = 77, msosptRightArrowCallout = 78, msosptUpArrowCallout = 79, msosptDownArrowCallout = 80, msosptLeftRightArrowCallout = 81, msosptUpDownArrowCallout = 82, msosptQuadArrowCallout = 83, msosptBevel = 84, msosptLeftBracket = 85, msosptRightBracket = 86, msosptLeftBrace = 87, msosptRightBrace = 88, msosptLeftUpArrow = 89, msosptBentUpArrow = 90, msosptBentArrow = 91, msosptSeal24 = 92, msosptStripedRightArrow = 93, msosptNotchedRightArrow = 94, msosptBlockArc = 95, msosptSmileyFace = 96, msosptVerticalScroll = 97, msosptHorizontalScroll = 98, msosptCircularArrow = 99, msosptNotchedCircularArrow = 100, msosptUturnArrow = 101, msosptCurvedRightArrow = 102, msosptCurvedLeftArrow = 103, msosptCurvedUpArrow = 104, msosptCurvedDownArrow = 105, msosptCloudCallout = 106, msosptEllipseRibbon = 107, msosptEllipseRibbon2 = 108, msosptFlowChartProcess = 109, msosptFlowChartDecision = 110, msosptFlowChartInputOutput = 111, msosptFlowChartPredefinedProcess = 112, msosptFlowChartInternalStorage = 113, msosptFlowChartDocument = 114, msosptFlowChartMultidocument = 115, msosptFlowChartTerminator = 116, msosptFlowChartPreparation = 117, msosptFlowChartManualInput = 118, msosptFlowChartManualOperation = 119, msosptFlowChartConnector = 120, msosptFlowChartPunchedCard = 121, msosptFlowChartPunchedTape = 122, msosptFlowChartSummingJunction = 123, msosptFlowChartOr = 124, msosptFlowChartCollate = 125, msosptFlowChartSort = 126, msosptFlowChartExtract = 127, msosptFlowChartMerge = 128, msosptFlowChartOfflineStorage = 129, msosptFlowChartOnlineStorage = 130, msosptFlowChartMagneticTape = 131, msosptFlowChartMagneticDisk = 132, msosptFlowChartMagneticDrum = 133, msosptFlowChartDisplay = 134, msosptFlowChartDelay = 135, msosptTextPlainText = 136, msosptTextStop = 137, msosptTextTriangle = 138, msosptTextTriangleInverted = 139, msosptTextChevron = 140, msosptTextChevronInverted = 141, msosptTextRingInside = 142, msosptTextRingOutside = 143, msosptTextArchUpCurve = 144, msosptTextArchDownCurve = 145, msosptTextCircleCurve = 146, msosptTextButtonCurve = 147, msosptTextArchUpPour = 148, msosptTextArchDownPour = 149, msosptTextCirclePour = 150, msosptTextButtonPour = 151, msosptTextCurveUp = 152, msosptTextCurveDown = 153, msosptTextCascadeUp = 154, msosptTextCascadeDown = 155, msosptTextWave1 = 156, msosptTextWave2 = 157, msosptTextWave3 = 158, msosptTextWave4 = 159, msosptTextInflate = 160, msosptTextDeflate = 161, msosptTextInflateBottom = 162, msosptTextDeflateBottom = 163, msosptTextInflateTop = 164, msosptTextDeflateTop = 165, msosptTextDeflateInflate = 166, msosptTextDeflateInflateDeflate = 167, msosptTextFadeRight = 168, msosptTextFadeLeft = 169, msosptTextFadeUp = 170, msosptTextFadeDown = 171, msosptTextSlantUp = 172, msosptTextSlantDown = 173, msosptTextCanUp = 174, msosptTextCanDown = 175, msosptFlowChartAlternateProcess = 176, msosptFlowChartOffpageConnector = 177, msosptCallout90 = 178, msosptAccentCallout90 = 179, msosptBorderCallout90 = 180, msosptAccentBorderCallout90 = 181, msosptLeftRightUpArrow = 182, msosptSun = 183, msosptMoon = 184, msosptBracketPair = 185, msosptBracePair = 186, msosptSeal4 = 187, msosptDoubleWave = 188, msosptActionButtonBlank = 189, msosptActionButtonHome = 190, msosptActionButtonHelp = 191, msosptActionButtonInformation = 192, msosptActionButtonForwardNext = 193, msosptActionButtonBackPrevious = 194, msosptActionButtonEnd = 195, msosptActionButtonBeginning = 196, msosptActionButtonReturn = 197, msosptActionButtonDocument = 198, msosptActionButtonSound = 199, msosptActionButtonMovie = 200, msosptHostControl = 201, msosptTextBox = 202, msosptMax, msosptNil = 0x0FFF, } MSOSPT;