private IResult SetShadowEffect(XlsxBaseShadow shadow) { if (shadow.Show == YesNo.No) { return BooleanResult.SuccessResult; } var root = XmlWriter.GetXmlNode(XmlChartHelper.ChartSpaceRootNode); if (root == null) { return BooleanResult.SuccessResult; } try { var exist = XmlWriter.TryGetElementFrom(root, "c:spPr", out var shapePropertiesNode); shapePropertiesNode.AddEffectContainerNode(shadow, XmlWriter); if (!exist) { root.AppendChild(shapePropertiesNode); } return BooleanResult.SuccessResult; } catch (Exception e) { return BooleanResult.FromException(e); } }
private IResult SetShadowEffect(XlsxBaseShadow shadow, string pictureName) { if (shadow.Show == YesNo.No) { return(BooleanResult.SuccessResult); } var pictureNode = XmlWriter.GetXmlNode($"xdr:wsDr/xdr:twoCellAnchor/xdr:pic/xdr:nvPicPr/xdr:cNvPr[@name='{pictureName}']"); var root = pictureNode?.ParentNode?.ParentNode; if (root == null) { return(BooleanResult.SuccessResult); } try { var exist = XmlWriter.TryGetElementFrom(root, "xdr:spPr", out var shapePropertiesNode); shapePropertiesNode.AddEffectContainerNode(shadow, XmlWriter); if (!exist) { root.AppendChild(shapePropertiesNode); } return(BooleanResult.SuccessResult); } catch (Exception e) { return(BooleanResult.FromException(e)); } }
/// <summary> /// Adds a <b>innerShdw</b> node (Inner Shadow) to the node of type <b>effectLst</b> (Effect Container) specified. Not supported in <b>EPPlus</b> library. /// </summary> /// <param name="effectContainerNode"><b>effectLst</b> node (Effect Container).</param> /// <param name="shadow">Shadow from model.</param> /// <param name="documentHelper">Target xml document helper.</param> /// <remarks> /// For more information please see <a href="http://www.schemacentral.com/sc/ooxml/e-a_outerShdw-2.html">http://www.schemacentral.com/sc/ooxml/e-a_outerShdw-2.html</a> /// </remarks> private static void AddInnerShadowNode(this XmlNode effectContainerNode, XlsxBaseShadow shadow, IXmlHelper documentHelper) { var blurRadAttr = documentHelper.CreateAttribute("blurRad"); blurRadAttr.Value = $"{shadow.Blur * OfficeOpenXmlHelper.EMU_PER_POINT}"; var distAttr = documentHelper.CreateAttribute("dist"); distAttr.Value = $"{shadow.Offset * OfficeOpenXmlHelper.EMU_PER_POINT}"; var dirAttr = documentHelper.CreateAttribute("dir"); dirAttr.Value = $"{shadow.Angle * OfficeOpenXmlHelper.ST_POSITIVE_FIXED_ANGLE}"; var rotWithShapeAttr = documentHelper.CreateAttribute("rotWithShape"); rotWithShapeAttr.Value = "0"; var outerShadowNode = documentHelper.CreateOrDefaultAndAppendElementToNode(effectContainerNode, "a", "innerShdw"); if (outerShadowNode.Attributes == null) { return; } outerShadowNode.Attributes.Append(blurRadAttr); outerShadowNode.Attributes.Append(distAttr); outerShadowNode.Attributes.Append(dirAttr); outerShadowNode.Attributes.Append(rotWithShapeAttr); outerShadowNode.AddRgbColorModelPercentageVariantNode(shadow, documentHelper); }
/// <summary> /// Adds an <b>effectLst</b> node (Effect Container) to the node of type <b>spPr</b> (Shape properties) specified. Not supported in <b>EPPlus</b> library. /// </summary> /// <param name="node"><c>spPr</c> node (Shape properties).</param> /// <param name="shadow">Shadow from model.</param> /// <param name="documentHelper">Target xml document helper.</param> /// <remarks> /// For more information please see <a href="http://www.schemacentral.com/sc/ooxml/e-a_effectLst-1.html">http://www.schemacentral.com/sc/ooxml/e-a_effectLst-1.html</a> /// </remarks> /// <exception cref="ArgumentNullException">If <paramref name="node"/> is <b>null</b>.</exception> /// <exception cref="ArgumentNullException">If <paramref name="shadow"/> is <b>null</b>.</exception> public static void AddEffectContainerNode(this XmlNode node, XlsxBaseShadow shadow, IXmlHelper documentHelper) { SentinelHelper.ArgumentNull(node, nameof(node)); SentinelHelper.ArgumentNull(shadow, nameof(shadow)); var effectContainerNode = documentHelper.CreateOrDefaultAndAppendElementToNode(node, "a", "effectLst");; switch (shadow.Type) { case KnownShadowType.Inner: effectContainerNode.AddInnerShadowNode((XlsxInnerShadow)shadow, documentHelper); break; case KnownShadowType.Outer: effectContainerNode.AddOuterShadowNode((XlsxOuterShadow)shadow, documentHelper); break; case KnownShadowType.Perspective: effectContainerNode.AddPerspectiveShadowNode((XlsxPerspectiveShadow)shadow, documentHelper); break; } }
/// <summary> /// Adds a <b>scrgbClr</b> node (Rgb Color Model Percentage Variant) to the nodes of type <b>outerShdw</b> (Outer Shadow), <b>innerShdw</b> (Inner Shadow), specified. Not supported in <b>EPPlus</b> library. /// </summary> /// <param name="outerShadowNode"><b>outerShdw</b> node (Outer Shadow).</param> /// <param name="shadow">Shadow from model.</param> /// <param name="documentHelper">Target xml document helper.</param> /// <remarks> /// For more information please see <a href="http://www.schemacentral.com/sc/ooxml/e-a_scrgbClr-1.html">http://www.schemacentral.com/sc/ooxml/e-a_scrgbClr-1.html</a> /// </remarks> private static void AddRgbColorModelPercentageVariantNode(this XmlNode outerShadowNode, XlsxBaseShadow shadow, IXmlHelper documentHelper) { var valueAttr = documentHelper.CreateAttribute("val"); valueAttr.Value = ColorHelper.ToHex(shadow.GetColor()).Replace("#", string.Empty); var rgbColorModelPercentageVariantNode = documentHelper.CreateOrDefaultAndAppendElementToNode(outerShadowNode, "a", "srgbClr"); rgbColorModelPercentageVariantNode.Attributes?.Append(valueAttr); var alphaValueAttr = documentHelper.CreateAttribute("val"); alphaValueAttr.Value = $"{(100 - shadow.Transparency) * OfficeOpenXmlHelper.ST_PERCENTAGE}"; var alphaNode = documentHelper.CreateOrDefaultAndAppendElementToNode(rgbColorModelPercentageVariantNode, "a", "alpha"); alphaNode.Attributes?.Append(alphaValueAttr); }