样式demo

This commit is contained in:
GG Z
2025-12-28 11:47:54 +08:00
parent ceccab9abb
commit 1fd8d2ced7
65 changed files with 2369 additions and 799 deletions

View File

@@ -84,7 +84,7 @@ public static class DWGAssist
}
//保存文件
ACadSharp.IO.DxfWriter.Write(output, doc, false, OnNotification);
ACadSharp.IO.DxfWriter.Write(output, doc);
}
@@ -115,7 +115,7 @@ public static class DWGAssist
/// <param name="doc"></param>
public static void WriteAsciiDxf(this CadDocument doc, string filePath)
{
ACadSharp.IO.DxfWriter.Write(filePath, doc, false, OnNotification);
ACadSharp.IO.DxfWriter.Write(filePath, doc);
}
/// <summary>
@@ -125,7 +125,7 @@ public static class DWGAssist
/// <param name="doc"></param>
public static void WriteBinaryDxf(this CadDocument doc, string filePath)
{
ACadSharp.IO.DxfWriter.Write(filePath, doc, true, OnNotification);
ACadSharp.IO.DxfWriter.Write(filePath, doc);
}
/// <summary>

View File

@@ -31,12 +31,10 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
private static byte[] BitSourceToArray(BitmapSource bitmapSource)
{
BitmapEncoder encoder = new JpegBitmapEncoder();
using (var ms = new MemoryStream())
{
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(ms);
return ms.ToArray();
}
using var ms = new MemoryStream();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(ms);
return ms.ToArray();
}
private static int GetPngStartingOffset(byte[] previewData)
@@ -44,87 +42,85 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
var markerFound = false;
var startingOffset = 0;
var previousValue = 0;
using (var ms = new MemoryStream(previewData))
using var ms = new MemoryStream(previewData);
for (var i = 0; i < previewData.Length; i++)
{
for (var i = 0; i < previewData.Length; i++)
var currentValue = ms.ReadByte();
// possible start of PNG file data
if (currentValue == 137) // 0x89
{
var currentValue = ms.ReadByte();
// possible start of PNG file data
if (currentValue == 137) // 0x89
{
markerFound = true;
startingOffset = i;
previousValue = currentValue;
continue;
}
markerFound = true;
startingOffset = i;
previousValue = currentValue;
continue;
}
switch (currentValue)
{
case 80: // 0x50
if (markerFound && previousValue == 137)
{
previousValue = currentValue;
continue;
}
switch (currentValue)
{
case 80: // 0x50
if (markerFound && previousValue == 137)
{
previousValue = currentValue;
continue;
}
markerFound = false;
break;
markerFound = false;
break;
case 78: // 0x4E
if (markerFound && previousValue == 80)
{
previousValue = currentValue;
continue;
}
case 78: // 0x4E
if (markerFound && previousValue == 80)
{
previousValue = currentValue;
continue;
}
markerFound = false;
break;
markerFound = false;
break;
case 71: // 0x47
if (markerFound && previousValue == 78)
{
previousValue = currentValue;
continue;
}
case 71: // 0x47
if (markerFound && previousValue == 78)
{
previousValue = currentValue;
continue;
}
markerFound = false;
break;
markerFound = false;
break;
case 13: // 0x0D
if (markerFound && previousValue == 71)
{
previousValue = currentValue;
continue;
}
case 13: // 0x0D
if (markerFound && previousValue == 71)
{
previousValue = currentValue;
continue;
}
markerFound = false;
break;
markerFound = false;
break;
case 10: // 0x0A
if (markerFound && previousValue == 26)
{
return startingOffset;
}
case 10: // 0x0A
if (markerFound && previousValue == 26)
{
return startingOffset;
}
if (markerFound && previousValue == 13)
{
previousValue = currentValue;
continue;
}
if (markerFound && previousValue == 13)
{
previousValue = currentValue;
continue;
}
markerFound = false;
break;
markerFound = false;
break;
case 26: // 0x1A
if (markerFound && previousValue == 10)
{
previousValue = currentValue;
continue;
}
case 26: // 0x1A
if (markerFound && previousValue == 10)
{
previousValue = currentValue;
continue;
}
markerFound = false;
break;
}
markerFound = false;
break;
}
}
@@ -139,22 +135,18 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
/// <returns></returns>
private static Image GetPreviewAsImage(byte[] previewData)
{
if (previewData == null || previewData.Length <= 0)
if (previewData is not { Length: > 0 })
{
using (var newBitmap = new Bitmap(128, 128))
{
return newBitmap.Clone() as Bitmap;
}
using var newBitmap = new Bitmap(128, 128);
return newBitmap.Clone() as Bitmap;
}
// read past the Revit metadata to the start of the PNG image
var startingOffset = GetPngStartingOffset(previewData);
if (startingOffset == 0)
{
using (var newBitmap = new Bitmap(128, 128))
{
return newBitmap.Clone() as Bitmap;
}
using var newBitmap = new Bitmap(128, 128);
return newBitmap.Clone() as Bitmap;
}
try
@@ -174,29 +166,20 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
{
// use a memory stream to decode the PNG image data
// and copy the decoded data into a byte array
using (var ms = new MemoryStream(pngDataBuffer))
{
var decoder = new PngBitmapDecoder(ms, BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.Default);
decoderData = BitSourceToArray(decoder.Frames[0]);
}
using var ms = new MemoryStream(pngDataBuffer);
var decoder = new PngBitmapDecoder(ms, BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.Default);
decoderData = BitSourceToArray(decoder.Frames[0]);
}
// if the decoded data is valie
if (decoderData != null && decoderData.Length > 0)
if (decoderData is { Length: > 0 })
{
// use another memory stream to create a Bitmap
// and then an Image from that Bitmap
using (var ms = new MemoryStream(decoderData))
{
using (var newBitmap = new Bitmap(ms))
{
using (Image newImage = newBitmap)
{
return newImage.Clone() as Image;
}
}
}
using var ms = new MemoryStream(decoderData);
using var newBitmap = new Bitmap(ms);
using Image newImage = newBitmap;
return newImage.Clone() as Image;
}
}
catch (Exception ex)
@@ -237,9 +220,9 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
try
{
detailInfo = detailInfo.Trim();
var index = detailInfo.IndexOf(":");
var detailValue = detailInfo.Substring(detailInfo.IndexOf(":") + 1);
var detailKey = detailInfo.Substring(0, detailInfo.IndexOf(":"));
var index = detailInfo.IndexOf(":", StringComparison.Ordinal);
var detailValue = detailInfo.Substring(index + 1);
var detailKey = detailInfo.Substring(0, index);
detailKey = detailKey.Trim().ToUpper().Replace(" ", string.Empty);
detailKey = PurgeUnprintableCharacters(detailKey);
detailValue = PurgeUnprintableCharacters(detailValue);
@@ -339,93 +322,91 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
string xmlStr;
byte[] streamData;
using (var streamReader = streamInfo.GetStream(FileMode.Open, FileAccess.Read))
using var streamReader = streamInfo.GetStream(FileMode.Open, FileAccess.Read);
streamData = new byte[streamReader.Length];
streamReader.Read(streamData, 0, streamData.Length);
xmlStr = Encoding.UTF8.GetString(streamData);
document.LoadXml(xmlStr);
//string xmldocpath = Path.GetFileNameWithoutExtension(FileName) + ".xml";
//document.Save(xmldocpath);
//读取参数信息
var root = document.DocumentElement;
//节点前缀的命名空间
var nameSpace = root.GetNamespaceOfPrefix("A");
//string nameSpace = root.NamespaceURI;
var nsmgr = new XmlNamespaceManager(document.NameTable);
;
nsmgr.AddNamespace("entry", nameSpace);
//族类型
var xnlist = document.GetElementsByTagName("A:part");
var fileinfo = document.GetElementsByTagName("A:design-file");
foreach (XmlNode xn in fileinfo)
{
streamData = new byte[streamReader.Length];
streamReader.Read(streamData, 0, streamData.Length);
xmlStr = Encoding.UTF8.GetString(streamData);
document.LoadXml(xmlStr);
//string xmldocpath = Path.GetFileNameWithoutExtension(FileName) + ".xml";
//document.Save(xmldocpath);
//读取参数信息
var root = document.DocumentElement;
//节点前缀的命名空间
var nameSpace = root.GetNamespaceOfPrefix("A");
//string nameSpace = root.NamespaceURI;
var nsmgr = new XmlNamespaceManager(document.NameTable);
;
nsmgr.AddNamespace("entry", nameSpace);
//族类型
var xnlist = document.GetElementsByTagName("A:part");
var fileinfo = document.GetElementsByTagName("A:design-file");
foreach (XmlNode xn in fileinfo)
if (xn.HasChildNodes)
{
if (xn.HasChildNodes)
foreach (XmlNode child in xn.ChildNodes)
{
foreach (XmlNode child in xn.ChildNodes)
if (child.Name == "A:title")
{
if (child.Name == "A:title")
{
SafeName = child.InnerText;
}
SafeName = child.InnerText;
}
if (child.Name == "A:product")
{
Product = child.InnerText;
}
if (child.Name == "A:product")
{
Product = child.InnerText;
}
if (child.Name == "A:product-version")
{
RevitVersion = child.InnerText;
}
if (child.Name == "A:product-version")
{
RevitVersion = child.InnerText;
}
if (child.Name == "A:product-updated")
{
UpdateTime = child.InnerText;
}
if (child.Name == "A:product-updated")
{
UpdateTime = child.InnerText;
}
}
}
//XmlNode rootnode = document.SelectSingleNode("/entry/A: family/A:part", nsmgr);
//XmlNodeList xnlist = rootnode.ChildNodes;
var symbols = new List<FamilyTypeDefinition>();
foreach (XmlNode xn in xnlist)
{
//XmlAttributeCollection attriCol = xn.Attributes;
//foreach (XmlAttribute xmlAttri in attriCol)
//{
// string name = xmlAttri.Name;
// string value = xmlAttri.Value;
//}
var symbol = new FamilyTypeDefinition();
if (xn.HasChildNodes)
{
foreach (XmlNode child in xn.ChildNodes)
{
var p = new ParameterDefinition();
if (child.Name == "title")
{
symbol.Name = child.InnerText;
continue;
}
//族类型节点
p.Name = child.Name;
//族名称
p.Value = child.InnerText;
symbol.ParameterDefinitions.Add(p);
}
}
symbols.Add(symbol);
}
return symbols;
}
//XmlNode rootnode = document.SelectSingleNode("/entry/A: family/A:part", nsmgr);
//XmlNodeList xnlist = rootnode.ChildNodes;
var symbols = new List<FamilyTypeDefinition>();
foreach (XmlNode xn in xnlist)
{
//XmlAttributeCollection attriCol = xn.Attributes;
//foreach (XmlAttribute xmlAttri in attriCol)
//{
// string name = xmlAttri.Name;
// string value = xmlAttri.Value;
//}
var symbol = new FamilyTypeDefinition();
if (xn.HasChildNodes)
{
foreach (XmlNode child in xn.ChildNodes)
{
var p = new ParameterDefinition();
if (child.Name == "title")
{
symbol.Name = child.InnerText;
continue;
}
//族类型节点
p.Name = child.Name;
//族名称
p.Value = child.InnerText;
symbol.ParameterDefinitions.Add(p);
}
}
symbols.Add(symbol);
}
return symbols;
}
private static StringBuilder ParsePartAtom(string unicodeData)
@@ -448,19 +429,42 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
return s;
}
/// <summary>
/// 解析预览图像
/// 解析预览图像(使用循环确保完整读取,避免 CA2022 警告)
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
private static Image ParsePreviewImage(StreamInfo stream)
{
byte[] streamData = null;
byte[] streamData;
using (var streamReader = stream.GetStream(FileMode.Open, FileAccess.Read))
{
streamData = new byte[streamReader.Length];
streamReader.Read(streamData, 0, streamData.Length);
//unicodeData = Encoding.Unicode.GetString(streamData);
//unicodeData = Encoding.UTF8.GetString(streamData);
// 获取长度并校验
long lengthLong = streamReader.Length;
if (lengthLong < 0)
{
throw new IOException("Stream length is negative.");
}
if (lengthLong > int.MaxValue)
{
throw new IOException("Stream is too large to be read into a single byte array.");
}
var totalBytes = (int)lengthLong;
streamData = new byte[totalBytes];
int offset = 0;
while (offset < totalBytes)
{
int bytesRead = streamReader.Read(streamData, offset, totalBytes - offset);
if (bytesRead == 0)
{
// 流在预期字节读取完成前就结束,抛出异常以避免不完整数据处理
throw new EndOfStreamException("Unable to read the full stream data.");
}
offset += bytesRead;
}
}
return GetPreviewAsImage(streamData);
@@ -537,10 +541,9 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
foreach (var streamInfo in streams)
{
string unicodeData;
byte[] streamData = null;
using (var streamReader = streamInfo.GetStream(FileMode.Open, FileAccess.Read))
{
streamData = new byte[streamReader.Length];
byte[] streamData = new byte[streamReader.Length];
streamReader.Read(streamData, 0, streamData.Length);
unicodeData = Encoding.Unicode.GetString(streamData);
//unicodeData = Encoding.UTF8.GetString(streamData);
@@ -601,7 +604,7 @@ namespace ShrlAlgoToolkit.RevitAddins.Assists
foreach (var letter in oldValueArray)
{
int decimalValue = letter;
if (decimalValue >= 32 && decimalValue <= 126)
if (decimalValue is >= 32 and <= 126)
{
sb.Append(letter);
}