internal PlotStyle(PiaNode baseNode) { NodeName = baseNode.NodeName; Parent = baseNode.Parent; Owner = baseNode.Owner; Values = baseNode.Values; }
internal static string _serializeNode(PiaNode node, int level = 0) { if (node == null) { throw new ArgumentNullException("node"); } var nodeBuilder = new StringBuilder(); var whiteSpace = new string(' ', level); var newLine = Environment.NewLine; foreach (var value in node.Values) { nodeBuilder.AppendFormat("{0}{1}\n", whiteSpace, _serializeValue(value)); } foreach (var child in node.ChildNodes) { nodeBuilder.AppendFormat("{0}{1}{2}\n", whiteSpace, child.NodeName, "{"); nodeBuilder.Append(_serializeNode(child, level + 1)); nodeBuilder.AppendFormat("{0}{1}\n", whiteSpace, "}"); } return(nodeBuilder.ToString()); }
/// <summary> /// 判断是否已有同名节点,有就不加入 /// </summary> /// <param name="nodeC"></param> /// <param name="name"></param> /// <param name="paperAll"></param> private void PlusNode(PiaNode nodeC, string name, string paperAll) { bool yiyou = true; foreach (var nodeD in nodeC) { foreach (var pair in nodeD.Values) { if (pair.Key == "media_description_name_str" && pair.Value == Media_description_name) { yiyou = false; break; } } if (!yiyou) { break; } } if (yiyou) { nodeC.Add(name, paperAll); } }
//private string Localized_name = null; /// <summary> /// 添加pmp纸张-中英对换表 /// </summary> /// <param name="nodeC"></param> private void AddPaperEnAndCn(PiaNode nodeC) { string Localized_name = userdef_name; //图纸数量+1就是新建一张图 var spl = '\n'; int count = nodeC.Count(); string name = count.ToString(); string[] paper = new string[] { name + "{", $"caps_type=2", //1是系统的,2是用户的.这里严格,可不可以在打印纸看见就是这里了 $"name=\"{Name}", $"localized_name=\"{Localized_name}", $"media_description_name=\"{Media_description_name}", $"media_group=15", //4是系统的,15是用户的.15是以毫米为单位,16是以像素为单位 "landscape_mode=FALSE\n}", //false是系统的,true是用户的 }; string paperAll = string.Join(spl + " ", paper) + spl; PlusNode(nodeC, name, paperAll); }
/// <summary> /// 添加pmp纸张-信息 /// </summary> /// <param name="nodeC"></param> private void AddPaperDescription(PiaNode nodeC) { var spl = '\n'; int count = nodeC.Count(); string name = count.ToString(); string[] paper = new string[] { name + "{", $"caps_type=2", //1是系统的,2是用户的.这里严格,可不可以在打印纸看见就是这里了 $"name=\"{/*Media_description_name*/Name}", $"media_bounds_urx={ChangDouble(PaperX)}", $"media_bounds_ury={ChangDouble(PaperY)}", $"printable_bounds_llx={ChangDouble(Offset_Left)}", $"printable_bounds_lly={ChangDouble(Offset_Down)}", $"printable_bounds_urx={ChangDouble(PaperX)}", $"printable_bounds_ury={ChangDouble(PaperY)}", $"printable_area={ChangDouble(PaperX * PaperY)}", "dimensional=TRUE\n}", }; string paperAll = string.Join(spl + " ", paper) + spl; PlusNode(nodeC, name, paperAll); }
internal static void _deserializeNode(PiaNode parent, string nodeString) { if (parent == null && !(parent is PiaFile)) { throw new ArgumentNullException("parent"); } if (nodeString == null) { throw new ArgumentNullException("nodeString"); } var dataLines = nodeString.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < dataLines.Length; i++) { var curLine = dataLines[i]; if (curLine.Contains('=')) { var value = _deserializeValue(curLine); if (!parent.Values.ContainsKey(value.Key)) { parent.Values.Add(value.Key, value.Value); } else { parent.Values[value.Key] = value.Value; } } else if (curLine.Contains('{')) { var bracketCount = 1; var nodeBuilder = new StringBuilder(); var n = i + 1; var subLine = string.Empty; while (bracketCount != 0) { subLine = dataLines[n++]; bracketCount += subLine.Contains('{') ? 1 : subLine.Contains('}') ? -1 : 0; if (bracketCount != 0) { nodeBuilder.AppendLine(subLine); } } var childNode = new PiaNode(nodeBuilder.ToString()) { NodeName = curLine.Trim().TrimEnd('{'), Parent = parent, Owner = parent.Owner }; parent.ChildNodes.Add(childNode); i = n - 1; } } }
public PlotterConfiguration AddPrinter(string pmp_FullPath /*,double PaperX,double PaperY*/) { Name = userdef_name; //$"JBS_PDF_({PaperY.ToString("#0.00")}_x_{PaperX.ToString("#0.00")}_MM)";//纸张名称 // JoinBoxStandard 嘻嘻 // (5,_17)这个是默认偏移量 // media_description_name="ISO_A0_Portrait_841.00W_x_1189.00H_-_(5,_17)_x_(836,_1172)_=959805_MM //实际打印面积(虽然因为偏移值是0,等于长乘宽就可以,但是为了日后我忘记这里怎么算的,还是求一下吧) double area = (PaperY - (Offset_Left * 2)) * (PaperX - (Offset_Down * 2)); //如果没有小数点保留,可能cad闪退! StringBuilder description_name = new StringBuilder(); description_name.Append($"JBS_PDF_Portrait_{PaperY.ToString("#0.00")}W_x_{PaperX.ToString("#0.00")}H"); description_name.Append("_-_"); description_name.Append($"({Offset_Left.ToString("#0.00")},_{Offset_Down.ToString("#0.00")})");//偏移量 description_name.Append("_x_"); description_name.Append($"({(PaperY - Offset_Left).ToString("#0.00")},_{(PaperX - Offset_Down).ToString("#0.00")})_"); description_name.Append($"={area.ToString("#0.00")}_MM"); //Media_description_name = description_name.ToString(); Media_description_name = Name; PdfConfig = new PlotterConfiguration(pmp_FullPath) { TruetypeAsText = true }; //解压了打印机信息之后,遍历打印机节点 foreach (var nodeA in PdfConfig) { if (nodeA.NodeName == "udm") { foreach (var nodeB in nodeA) { if (nodeB.NodeName == "media") { PiaNode piaNode_size = null; PiaNode piaNode_description = null; //遍历是否有节点 foreach (PiaNode nodeC in nodeB) { string nden = nodeC.NodeName; switch (nden) { case str_size: piaNode_size = nodeC; break; case str_description: piaNode_description = nodeC; break; } } //找不到就添加节点 if (piaNode_size == null) { piaNode_size = nodeB.Add(str_size); } if (piaNode_description == null) { piaNode_description = nodeB.Add(str_description); } //在节点中添加/修改信息 AddPaperEnAndCn(piaNode_size); AddPaperDescription(piaNode_description); break; } } break; } } PdfConfig.Saves(); return(PdfConfig); }
internal static string _serializeNode(PiaNode node, int level = 0) { if (node == null) throw new ArgumentNullException("node"); var nodeBuilder = new StringBuilder(); var whiteSpace = new string(' ', level); var newLine = Environment.NewLine; foreach (var value in node.Values) nodeBuilder.AppendFormat("{0}{1}\n", whiteSpace, _serializeValue(value)); foreach (var child in node.ChildNodes) { nodeBuilder.AppendFormat("{0}{1}{2}\n", whiteSpace, child.NodeName, "{"); nodeBuilder.Append(_serializeNode(child, level + 1)); nodeBuilder.AppendFormat("{0}{1}\n", whiteSpace, "}"); } return nodeBuilder.ToString(); }
internal static void _deserializeNode(PiaNode parent, string nodeString) { if (parent == null && !(parent is PiaFile)) throw new ArgumentNullException("parent"); if (nodeString == null) throw new ArgumentNullException("nodeString"); var dataLines = nodeString.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < dataLines.Length; i++) { var curLine = dataLines[i]; if (curLine.Contains('=')) { var value = _deserializeValue(curLine); if (!parent.Values.ContainsKey(value.Key)) parent.Values.Add(value.Key, value.Value); else parent.Values[value.Key] = value.Value; } else if (curLine.Contains('{')) { var bracketCount = 1; var nodeBuilder = new StringBuilder(); var n = i + 1; var subLine = string.Empty; while (bracketCount != 0) { subLine = dataLines[n++]; bracketCount += subLine.Contains('{') ? 1 : subLine.Contains('}') ? -1 : 0; if (bracketCount != 0) nodeBuilder.AppendLine(subLine); } var childNode = new PiaNode(nodeBuilder.ToString()) { NodeName = curLine.Trim().TrimEnd('{'), Parent = parent, Owner = parent.Owner }; parent.ChildNodes.Add(childNode); i = n - 1; } } }