From 8c03ba25faaeca0257d8676fc3a54649f485d3ab Mon Sep 17 00:00:00 2001
From: Medithaibet <12247633+medithaibet@user.noreply.gitee.com>
Date: Wed, 8 Jan 2025 20:01:26 +0800
Subject: [PATCH] =?UTF-8?q?tests=E6=96=87=E4=BB=B6=E5=A4=BE=E4=B8=8B?=
=?UTF-8?q?=E6=89=80=E6=9C=89=E6=96=87=E4=BB=B6=E7=9A=84=E6=A0=BC=E5=BC=8F?=
=?UTF-8?q?=E5=8C=96(=E6=9C=AA=E6=A0=BC=E5=BC=8F=E5=8C=96GlobalUsings)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
IFoxCAD.sln | 28 +-
src/CADShared/PE/ProgramPE.cs | 656 +++++++++++++------
tests/TestShared/CmdINI.cs | 6 -
tests/TestShared/TestAddEntity.cs | 96 +--
tests/TestShared/TestBlock.cs | 84 +--
tests/TestShared/TestCadFilePath.cs | 5 +-
tests/TestShared/TestConvexHull.cs | 2 -
tests/TestShared/TestCurve.cs | 30 +-
tests/TestShared/TestDBTrans.cs | 15 +-
tests/TestShared/TestDBobject.cs | 6 +-
tests/TestShared/TestDwgMark.cs | 11 +-
tests/TestShared/TestEditor.cs | 10 +-
tests/TestShared/TestEntity/TestAddEntity.cs | 38 +-
tests/TestShared/TestEnv.cs | 21 +-
tests/TestShared/TestExtents.cs | 30 +-
tests/TestShared/TestHatchinfo.cs | 3 +-
tests/TestShared/TestId.cs | 4 +-
tests/TestShared/TestJig.cs | 169 ++---
tests/TestShared/TestJigExTransient.cs | 5 +-
tests/TestShared/TestJson.cs | 8 +-
tests/TestShared/TestLayer.cs | 4 +-
tests/TestShared/TestLisp.cs | 27 +-
tests/TestShared/TestLoop.cs | 1 +
tests/TestShared/TestMirrorFile.cs | 4 +-
tests/TestShared/TestPoint.cs | 11 +-
tests/TestShared/TestQuadTree.cs | 28 +-
tests/TestShared/TestSelectfilter.cs | 3 -
tests/TestShared/TestSingleKeyWordHook.cs | 12 +-
tests/TestShared/TestText.cs | 20 +-
tests/TestShared/TestXdata.cs | 16 +-
tests/TestShared/Timer.cs | 19 +-
tests/TestShared/Tools.cs | 4 +-
32 files changed, 778 insertions(+), 598 deletions(-)
diff --git a/IFoxCAD.sln b/IFoxCAD.sln
index 8b9d772..ce238bc 100644
--- a/IFoxCAD.sln
+++ b/IFoxCAD.sln
@@ -10,15 +10,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{AE09C3B7-58A
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "CADShared", "src\CADShared\CADShared.shproj", "{5178502E-9A78-4588-B849-33ED439976B2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IFoxCAD.AutoCad", "src\IFoxCAD.AutoCad\IFoxCAD.AutoCad.csproj", "{9A0A144F-6820-4D15-9D39-43B7298195E3}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IFoxCAD.AutoCad", "src\IFoxCAD.AutoCad\IFoxCAD.AutoCad.csproj", "{9A0A144F-6820-4D15-9D39-43B7298195E3}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IFoxCAD.ZwCad", "src\IFoxCAD.ZwCad\IFoxCAD.ZwCad.csproj", "{8546C2AC-815C-47A1-9D8C-A6470DF44AD9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IFoxCAD.ZwCad", "src\IFoxCAD.ZwCad\IFoxCAD.ZwCad.csproj", "{8546C2AC-815C-47A1-9D8C-A6470DF44AD9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{46F3EDA8-A6D1-4707-8D03-731CADB41A56}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAcad2025", "tests\TestAcad2025\TestAcad2025.csproj", "{47C42AB4-C2F4-475B-899C-71FDE57D926E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestAcad2025", "tests\TestAcad2025\TestAcad2025.csproj", "{47C42AB4-C2F4-475B-899C-71FDE57D926E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestZcad2025", "tests\TestZcad2025\TestZcad2025.csproj", "{0B4601B4-CBDA-4FD8-9B31-C1E292D03068}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestZcad2025", "tests\TestZcad2025\TestZcad2025.csproj", "{0B4601B4-CBDA-4FD8-9B31-C1E292D03068}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{7145708C-A65B-470E-A8DA-ED79AC9A42D7}"
ProjectSection(SolutionItems) = preProject
@@ -53,19 +53,23 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {57CA0128-08DE-436F-B9F1-82C64F49BF67}
- EndGlobalSection
- GlobalSection(SharedMSBuildProjectFiles) = preSolution
- CADShared\CADShared.projitems*{5178502e-9a78-4588-b849-33ed439976b2}*SharedItemsImports = 13
- CADShared\CADShared.projitems*{6b29955a-5796-4035-9297-210fa15d3846}*SharedItemsImports = 5
- EndGlobalSection
GlobalSection(NestedProjects) = preSolution
+ {5178502E-9A78-4588-B849-33ED439976B2} = {AE09C3B7-58AC-4A68-9884-1F93FDA5D785}
{9A0A144F-6820-4D15-9D39-43B7298195E3} = {AE09C3B7-58AC-4A68-9884-1F93FDA5D785}
{8546C2AC-815C-47A1-9D8C-A6470DF44AD9} = {AE09C3B7-58AC-4A68-9884-1F93FDA5D785}
{47C42AB4-C2F4-475B-899C-71FDE57D926E} = {46F3EDA8-A6D1-4707-8D03-731CADB41A56}
{0B4601B4-CBDA-4FD8-9B31-C1E292D03068} = {46F3EDA8-A6D1-4707-8D03-731CADB41A56}
{CED63D2D-0AF6-4831-806D-5E8E9B0D0A07} = {46F3EDA8-A6D1-4707-8D03-731CADB41A56}
- {5178502E-9A78-4588-B849-33ED439976B2} = {AE09C3B7-58AC-4A68-9884-1F93FDA5D785}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {57CA0128-08DE-436F-B9F1-82C64F49BF67}
+ EndGlobalSection
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ tests\TestShared\TestShared.projitems*{0b4601b4-cbda-4fd8-9b31-c1e292d03068}*SharedItemsImports = 5
+ tests\TestShared\TestShared.projitems*{47c42ab4-c2f4-475b-899c-71fde57d926e}*SharedItemsImports = 5
+ src\CADShared\CADShared.projitems*{5178502e-9a78-4588-b849-33ed439976b2}*SharedItemsImports = 13
+ src\CADShared\CADShared.projitems*{8546c2ac-815c-47a1-9d8c-a6470df44ad9}*SharedItemsImports = 5
+ src\CADShared\CADShared.projitems*{9a0a144f-6820-4d15-9d39-43b7298195e3}*SharedItemsImports = 5
+ tests\TestShared\TestShared.projitems*{ced63d2d-0af6-4831-806d-5e8e9b0d0a07}*SharedItemsImports = 13
EndGlobalSection
EndGlobal
diff --git a/src/CADShared/PE/ProgramPE.cs b/src/CADShared/PE/ProgramPE.cs
index fc9587d..138bba6 100644
--- a/src/CADShared/PE/ProgramPE.cs
+++ b/src/CADShared/PE/ProgramPE.cs
@@ -8,7 +8,6 @@ namespace IFoxCAD.Cad;
using System.IO;
using System.Text;
-
/* 来源 https://blog.csdn.net/zgke/article/details/2955560 我在他基础上面增加了X64的处理
* 调用例子
static void Main(string[] args)
@@ -54,12 +53,14 @@ public class PeInfo
public OptionalHeader? OptionalHeader { get; private set; }
public OptionalDirAttrib? OptionalDirAttrib { get; private set; }
public SectionTable? SectionTable { get; private set; }
+
///
/// 函数接口名单
///
public ExportDirectory? ExportDirectory { get; private set; }
public ImportDirectory? ImportDirectory { get; private set; }
public ResourceDirectory? ResourceDirectory { get; private set; }
+
///
/// PE文件完整路径
///
@@ -71,6 +72,7 @@ public class PeInfo
/// 全部文件数据
///
readonly byte[]? _PEFileByte;
+
///
/// 文件读取的位置
///
@@ -94,13 +96,16 @@ public PeInfo(string fullName)
try
{
// 文件流
- file = new FileStream(fullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);// FileShare才能进c盘
+ file = new FileStream(fullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); // FileShare才能进c盘
_PEFileByte = new byte[file.Length];
- file.Read(_PEFileByte, 0, _PEFileByte.Length);
+ //file.Read(_PEFileByte, 0, _PEFileByte.Length);
LoadFile();
OpenFile = true;
}
- catch (Exception) { throw; }
+ catch (Exception)
+ {
+ throw;
+ }
finally
{
file?.Close();
@@ -114,14 +119,14 @@ public PeInfo(string fullName)
///
private void LoadFile()
{
- LoadDosHeader(); // 获取DOS头,为了兼容DOS所以首先处理这个,然后才到PE头
- LoadDosStub(); // 获取DOS的身体
- LoadPEHeader(); // PE头
- LoadOptionalHeader(); // PE头扩展
+ LoadDosHeader(); // 获取DOS头,为了兼容DOS所以首先处理这个,然后才到PE头
+ LoadDosStub(); // 获取DOS的身体
+ LoadPEHeader(); // PE头
+ LoadOptionalHeader(); // PE头扩展
LoadOptionalDirAttrib(); // 获取选项目录属性
- LoadSectionTable(); // 获取节表
- LoadExportDirectory(); // 获取输出表
- LoadImportDirectory(); // 获取输入表
+ LoadSectionTable(); // 获取节表
+ LoadExportDirectory(); // 获取输出表
+ LoadImportDirectory(); // 获取输入表
LoadResourceDirectory(); // 获取资源目录
}
@@ -130,10 +135,7 @@ private void LoadFile()
///
private void LoadDosHeader()
{
- DosHeader = new DosHeader
- {
- FileStarIndex = _PEFileIndex
- };
+ DosHeader = new DosHeader { FileStarIndex = _PEFileIndex };
Loadbyte(ref DosHeader.e_magic);
Loadbyte(ref DosHeader.e_cblp);
Loadbyte(ref DosHeader.e_cp);
@@ -165,11 +167,8 @@ private void LoadDosStub()
if (DosHeader is null)
return;
- var Size = GetLong(DosHeader.e_PESTAR) - _PEFileIndex; // 获得SUB的大小
- DosStub = new DosStub(Size)
- {
- FileStarIndex = _PEFileIndex
- };
+ var Size = GetLong(DosHeader.e_PESTAR) - _PEFileIndex; // 获得SUB的大小
+ DosStub = new DosStub(Size) { FileStarIndex = _PEFileIndex };
Loadbyte(ref DosStub.DosStubData);
DosStub.FileEndIndex = _PEFileIndex;
}
@@ -180,12 +179,9 @@ private void LoadDosStub()
///
private void LoadPEHeader()
{
- PEHeader = new PEHeader
- {
- FileStarIndex = _PEFileIndex
- };
+ PEHeader = new PEHeader { FileStarIndex = _PEFileIndex };
Loadbyte(ref PEHeader.Header);
- Loadbyte(ref PEHeader.Machine);// [76 1]==[0x4C 1]是x32,
+ Loadbyte(ref PEHeader.Machine); // [76 1]==[0x4C 1]是x32,
_IsX86 = PEHeader.Machine[0] == 0x4c && PEHeader.Machine[1] == 0x1;
// (PEHeader.Machine[0] == 0x64 && PEHeader.Machine[1] == 0x86)// x64
Loadbyte(ref PEHeader.NumberOfSections);
@@ -204,10 +200,7 @@ private void LoadPEHeader()
private void LoadOptionalHeader()
{
// 这里必须通过PE文件来判断它是一个什么架构,从而使用x86-x64
- OptionalHeader = new OptionalHeader(_IsX86)
- {
- FileStarIndex = _PEFileIndex
- };
+ OptionalHeader = new OptionalHeader(_IsX86) { FileStarIndex = _PEFileIndex };
Loadbyte(ref OptionalHeader.Magic);
Loadbyte(ref OptionalHeader.MajorLinkerVersion);
Loadbyte(ref OptionalHeader.MinorLinkerVersion);
@@ -252,12 +245,9 @@ private void LoadOptionalDirAttrib()
if (OptionalHeader is null)
return;
- OptionalDirAttrib = new OptionalDirAttrib
- {
- FileStarIndex = _PEFileIndex
- };
+ OptionalDirAttrib = new OptionalDirAttrib { FileStarIndex = _PEFileIndex };
- var DirCount = GetLong(OptionalHeader.NumberOfRvaAndSizes);// 这里导致无法使用64位
+ var DirCount = GetLong(OptionalHeader.NumberOfRvaAndSizes); // 这里导致无法使用64位
for (var i = 0; i != DirCount; i++)
{
OptionalDirAttrib.DirAttrib? directAttrib = new();
@@ -308,11 +298,13 @@ private void LoadExportDirectory()
if (OptionalDirAttrib.DirByte.Count == 0)
return;
- if (OptionalDirAttrib.DirByte[0] is not OptionalDirAttrib.DirAttrib exporRVA ||
- GetLong(exporRVA.DirRva) == 0)
+ if (
+ OptionalDirAttrib.DirByte[0] is not OptionalDirAttrib.DirAttrib exporRVA
+ || GetLong(exporRVA.DirRva) == 0
+ )
return;
- var exporAddress = GetLong(exporRVA.DirRva); // 获取的位置
+ var exporAddress = GetLong(exporRVA.DirRva); // 获取的位置
ExportDirectory = new ExportDirectory();
if (SectionTable is null)
@@ -328,7 +320,8 @@ private void LoadExportDirectory()
if (exporAddress >= starRva && exporAddress < starRva + endRva)
{
- _PEFileIndex = exporAddress - GetLong(sect.SizeOfRawDataRVA) + GetLong(sect.PointerToRawData);
+ _PEFileIndex =
+ exporAddress - GetLong(sect.SizeOfRawDataRVA) + GetLong(sect.PointerToRawData);
ExportDirectory.FileStarIndex = _PEFileIndex;
ExportDirectory.FileEndIndex = _PEFileIndex + GetLong(exporRVA.DirSize);
@@ -345,8 +338,14 @@ private void LoadExportDirectory()
Loadbyte(ref ExportDirectory.AddressOfNames);
Loadbyte(ref ExportDirectory.AddressOfNameOrdinals);
- _PEFileIndex = GetLong(ExportDirectory.AddressOfFunctions) - GetLong(sect.SizeOfRawDataRVA) + GetLong(sect.PointerToRawData);
- var endIndex = GetLong(ExportDirectory.AddressOfNames) - GetLong(sect.SizeOfRawDataRVA) + GetLong(sect.PointerToRawData);
+ _PEFileIndex =
+ GetLong(ExportDirectory.AddressOfFunctions)
+ - GetLong(sect.SizeOfRawDataRVA)
+ + GetLong(sect.PointerToRawData);
+ var endIndex =
+ GetLong(ExportDirectory.AddressOfNames)
+ - GetLong(sect.SizeOfRawDataRVA)
+ + GetLong(sect.PointerToRawData);
var numb = (endIndex - _PEFileIndex) / 4;
for (long z = 0; z != numb; z++)
{
@@ -356,7 +355,10 @@ private void LoadExportDirectory()
}
_PEFileIndex = endIndex;
- endIndex = GetLong(ExportDirectory.AddressOfNameOrdinals) - GetLong(sect.SizeOfRawDataRVA) + GetLong(sect.PointerToRawData);
+ endIndex =
+ GetLong(ExportDirectory.AddressOfNameOrdinals)
+ - GetLong(sect.SizeOfRawDataRVA)
+ + GetLong(sect.PointerToRawData);
numb = (endIndex - _PEFileIndex) / 4;
for (long z = 0; z != numb; z++)
{
@@ -366,7 +368,10 @@ private void LoadExportDirectory()
}
_PEFileIndex = endIndex;
- endIndex = GetLong(ExportDirectory.Name) - GetLong(sect.SizeOfRawDataRVA) + GetLong(sect.PointerToRawData);
+ endIndex =
+ GetLong(ExportDirectory.Name)
+ - GetLong(sect.SizeOfRawDataRVA)
+ + GetLong(sect.PointerToRawData);
numb = (endIndex - _PEFileIndex) / 2;
for (long z = 0; z != numb; z++)
{
@@ -414,10 +419,10 @@ private void LoadImportDirectory()
if (OptionalDirAttrib.DirByte[1] is not OptionalDirAttrib.DirAttrib ImporRVA)
return;
- var ImporAddress = GetLong(ImporRVA.DirRva); // 获取的位置
+ var ImporAddress = GetLong(ImporRVA.DirRva); // 获取的位置
if (ImporAddress == 0)
return;
- var ImporSize = GetLong(ImporRVA.DirSize); // 获取大小
+ var ImporSize = GetLong(ImporRVA.DirSize); // 获取大小
ImportDirectory = new ImportDirectory();
@@ -472,7 +477,7 @@ private void LoadImportDirectory()
#region 获取输入DLL名称
- for (var z = 0; z != ImportDirectory.ImportList.Count; z++) // 获取引入DLL名字
+ for (var z = 0; z != ImportDirectory.ImportList.Count; z++) // 获取引入DLL名字
{
if (ImportDirectory.ImportList[z] is not ImportDirectory.ImportDate Import)
continue;
@@ -494,7 +499,7 @@ private void LoadImportDirectory()
#endregion
#region 获取引入方法 先获取地址 然后获取名字和头
- for (var z = 0; z != ImportDirectory.ImportList.Count; z++) // 获取引入方法
+ for (var z = 0; z != ImportDirectory.ImportList.Count; z++) // 获取引入方法
{
if (ImportDirectory.ImportList[z] is not ImportDirectory.ImportDate import)
continue;
@@ -513,7 +518,7 @@ private void LoadImportDirectory()
_PEFileIndex = loadIndex - SizeRva + PointerRva;
- if (loadIndex >= StarRva && loadIndex < StarRva + EndRva) // 发现有些数字超级大
+ if (loadIndex >= StarRva && loadIndex < StarRva + EndRva) // 发现有些数字超级大
{
var ReadCount = 0;
@@ -555,10 +560,10 @@ private void LoadResourceDirectory()
if (OptionalDirAttrib.DirByte[2] is not OptionalDirAttrib.DirAttrib ImporRVA)
return;
- var ImporAddress = GetLong(ImporRVA.DirRva); // 获取的位置
+ var ImporAddress = GetLong(ImporRVA.DirRva); // 获取的位置
if (ImporAddress == 0)
return;
- var ImporSize = GetLong(ImporRVA.DirSize); // 获取大小
+ var ImporSize = GetLong(ImporRVA.DirSize); // 获取大小
ResourceDirectory = new ResourceDirectory();
@@ -607,7 +612,7 @@ private void LoadResourceDirectory()
///
private void AddResourceNode(ResourceDirectory node, long PEIndex, long RVA, long resourSectRva)
{
- _PEFileIndex = PEIndex + RVA; // 设置位置
+ _PEFileIndex = PEIndex + RVA; // 设置位置
Loadbyte(ref node.Characteristics);
Loadbyte(ref node.TimeDateStamp);
Loadbyte(ref node.MajorVersion);
@@ -742,6 +747,7 @@ private void Loadbyte(ref byte[] data)
_PEFileIndex++;
}
}
+
///
/// 转换byte为字符串
///
@@ -757,6 +763,7 @@ private string GetString(byte[] data)
// Temp += data[^1].ToString("X02");
return Temp;
}
+
///
/// 转换字符为显示数据
///
@@ -781,6 +788,7 @@ private string GetString(byte[] data, string type)
}
return GetInt(data);
}
+
///
/// 转换BYTE为INT
///
@@ -799,6 +807,7 @@ static string GetInt(byte[] data)
Temp += EndByteInt.ToString();
return Temp;
}
+
///
/// 转换数据为LONG
///
@@ -815,6 +824,7 @@ private long GetLong(byte[] data)
MC += data[i].ToString("X02");
return Convert.ToInt64(MC, 16);
}
+
///
/// 添加一行信息
///
@@ -830,13 +840,14 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
refTable.Rows.Add(
new string[]
{
- name,
- data.Length.ToString(),
- GetString(data),
- GetLong(data).ToString(),
- GetString(data,"ASCII"),
- describe
- });
+ name,
+ data.Length.ToString(),
+ GetString(data),
+ GetLong(data).ToString(),
+ GetString(data, "ASCII"),
+ describe,
+ }
+ );
}
#endregion
@@ -867,7 +878,6 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
if (a5 is not null)
ds.Tables.Add(a5);
-
var a6 = TableExportDirectory();
var a7 = TableExportFunction();
if (a6 is not null)
@@ -894,7 +904,13 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
if (DosHeader is null)
return null;
- var returnTable = new DataTable("DosHeader FileStar{" + DosHeader.FileStarIndex.ToString() + "}FileEnd{" + DosHeader.FileEndIndex.ToString() + "}");
+ var returnTable = new DataTable(
+ "DosHeader FileStar{"
+ + DosHeader.FileStarIndex.ToString()
+ + "}FileEnd{"
+ + DosHeader.FileEndIndex.ToString()
+ + "}"
+ );
returnTable.Columns.Add("Name");
returnTable.Columns.Add("Size");
returnTable.Columns.Add("Value16");
@@ -930,7 +946,13 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
if (PEHeader is null)
return null;
- var returnTable = new DataTable("PeHeader FileStar{" + PEHeader.FileStarIndex.ToString() + "}FileEnd{" + PEHeader.FileEndIndex.ToString() + "}");
+ var returnTable = new DataTable(
+ "PeHeader FileStar{"
+ + PEHeader.FileStarIndex.ToString()
+ + "}FileEnd{"
+ + PEHeader.FileEndIndex.ToString()
+ + "}"
+ );
returnTable.Columns.Add("Name");
returnTable.Columns.Add("Size");
returnTable.Columns.Add("Value16");
@@ -938,15 +960,39 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
returnTable.Columns.Add("ASCII");
returnTable.Columns.Add("Describe");
-
AddTableRow(returnTable, PEHeader.Header, "Header", "PE文件标记");
- AddTableRow(returnTable, PEHeader.Machine, "Machine", "该文件运行所要求的CPU.对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch).我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行. ");
- AddTableRow(returnTable, PEHeader.NumberOfSections, "NumberOfSections", "文件的节数目.如果我们要在文件中增加或删除一个节,就需要修改这个值.");
+ AddTableRow(
+ returnTable,
+ PEHeader.Machine,
+ "Machine",
+ "该文件运行所要求的CPU.对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch).我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行. "
+ );
+ AddTableRow(
+ returnTable,
+ PEHeader.NumberOfSections,
+ "NumberOfSections",
+ "文件的节数目.如果我们要在文件中增加或删除一个节,就需要修改这个值."
+ );
AddTableRow(returnTable, PEHeader.TimeDateStamp, "TimeDateStamp", "文件创建日期和时间. ");
- AddTableRow(returnTable, PEHeader.PointerToSymbolTable, "PointerToSymbolTable", "用于调试. ");
+ AddTableRow(
+ returnTable,
+ PEHeader.PointerToSymbolTable,
+ "PointerToSymbolTable",
+ "用于调试. "
+ );
AddTableRow(returnTable, PEHeader.NumberOfSymbols, "NumberOfSymbols", "用于调试. ");
- AddTableRow(returnTable, PEHeader.SizeOfOptionalHeader, "SizeOfOptionalHeader", "指示紧随本结构之后的 OptionalHeader 结构大小,必须为有效值.");
- AddTableRow(returnTable, PEHeader.Characteristics, "Characteristics", "关于文件信息的标记,比如文件是exe还是dll.");
+ AddTableRow(
+ returnTable,
+ PEHeader.SizeOfOptionalHeader,
+ "SizeOfOptionalHeader",
+ "指示紧随本结构之后的 OptionalHeader 结构大小,必须为有效值."
+ );
+ AddTableRow(
+ returnTable,
+ PEHeader.Characteristics,
+ "Characteristics",
+ "关于文件信息的标记,比如文件是exe还是dll."
+ );
return returnTable;
}
@@ -956,7 +1002,13 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
if (OptionalHeader is null)
return null;
- var returnTable = new DataTable("OptionalHeader FileStar{" + OptionalHeader.FileStarIndex.ToString() + "}FileEnd{" + OptionalHeader.FileEndIndex.ToString() + "}");
+ var returnTable = new DataTable(
+ "OptionalHeader FileStar{"
+ + OptionalHeader.FileStarIndex.ToString()
+ + "}FileEnd{"
+ + OptionalHeader.FileEndIndex.ToString()
+ + "}"
+ );
returnTable.Columns.Add("Name");
returnTable.Columns.Add("Size");
returnTable.Columns.Add("Value16");
@@ -964,13 +1016,43 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
returnTable.Columns.Add("ASCII");
returnTable.Columns.Add("Describe");
- AddTableRow(returnTable, OptionalHeader.Magic, "Magic", "Magic 010B=普通可以执行,0107=ROM映像");
- AddTableRow(returnTable, OptionalHeader.MajorLinkerVersion, "MajorLinkerVersion", "主版本号");
- AddTableRow(returnTable, OptionalHeader.MinorLinkerVersion, "MinorLinkerVersion", "副版本号");
+ AddTableRow(
+ returnTable,
+ OptionalHeader.Magic,
+ "Magic",
+ "Magic 010B=普通可以执行,0107=ROM映像"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.MajorLinkerVersion,
+ "MajorLinkerVersion",
+ "主版本号"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.MinorLinkerVersion,
+ "MinorLinkerVersion",
+ "副版本号"
+ );
AddTableRow(returnTable, OptionalHeader.SizeOfCode, "SizeOfCode", "代码段大小");
- AddTableRow(returnTable, OptionalHeader.SizeOfInitializedData, "SizeOfInitializedData", "已初始化数据大小");
- AddTableRow(returnTable, OptionalHeader.SizeOfUninitializedData, "SizeOfUninitializedData", "未初始化数据大小");
- AddTableRow(returnTable, OptionalHeader.AddressOfEntryPoint, "AddressOfEntryPoint", "执行将从这里开始(RVA)");
+ AddTableRow(
+ returnTable,
+ OptionalHeader.SizeOfInitializedData,
+ "SizeOfInitializedData",
+ "已初始化数据大小"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.SizeOfUninitializedData,
+ "SizeOfUninitializedData",
+ "未初始化数据大小"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.AddressOfEntryPoint,
+ "AddressOfEntryPoint",
+ "执行将从这里开始(RVA)"
+ );
AddTableRow(returnTable, OptionalHeader.BaseOfCode, "BaseOfCode", "代码基址(RVA)");
AddTableRow(returnTable, OptionalHeader.ImageBase, "ImageBase", "数据基址(RVA)");
if (_IsX86)
@@ -978,22 +1060,67 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
AddTableRow(returnTable, OptionalHeader.BaseOfData, "ImageFileCode", "映象文件基址");
}
AddTableRow(returnTable, OptionalHeader.SectionAlignment, "SectionAlign", "区段列队");
- AddTableRow(returnTable, OptionalHeader.MajorOperatingSystemVersion, "MajorOSV", "文件列队");
- AddTableRow(returnTable, OptionalHeader.MinorOperatingSystemVersion, "MinorOSV", "操作系统主版本号");
- AddTableRow(returnTable, OptionalHeader.MajorImageVersion, "MajorImageVer", "映象文件主版本号");
- AddTableRow(returnTable, OptionalHeader.MinorImageVersion, "MinorImageVer", "映象文件副版本号");
- AddTableRow(returnTable, OptionalHeader.MajorSubsystemVersion, "MajorSV", "子操作系统主版本号");
- AddTableRow(returnTable, OptionalHeader.MinorSubsystemVersion, "MinorSV", "子操作系统副版本号");
+ AddTableRow(
+ returnTable,
+ OptionalHeader.MajorOperatingSystemVersion,
+ "MajorOSV",
+ "文件列队"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.MinorOperatingSystemVersion,
+ "MinorOSV",
+ "操作系统主版本号"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.MajorImageVersion,
+ "MajorImageVer",
+ "映象文件主版本号"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.MinorImageVersion,
+ "MinorImageVer",
+ "映象文件副版本号"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.MajorSubsystemVersion,
+ "MajorSV",
+ "子操作系统主版本号"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.MinorSubsystemVersion,
+ "MinorSV",
+ "子操作系统副版本号"
+ );
AddTableRow(returnTable, OptionalHeader.Win32VersionValue, "UNKNOW", "Win32版本值");
AddTableRow(returnTable, OptionalHeader.SizeOfImage, "SizeOfImage", "映象文件大小");
AddTableRow(returnTable, OptionalHeader.SizeOfHeards, "SizeOfHeards", "标志头大小");
AddTableRow(returnTable, OptionalHeader.CheckSum, "CheckSum", "文件效验");
- AddTableRow(returnTable, OptionalHeader.Subsystem, "Subsystem", "子系统(映象文件)1本地 2WINDOWS-GUI 3WINDOWS-CUI 4 POSIX-CUI");
- AddTableRow(returnTable, OptionalHeader.DLLCharacteristics, "DLL_Characteristics", "DLL标记");
+ AddTableRow(
+ returnTable,
+ OptionalHeader.Subsystem,
+ "Subsystem",
+ "子系统(映象文件)1本地 2WINDOWS-GUI 3WINDOWS-CUI 4 POSIX-CUI"
+ );
+ AddTableRow(
+ returnTable,
+ OptionalHeader.DLLCharacteristics,
+ "DLL_Characteristics",
+ "DLL标记"
+ );
AddTableRow(returnTable, OptionalHeader.SizeOfStackReserve, "Bsize", "保留栈的大小");
AddTableRow(returnTable, OptionalHeader.SizeOfStackCommit, "TimeBsize", "初始时指定栈大小");
AddTableRow(returnTable, OptionalHeader.SizeOfHeapReserve, "AucBsize", "保留堆的大小");
- AddTableRow(returnTable, OptionalHeader.SizeOfHeapCommit, "SizeOfBsize", "初始时指定堆大小");
+ AddTableRow(
+ returnTable,
+ OptionalHeader.SizeOfHeapCommit,
+ "SizeOfBsize",
+ "初始时指定堆大小"
+ );
AddTableRow(returnTable, OptionalHeader.LoaderFlags, "FuckBsize", "加载器标志");
AddTableRow(returnTable, OptionalHeader.NumberOfRvaAndSizes, "DirectCount", "数据目录数");
@@ -1007,10 +1134,11 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
var returnTable = new DataTable(
"OptionalDirAttrib FileStar{"
- + OptionalDirAttrib.FileStarIndex.ToString()
- + "}FileEnd{"
- + OptionalDirAttrib.FileEndIndex.ToString()
- + "}");
+ + OptionalDirAttrib.FileStarIndex.ToString()
+ + "}FileEnd{"
+ + OptionalDirAttrib.FileEndIndex.ToString()
+ + "}"
+ );
returnTable.Columns.Add("Name");
returnTable.Columns.Add("Size");
returnTable.Columns.Add("Value16");
@@ -1035,7 +1163,7 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
{ 12, "其他表2" },
{ 13, "其他表3" },
{ 14, "其他表4" },
- { 15, "其他表5" }
+ { 15, "其他表5" },
};
for (var i = 0; i != OptionalDirAttrib.DirByte.Count; i++)
@@ -1062,10 +1190,11 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
var returnTable = new DataTable(
"SectionData FileStar{"
- + SectionTable.FileStarIndex.ToString()
- + "}FileEnd{"
- + SectionTable.FileEndIndex.ToString()
- + "}");
+ + SectionTable.FileStarIndex.ToString()
+ + "}FileEnd{"
+ + SectionTable.FileEndIndex.ToString()
+ + "}"
+ );
returnTable.Columns.Add("Name");
returnTable.Columns.Add("Size");
returnTable.Columns.Add("Value16");
@@ -1082,11 +1211,36 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
AddTableRow(returnTable, SectionDate.VirtualAddress, "VirtualAddress", "虚拟内存地址");
AddTableRow(returnTable, SectionDate.SizeOfRawDataRVA, "SizeOfRawDataRVA", "RVA偏移");
AddTableRow(returnTable, SectionDate.SizeOfRawDataSize, "SizeOfRawDataSize", "RVA大小");
- AddTableRow(returnTable, SectionDate.PointerToRawData, "PointerToRawData", "指向RAW数据");
- AddTableRow(returnTable, SectionDate.PointerToRelocations, "PointerToRelocations", "指向定位号");
- AddTableRow(returnTable, SectionDate.PointerToLinenumbers, "PointerToLinenumbers", "指向行数");
- AddTableRow(returnTable, SectionDate.NumberOfRelocations, "NumberOfRelocations", "定位号");
- AddTableRow(returnTable, SectionDate.NumberOfLinenumbers, "NumberOfLinenumbers", "行数号");
+ AddTableRow(
+ returnTable,
+ SectionDate.PointerToRawData,
+ "PointerToRawData",
+ "指向RAW数据"
+ );
+ AddTableRow(
+ returnTable,
+ SectionDate.PointerToRelocations,
+ "PointerToRelocations",
+ "指向定位号"
+ );
+ AddTableRow(
+ returnTable,
+ SectionDate.PointerToLinenumbers,
+ "PointerToLinenumbers",
+ "指向行数"
+ );
+ AddTableRow(
+ returnTable,
+ SectionDate.NumberOfRelocations,
+ "NumberOfRelocations",
+ "定位号"
+ );
+ AddTableRow(
+ returnTable,
+ SectionDate.NumberOfLinenumbers,
+ "NumberOfLinenumbers",
+ "行数号"
+ );
AddTableRow(returnTable, SectionDate.Characteristics, "Characteristics", "区段标记");
}
return returnTable;
@@ -1099,10 +1253,11 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
var returnTable = new DataTable(
"ExportDirectory FileStar{"
- + ExportDirectory.FileStarIndex.ToString()
- + "}FileEnd{"
- + ExportDirectory.FileEndIndex.ToString()
- + "}");
+ + ExportDirectory.FileStarIndex.ToString()
+ + "}FileEnd{"
+ + ExportDirectory.FileEndIndex.ToString()
+ + "}"
+ );
returnTable.Columns.Add("Name");
returnTable.Columns.Add("Size");
returnTable.Columns.Add("Value16");
@@ -1110,20 +1265,56 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
returnTable.Columns.Add("ASCII");
returnTable.Columns.Add("Describe");
- AddTableRow(returnTable, ExportDirectory.Characteristics, "Characteristics", "一个保留字段,目前为止值为0.");
+ AddTableRow(
+ returnTable,
+ ExportDirectory.Characteristics,
+ "Characteristics",
+ "一个保留字段,目前为止值为0."
+ );
AddTableRow(returnTable, ExportDirectory.TimeDateStamp, "TimeDateStamp", "产生的时间.");
AddTableRow(returnTable, ExportDirectory.MajorVersion, "MajorVersion", "主版本号");
AddTableRow(returnTable, ExportDirectory.MinorVersion, "MinorVersion", "副版本号");
- AddTableRow(returnTable, ExportDirectory.Name, "Name", "一个RVA,指向一个dll的名称的ascii字符串.");
+ AddTableRow(
+ returnTable,
+ ExportDirectory.Name,
+ "Name",
+ "一个RVA,指向一个dll的名称的ascii字符串."
+ );
AddTableRow(returnTable, ExportDirectory.Base, "Base", "输出函数的起始序号.一般为1.");
- AddTableRow(returnTable, ExportDirectory.NumberOfFunctions, "NumberOfFunctions", "输出函数入口地址的数组 中的元素个数.");
- AddTableRow(returnTable, ExportDirectory.NumberOfNames, "NumberOfNames", "输出函数名的指针的数组 中的元素个数,也是输出函数名对应的序号的数组 中的元素个数.");
- AddTableRow(returnTable, ExportDirectory.AddressOfFunctions, "AddressOfFunctions", "一个RVA,指向输出函数入口地址的数组.");
- AddTableRow(returnTable, ExportDirectory.AddressOfNames, "AddressOfNames", "一个RVA,指向输出函数名的指针的数组.");
- AddTableRow(returnTable, ExportDirectory.AddressOfNameOrdinals, "AddressOfNameOrdinals", "一个RVA,指向输出函数名对应的序号的数组.");
+ AddTableRow(
+ returnTable,
+ ExportDirectory.NumberOfFunctions,
+ "NumberOfFunctions",
+ "输出函数入口地址的数组 中的元素个数."
+ );
+ AddTableRow(
+ returnTable,
+ ExportDirectory.NumberOfNames,
+ "NumberOfNames",
+ "输出函数名的指针的数组 中的元素个数,也是输出函数名对应的序号的数组 中的元素个数."
+ );
+ AddTableRow(
+ returnTable,
+ ExportDirectory.AddressOfFunctions,
+ "AddressOfFunctions",
+ "一个RVA,指向输出函数入口地址的数组."
+ );
+ AddTableRow(
+ returnTable,
+ ExportDirectory.AddressOfNames,
+ "AddressOfNames",
+ "一个RVA,指向输出函数名的指针的数组."
+ );
+ AddTableRow(
+ returnTable,
+ ExportDirectory.AddressOfNameOrdinals,
+ "AddressOfNameOrdinals",
+ "一个RVA,指向输出函数名对应的序号的数组."
+ );
return returnTable;
}
+
private DataTable? TableExportFunction()
{
if (ExportDirectory is null)
@@ -1139,10 +1330,12 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
for (var i = 0; i != ExportDirectory.FunctionNamesByte.Count; i++)
{
- AddTableRow(returnTable,
+ AddTableRow(
+ returnTable,
ExportDirectory.FunctionNamesByte[i],
"Name",
- "_ExportDirectory.Name-Sect.SizeOfRawDataRVA+Sect.PointerToRawData");
+ "_ExportDirectory.Name-Sect.SizeOfRawDataRVA+Sect.PointerToRawData"
+ );
}
for (var i = 0; i != ExportDirectory.AddressOfNamesList.Count; i++)
@@ -1167,12 +1360,19 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
}
return returnTable;
}
+
private DataTable? TableImportDirectory()
{
if (ImportDirectory is null)
return null;
- var returnTable = new DataTable("ImportDirectory FileStar{" + ImportDirectory.FileStarIndex.ToString() + "}FileEnd{" + ImportDirectory.FileEndIndex.ToString() + "}");
+ var returnTable = new DataTable(
+ "ImportDirectory FileStar{"
+ + ImportDirectory.FileStarIndex.ToString()
+ + "}FileEnd{"
+ + ImportDirectory.FileEndIndex.ToString()
+ + "}"
+ );
returnTable.Columns.Add("Name");
returnTable.Columns.Add("Size");
returnTable.Columns.Add("Value16");
@@ -1186,15 +1386,36 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
continue;
AddTableRow(returnTable, ImportByte.DLLName, "输入DLL名称", "**********");
- AddTableRow(returnTable, ImportByte.OriginalFirstThunk, "OriginalFirstThunk", "这里实际上保存着一个RVA,这个RVA指向一个DWORD数组,这个数组可以叫做输入查询表.每个数组元素,或者叫一个表项,保存着一个指向函数名的RVA或者保存着一个函数的序号.");
- AddTableRow(returnTable, ImportByte.TimeDateStamp, "TimeDateStamp", "当这个值为0的时候,表明还没有bind.不为0的话,表示已经bind过了.有关bind的内容后面介绍.");
+ AddTableRow(
+ returnTable,
+ ImportByte.OriginalFirstThunk,
+ "OriginalFirstThunk",
+ "这里实际上保存着一个RVA,这个RVA指向一个DWORD数组,这个数组可以叫做输入查询表.每个数组元素,或者叫一个表项,保存着一个指向函数名的RVA或者保存着一个函数的序号."
+ );
+ AddTableRow(
+ returnTable,
+ ImportByte.TimeDateStamp,
+ "TimeDateStamp",
+ "当这个值为0的时候,表明还没有bind.不为0的话,表示已经bind过了.有关bind的内容后面介绍."
+ );
AddTableRow(returnTable, ImportByte.ForwarderChain, "ForwarderChain", "");
- AddTableRow(returnTable, ImportByte.Name, "Name", "一个RVA,这个RVA指向一个ascii以空字符结束的字符串,这个字符串就是本结构对应的dll文件的名字.");
- AddTableRow(returnTable, ImportByte.FirstThunk, "FirstThunk", "一个RVA,这个RVA指向一个DWORD数组,这个数组可以叫输入地址表.如果bind了的话,这个数组的每个元素,就是一个输入函数的入口地址.");
+ AddTableRow(
+ returnTable,
+ ImportByte.Name,
+ "Name",
+ "一个RVA,这个RVA指向一个ascii以空字符结束的字符串,这个字符串就是本结构对应的dll文件的名字."
+ );
+ AddTableRow(
+ returnTable,
+ ImportByte.FirstThunk,
+ "FirstThunk",
+ "一个RVA,这个RVA指向一个DWORD数组,这个数组可以叫输入地址表.如果bind了的话,这个数组的每个元素,就是一个输入函数的入口地址."
+ );
}
return returnTable;
}
+
private DataTable? TableImportFunction()
{
if (ImportDirectory is null)
@@ -1217,7 +1438,10 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
for (var z = 0; z != ImportByte.DLLFunctionList.Count; z++)
{
- if (ImportByte.DLLFunctionList[z] is not ImportDirectory.ImportDate.FunctionList Function)
+ if (
+ ImportByte.DLLFunctionList[z]
+ is not ImportDirectory.ImportDate.FunctionList Function
+ )
continue;
AddTableRow(returnTable, Function.FunctionName, "FunctionName", "");
@@ -1227,17 +1451,25 @@ private void AddTableRow(DataTable refTable, byte[]? data, string name, string d
}
return returnTable;
}
+
private DataTable? TableResourceDirectory()
{
if (ResourceDirectory is null)
return null;
- var returnTable = new DataTable("ResourceDirectory FileStar{" + ResourceDirectory.FileStarIndex.ToString() + "}FileEnd{" + ResourceDirectory.FileEndIndex.ToString() + "}");
+ var returnTable = new DataTable(
+ "ResourceDirectory FileStar{"
+ + ResourceDirectory.FileStarIndex.ToString()
+ + "}FileEnd{"
+ + ResourceDirectory.FileEndIndex.ToString()
+ + "}"
+ );
returnTable.Columns.Add("GUID");
returnTable.Columns.Add("Text");
returnTable.Columns.Add("ParentID");
AddResourceDirectoryRow(returnTable, ResourceDirectory, "");
return returnTable;
}
+
private void AddResourceDirectoryRow(DataTable myTable, ResourceDirectory Node, string parentID)
{
var Name = "";
@@ -1288,7 +1520,16 @@ private void AddResourceDirectoryRow(DataTable myTable, ResourceDirectory Node,
if (Entry.DataEntryList[z] is not ResourceDirectory.DirectoryEntry.DataEntry Data)
continue;
- var Text = "Address{" + GetString(Data.ResourRVA) + "} Size{" + GetString(Data.ResourSize) + "} FileBegin{" + Data.FileStarIndex.ToString() + "-" + Data.FileEndIndex.ToString() + "}";
+ var Text =
+ "Address{"
+ + GetString(Data.ResourRVA)
+ + "} Size{"
+ + GetString(Data.ResourSize)
+ + "} FileBegin{"
+ + Data.FileStarIndex.ToString()
+ + "-"
+ + Data.FileEndIndex.ToString()
+ + "}";
myTable.Rows.Add(new string[] { Guid.NewGuid().ToString(), Text, GUID });
}
@@ -1310,25 +1551,25 @@ private void AddResourceDirectoryRow(DataTable myTable, ResourceDirectory Node,
///
public class DosHeader // IMAGE_DOS_HEADER
{
- public byte[] e_magic = new byte[2]; // 魔术数字
- public byte[] e_cblp = new byte[2]; // 文件最后页的字节数
- public byte[] e_cp = new byte[2]; // 文件页数
- public byte[] e_crlc = new byte[2]; // 重定义元素个数
- public byte[] e_cparhdr = new byte[2]; // 头部尺寸,以段落为单位
- public byte[] e_minalloc = new byte[2]; // 所需的最小附加段
- public byte[] e_maxalloc = new byte[2]; // 所需的最大附加段
- public byte[] e_ss = new byte[2]; // 初始的SS值(相对偏移量)
- public byte[] e_sp = new byte[2]; // 初始的SP值
- public byte[] e_csum = new byte[2]; // 校验和
- public byte[] e_ip = new byte[2]; // 初始的IP值
- public byte[] e_cs = new byte[2]; // 初始的CS值(相对偏移量)
+ public byte[] e_magic = new byte[2]; // 魔术数字
+ public byte[] e_cblp = new byte[2]; // 文件最后页的字节数
+ public byte[] e_cp = new byte[2]; // 文件页数
+ public byte[] e_crlc = new byte[2]; // 重定义元素个数
+ public byte[] e_cparhdr = new byte[2]; // 头部尺寸,以段落为单位
+ public byte[] e_minalloc = new byte[2]; // 所需的最小附加段
+ public byte[] e_maxalloc = new byte[2]; // 所需的最大附加段
+ public byte[] e_ss = new byte[2]; // 初始的SS值(相对偏移量)
+ public byte[] e_sp = new byte[2]; // 初始的SP值
+ public byte[] e_csum = new byte[2]; // 校验和
+ public byte[] e_ip = new byte[2]; // 初始的IP值
+ public byte[] e_cs = new byte[2]; // 初始的CS值(相对偏移量)
public byte[] e_rva = new byte[2];
public byte[] e_fg = new byte[2];
public byte[] e_bl1 = new byte[8];
public byte[] e_oemid = new byte[2];
public byte[] e_oeminfo = new byte[2];
public byte[] e_bl2 = new byte[20];
- public byte[] e_PESTAR = new byte[2]; // PE开始 +自己的位置........重点
+ public byte[] e_PESTAR = new byte[2]; // PE开始 +自己的位置........重点
public long FileStarIndex = 0;
public long FileEndIndex = 0;
@@ -1340,10 +1581,12 @@ public class DosHeader // IMAGE_DOS_HEADER
public class DosStub
{
public byte[] DosStubData;
+
public DosStub(long Size)
{
DosStubData = new byte[Size];
}
+
public long FileStarIndex = 0;
public long FileEndIndex = 0;
}
@@ -1353,14 +1596,14 @@ public DosStub(long Size)
///
public class PEHeader // IMAGE_FILE_HEADER
{
- public byte[] Header = new byte[4];// PE文件标记
- public byte[] Machine = new byte[2];// 该文件运行所要求的CPU.对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch).我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行.看起来,除了禁止程序执行之外,本域对我们来说用处不大.
- public byte[] NumberOfSections = new byte[2];// 文件的节数目.如果我们要在文件中增加或删除一个节,就需要修改这个值.
- public byte[] TimeDateStamp = new byte[4];// 文件创建日期和时间.我们不感兴趣.
- public byte[] PointerToSymbolTable = new byte[4];// 用于调试.
- public byte[] NumberOfSymbols = new byte[4];// 用于调试.
- public byte[] SizeOfOptionalHeader = new byte[2];// 指示紧随本结构之后的 OptionalHeader 结构大小,必须为有效值. IMAGE_OPTIONAL_HEADER32 结构大小
- public byte[] Characteristics = new byte[2];// 关于文件信息的标记,比如文件是exe还是dll.
+ public byte[] Header = new byte[4]; // PE文件标记
+ public byte[] Machine = new byte[2]; // 该文件运行所要求的CPU.对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch).我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行.看起来,除了禁止程序执行之外,本域对我们来说用处不大.
+ public byte[] NumberOfSections = new byte[2]; // 文件的节数目.如果我们要在文件中增加或删除一个节,就需要修改这个值.
+ public byte[] TimeDateStamp = new byte[4]; // 文件创建日期和时间.我们不感兴趣.
+ public byte[] PointerToSymbolTable = new byte[4]; // 用于调试.
+ public byte[] NumberOfSymbols = new byte[4]; // 用于调试.
+ public byte[] SizeOfOptionalHeader = new byte[2]; // 指示紧随本结构之后的 OptionalHeader 结构大小,必须为有效值. IMAGE_OPTIONAL_HEADER32 结构大小
+ public byte[] Characteristics = new byte[2]; // 关于文件信息的标记,比如文件是exe还是dll.
public long FileStarIndex = 0;
public long FileEndIndex = 0;
@@ -1373,41 +1616,41 @@ public class PEHeader // IMAGE_FILE_HEADER
// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_optional_header64 // IMAGE_OPTIONAL_HEADER64
public class OptionalHeader
{
- public byte[] Magic = new byte[2]; // Magic 010B=普通可以执行,0107=ROM映像
- public byte[] MajorLinkerVersion = new byte[1]; // 主版本号
- public byte[] MinorLinkerVersion = new byte[1]; // 副版本号
- public byte[] SizeOfCode = new byte[4]; // 代码段大小
- public byte[] SizeOfInitializedData = new byte[4]; // 已初始化数据大小
+ public byte[] Magic = new byte[2]; // Magic 010B=普通可以执行,0107=ROM映像
+ public byte[] MajorLinkerVersion = new byte[1]; // 主版本号
+ public byte[] MinorLinkerVersion = new byte[1]; // 副版本号
+ public byte[] SizeOfCode = new byte[4]; // 代码段大小
+ public byte[] SizeOfInitializedData = new byte[4]; // 已初始化数据大小
public byte[] SizeOfUninitializedData = new byte[4]; // 未初始化数据大小
- public byte[] AddressOfEntryPoint = new byte[4]; // 执行将从这里开始(RVA).........入口点指向,dll填充0
- public byte[] BaseOfCode = new byte[4]; // 代码基址(RVA)
-
- public byte[] BaseOfData = new byte[4]; // 映象文件基址
-
- public byte[] ImageBase = new byte[4]; // 数据基址(RVA)
-
- public byte[] SectionAlignment = new byte[4]; // 区段列队.....
- public byte[] FileAlignment = new byte[4]; // 文件列队
-
- public byte[] MajorOperatingSystemVersion = new byte[2]; // 操作系统主版本号
- public byte[] MinorOperatingSystemVersion = new byte[2]; // 操作系统副版本号
- public byte[] MajorImageVersion = new byte[2]; // 映象文件主版本号
- public byte[] MinorImageVersion = new byte[2]; // 映象文件副版本号
- public byte[] MajorSubsystemVersion = new byte[2]; // 子操作系统主版本号
- public byte[] MinorSubsystemVersion = new byte[2]; // 子操作系统副版本号
- public byte[] Win32VersionValue = new byte[4]; // Win32版本值
- public byte[] SizeOfImage = new byte[4]; // 映象文件大小
- public byte[] SizeOfHeards = new byte[4]; // 标志头大小
- public byte[] CheckSum = new byte[4]; // 文件效验
- public byte[] Subsystem = new byte[2]; // 子系统(映象文件)1本地 2WINDOWS-GUI 3WINDOWS-CUI 4 POSIX-CUI
- public byte[] DLLCharacteristics = new byte[2]; // DLL标记
-
- public byte[] SizeOfStackReserve = new byte[4]; // 保留栈的大小
- public byte[] SizeOfStackCommit = new byte[4]; // 初始时指定栈大小
- public byte[] SizeOfHeapReserve = new byte[4]; // 保留堆的大小
- public byte[] SizeOfHeapCommit = new byte[4]; // 初始时指定堆大小
- public byte[] LoaderFlags = new byte[4]; // 加载器标志
- public byte[] NumberOfRvaAndSizes = new byte[4]; // 数据目录数
+ public byte[] AddressOfEntryPoint = new byte[4]; // 执行将从这里开始(RVA).........入口点指向,dll填充0
+ public byte[] BaseOfCode = new byte[4]; // 代码基址(RVA)
+
+ public byte[] BaseOfData = new byte[4]; // 映象文件基址
+
+ public byte[] ImageBase = new byte[4]; // 数据基址(RVA)
+
+ public byte[] SectionAlignment = new byte[4]; // 区段列队.....
+ public byte[] FileAlignment = new byte[4]; // 文件列队
+
+ public byte[] MajorOperatingSystemVersion = new byte[2]; // 操作系统主版本号
+ public byte[] MinorOperatingSystemVersion = new byte[2]; // 操作系统副版本号
+ public byte[] MajorImageVersion = new byte[2]; // 映象文件主版本号
+ public byte[] MinorImageVersion = new byte[2]; // 映象文件副版本号
+ public byte[] MajorSubsystemVersion = new byte[2]; // 子操作系统主版本号
+ public byte[] MinorSubsystemVersion = new byte[2]; // 子操作系统副版本号
+ public byte[] Win32VersionValue = new byte[4]; // Win32版本值
+ public byte[] SizeOfImage = new byte[4]; // 映象文件大小
+ public byte[] SizeOfHeards = new byte[4]; // 标志头大小
+ public byte[] CheckSum = new byte[4]; // 文件效验
+ public byte[] Subsystem = new byte[2]; // 子系统(映象文件)1本地 2WINDOWS-GUI 3WINDOWS-CUI 4 POSIX-CUI
+ public byte[] DLLCharacteristics = new byte[2]; // DLL标记
+
+ public byte[] SizeOfStackReserve = new byte[4]; // 保留栈的大小
+ public byte[] SizeOfStackCommit = new byte[4]; // 初始时指定栈大小
+ public byte[] SizeOfHeapReserve = new byte[4]; // 保留堆的大小
+ public byte[] SizeOfHeapCommit = new byte[4]; // 初始时指定堆大小
+ public byte[] LoaderFlags = new byte[4]; // 加载器标志
+ public byte[] NumberOfRvaAndSizes = new byte[4]; // 数据目录数
public long FileStarIndex = 0;
public long FileEndIndex = 0;
@@ -1417,14 +1660,14 @@ public OptionalHeader(bool is32)
if (!is32)
{
// X64没有了,但是为了代码保留修改幅度不大,所以置0
- BaseOfData = [];// x64必须置于0
+ BaseOfData = []; // x64必须置于0
// x64长度增加的
var ulonglong = 8;
- ImageBase = new byte[ulonglong]; // 数据基址(RVA)
+ ImageBase = new byte[ulonglong]; // 数据基址(RVA)
SizeOfStackReserve = new byte[ulonglong]; // 保留栈的大小
- SizeOfStackCommit = new byte[ulonglong]; // 初始时指定栈大小
- SizeOfHeapReserve = new byte[ulonglong]; // 保留堆的大小
- SizeOfHeapCommit = new byte[ulonglong]; // 初始时指定堆大小
+ SizeOfStackCommit = new byte[ulonglong]; // 初始时指定栈大小
+ SizeOfHeapReserve = new byte[ulonglong]; // 保留堆的大小
+ SizeOfHeapCommit = new byte[ulonglong]; // 初始时指定堆大小
}
}
}
@@ -1435,11 +1678,13 @@ public OptionalHeader(bool is32)
public class OptionalDirAttrib
{
public ArrayList DirByte = new();
+
public class DirAttrib
{
- public byte[] DirRva = new byte[4]; // 地址
- public byte[] DirSize = new byte[4]; // 大小
+ public byte[] DirRva = new byte[4]; // 地址
+ public byte[] DirSize = new byte[4]; // 大小
}
+
public long FileStarIndex = 0;
public long FileEndIndex = 0;
}
@@ -1450,18 +1695,19 @@ public class DirAttrib
public class SectionTable
{
public ArrayList Section = new();
+
public class SectionData
{
- public byte[] SectName = new byte[8]; // 名字
- public byte[] VirtualAddress = new byte[4]; // 虚拟内存地址
- public byte[] SizeOfRawDataRVA = new byte[4]; // RVA偏移
- public byte[] SizeOfRawDataSize = new byte[4]; // RVA大小
- public byte[] PointerToRawData = new byte[4]; // 指向RAW数据
- public byte[] PointerToRelocations = new byte[4]; // 指向定位号
- public byte[] PointerToLinenumbers = new byte[4]; // 指向行数
- public byte[] NumberOfRelocations = new byte[2]; // 定位号
- public byte[] NumberOfLinenumbers = new byte[2]; // 行数号
- public byte[] Characteristics = new byte[4]; // 区段标记
+ public byte[] SectName = new byte[8]; // 名字
+ public byte[] VirtualAddress = new byte[4]; // 虚拟内存地址
+ public byte[] SizeOfRawDataRVA = new byte[4]; // RVA偏移
+ public byte[] SizeOfRawDataSize = new byte[4]; // RVA大小
+ public byte[] PointerToRawData = new byte[4]; // 指向RAW数据
+ public byte[] PointerToRelocations = new byte[4]; // 指向定位号
+ public byte[] PointerToLinenumbers = new byte[4]; // 指向行数
+ public byte[] NumberOfRelocations = new byte[2]; // 定位号
+ public byte[] NumberOfLinenumbers = new byte[2]; // 行数号
+ public byte[] Characteristics = new byte[4]; // 区段标记
}
public long FileStarIndex = 0;
@@ -1473,21 +1719,22 @@ public class SectionData
///
public class ExportDirectory
{
- public byte[] Characteristics = new byte[4]; // 一个保留字段,目前为止值为0.
- public byte[] TimeDateStamp = new byte[4]; // 产生的时间
- public byte[] MajorVersion = new byte[2]; // 主版本号
- public byte[] MinorVersion = new byte[2]; // 副版本号
- public byte[] Name = new byte[4]; // 一个RVA,指向一个dll的名称的ascii字符串
- public byte[] Base = new byte[4]; // 输出函数的起始序号.一般为1
- public byte[] NumberOfFunctions = new byte[4]; // 输出函数入口地址的数组中的元素个数
- public byte[] NumberOfNames = new byte[4]; // 输出函数名的指针的数组中的元素个数,也是输出函数名对应的序号的数组中的元素个数
- public byte[] AddressOfFunctions = new byte[4]; // 一个RVA,指向输出函数入口地址的数组
- public byte[] AddressOfNames = new byte[4]; // 一个RVA,指向输出函数名的指针的数组
+ public byte[] Characteristics = new byte[4]; // 一个保留字段,目前为止值为0.
+ public byte[] TimeDateStamp = new byte[4]; // 产生的时间
+ public byte[] MajorVersion = new byte[2]; // 主版本号
+ public byte[] MinorVersion = new byte[2]; // 副版本号
+ public byte[] Name = new byte[4]; // 一个RVA,指向一个dll的名称的ascii字符串
+ public byte[] Base = new byte[4]; // 输出函数的起始序号.一般为1
+ public byte[] NumberOfFunctions = new byte[4]; // 输出函数入口地址的数组中的元素个数
+ public byte[] NumberOfNames = new byte[4]; // 输出函数名的指针的数组中的元素个数,也是输出函数名对应的序号的数组中的元素个数
+ public byte[] AddressOfFunctions = new byte[4]; // 一个RVA,指向输出函数入口地址的数组
+ public byte[] AddressOfNames = new byte[4]; // 一个RVA,指向输出函数名的指针的数组
public byte[] AddressOfNameOrdinals = new byte[4]; // 一个RVA,指向输出函数名对应的序号的数组
public ArrayList AddressOfFunctionsList = new();
public ArrayList AddressOfNamesList = new();
public ArrayList AddressOfNameOrdinalsList = new();
+
///
/// 函数指针名称集合
///
@@ -1507,7 +1754,6 @@ public HashSet FunctionNames()
}
}
-
///
/// 输入表
///
@@ -1518,13 +1764,14 @@ public class ImportDirectory
public class ImportDate
{
public byte[] OriginalFirstThunk = new byte[4]; // 这里实际上保存着一个RVA,这个RVA指向一个DWORD数组,这个数组可以叫做输入查询表.每个数组元素,或者叫一个表项,保存着一个指向函数名的RVA或者保存着一个函数的序号.
- public byte[] TimeDateStamp = new byte[4]; // 当这个值为0的时候,表明还没有bind.不为0的话,表示已经bind过了.有关bind的内容后面介绍.
+ public byte[] TimeDateStamp = new byte[4]; // 当这个值为0的时候,表明还没有bind.不为0的话,表示已经bind过了.有关bind的内容后面介绍.
public byte[] ForwarderChain = new byte[4];
- public byte[] Name = new byte[4]; // 一个RVA,这个RVA指向一个ascii以空字符结束的字符串,这个字符串就是本结构对应的dll文件的名字.
+ public byte[] Name = new byte[4]; // 一个RVA,这个RVA指向一个ascii以空字符结束的字符串,这个字符串就是本结构对应的dll文件的名字.
public byte[] FirstThunk = new byte[4]; // 一个RVA,这个RVA指向一个DWORD数组,这个数组可以叫输入地址表.如果bind了的话,这个数组的每个元素,就是一个输入函数的入口地址.
- public byte[]? DLLName; // DLL名称
+ public byte[]? DLLName; // DLL名称
public ArrayList DLLFunctionList = new();
+
public class FunctionList
{
public byte[] OriginalFirst = new byte[4];
@@ -1532,6 +1779,7 @@ public class FunctionList
public byte[] FunctionHead = new byte[2];
}
}
+
public long FileStarIndex = 0;
public long FileEndIndex = 0;
}
@@ -1573,4 +1821,4 @@ public class DataEntry
public long FileEndIndex = 0;
}
#endregion
-#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
\ No newline at end of file
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
diff --git a/tests/TestShared/CmdINI.cs b/tests/TestShared/CmdINI.cs
index e4deab7..6ab4aaf 100644
--- a/tests/TestShared/CmdINI.cs
+++ b/tests/TestShared/CmdINI.cs
@@ -39,7 +39,6 @@ public AutoRegAssemEx() : base(AutoRegConfig.All)
}
}
-
public class CmdInit
{
public static AutoRegAssemEx? AutoRegAssemEx;
@@ -130,7 +129,6 @@ public static void StaticInitialize()
}
}
-
/*
* 自动执行:接口
*/
@@ -168,8 +166,6 @@ public void Terminate()
}
#endif
-
-
#endif
public class Init
@@ -177,7 +173,6 @@ public class Init
[CommandMethod(nameof(Initialize))]
public void Initialize()
{
-
// var assembly= Assembly.GetExecutingAssembly();
// Env.Printl(assembly.GetName().Name);
// var info = new AssemInfo(assembly);
@@ -188,6 +183,5 @@ public void Initialize()
public void Terminate()
{
-
}
}
\ No newline at end of file
diff --git a/tests/TestShared/TestAddEntity.cs b/tests/TestShared/TestAddEntity.cs
index 123ba77..5ca7087 100644
--- a/tests/TestShared/TestAddEntity.cs
+++ b/tests/TestShared/TestAddEntity.cs
@@ -2,18 +2,6 @@
public partial class Test
{
-
-
-
-
-
-
-
-
-
-
-
-
[CommandMethod(nameof(Test_Rec))]
public void Test_Rec()
{
@@ -29,36 +17,44 @@ public void Test_Rec()
var p13 = p3 - p1;
var p24 = p4 - p2;
-
const double pi90 = Math.PI / 2;
pi90.Print();
- Tools.TestTimes(1000000, "对角线", () => {
- var result = false;
- if (Math.Abs(p13.Length - p24.Length) <= 1e8)
- {
- result = p41.IsParallelTo(p12);
+ Tools.TestTimes(
+ 1000000,
+ "对角线",
+ () => {
+ var result = false;
+ if (Math.Abs(p13.Length - p24.Length) <= 1e8)
+ {
+ result = p41.IsParallelTo(p12);
+ }
}
- });
+ );
#pragma warning disable CS0219 // 变量已被赋值,但从未使用过它的值
- Tools.TestTimes(1000000, "三次点乘", () => {
- bool result = Math.Abs(p12.DotProduct(p23)) < 1e8 &&
- Math.Abs(p23.DotProduct(p34)) < 1e8 &&
- Math.Abs(p34.DotProduct(p41)) < 1e8;
- });
-
- Tools.TestTimes(1000000, "三次垂直", () => {
- bool result = p12.IsParallelTo(p23) &&
- p23.IsParallelTo(p34) &&
- p34.IsParallelTo(p41);
- });
+ Tools.TestTimes(
+ 1000000,
+ "三次点乘",
+ () => {
+ bool result =
+ Math.Abs(p12.DotProduct(p23)) < 1e8
+ && Math.Abs(p23.DotProduct(p34)) < 1e8
+ && Math.Abs(p34.DotProduct(p41)) < 1e8;
+ }
+ );
+
+ Tools.TestTimes(
+ 1000000,
+ "三次垂直",
+ () => {
+ bool result =
+ p12.IsParallelTo(p23) && p23.IsParallelTo(p34) && p34.IsParallelTo(p41);
+ }
+ );
#pragma warning restore CS0219 // 变量已被赋值,但从未使用过它的值
}
-
-
-
[CommandMethod(nameof(Test_EntRoration))]
public void Test_EntRoration()
{
@@ -76,17 +72,29 @@ public void Test_TypeSpeed()
{
var line = new Line();
var line1 = line as Entity;
- Tools.TestTimes(100000, "is 匹配:", () => {
- var t = line1 is Line;
- });
- Tools.TestTimes(100000, "name 匹配:", () => {
- // var t = line.GetType().Name;
- var tt = line1.GetType().Name == nameof(Line);
- });
- Tools.TestTimes(100000, "dxfname 匹配:", () => {
- // var t = line.GetType().Name;
- var tt = line1.GetRXClass().DxfName == nameof(Line);
- });
+ Tools.TestTimes(
+ 100000,
+ "is 匹配:",
+ () => {
+ var t = line1 is Line;
+ }
+ );
+ Tools.TestTimes(
+ 100000,
+ "name 匹配:",
+ () => {
+ // var t = line.GetType().Name;
+ var tt = line1.GetType().Name == nameof(Line);
+ }
+ );
+ Tools.TestTimes(
+ 100000,
+ "dxfname 匹配:",
+ () => {
+ // var t = line.GetType().Name;
+ var tt = line1.GetRXClass().DxfName == nameof(Line);
+ }
+ );
}
[CommandMethod(nameof(Test_sleeptrans))]
diff --git a/tests/TestShared/TestBlock.cs b/tests/TestShared/TestBlock.cs
index 20baa82..a8b3433 100644
--- a/tests/TestShared/TestBlock.cs
+++ b/tests/TestShared/TestBlock.cs
@@ -1,5 +1,4 @@
-
-namespace Test;
+namespace Test;
public class TestBlock
{
@@ -47,8 +46,7 @@ public void Test_BlockDef()
using DBTrans tr = new();
// var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
tr.BlockTable.Add("test",
- btr =>
- {
+ btr => {
btr.Origin = new Point3d(0, 0, 0);
},
() => // 图元
@@ -63,12 +61,10 @@ public void Test_BlockDef()
// ObjectId objectId = tr.BlockTable.Add("a");// 新建块
// objectId.GetObject().AddEntity();// 测试添加空实体
tr.BlockTable.Add("test1",
- btr =>
- {
+ btr => {
btr.Origin = new Point3d(0, 0, 0);
},
- () =>
- {
+ () => {
var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
var acText = DBTextEx.CreateDBText(Point3d.Origin, "123", 2.5);
return new List { line, acText };
@@ -82,8 +78,7 @@ public void Test_BlockDefbehind()
using DBTrans tr = new(@"C:\Users\vic\Desktop\test.dwg");
// var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
tr.BlockTable.Add("test",
- btr =>
- {
+ btr => {
btr.Origin = new Point3d(0, 0, 0);
},
() => // 图元
@@ -100,12 +95,10 @@ public void Test_BlockDefbehind()
// ObjectId objectId = tr.BlockTable.Add("a");// 新建块
// objectId.GetObject().AddEntity();// 测试添加空实体
tr.BlockTable.Add("test1",
- btr =>
- {
+ btr => {
btr.Origin = new Point3d(0, 0, 0);
},
- () =>
- {
+ () => {
var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
var acText = DBTextEx.CreateDBText(Point3d.Origin, "12345", 2.5);
@@ -114,8 +107,6 @@ public void Test_BlockDefbehind()
tr.Database.SaveDwgFile();
}
-
-
// 修改块定义
[CommandMethod(nameof(Test_BlockDefChange))]
public void Test_BlockDefChange()
@@ -132,9 +123,7 @@ public void Test_BlockDefChange()
// });
-
- tr.BlockTable.Change("test", btr =>
- {
+ tr.BlockTable.Change("test", btr => {
foreach (var id in btr)
{
var ent = tr.GetObject(id);
@@ -146,6 +135,7 @@ public void Test_BlockDefChange()
dBText.DimensionText = "234";
dBText.RecomputeDimensionBlock(true);
break;
+
case Hatch hatch:
hatch.ColorIndex = 0;
break;
@@ -166,7 +156,6 @@ public void Test_InsertBlockDef()
var att2 = new AttributeDefinition() { Position = new Point3d(10, 12, 0), Tag = "tagTest2", Height = 1, TextString = "valueTest2" };
tr.BlockTable.Add("test1", line1, line2, att1, att2);
-
List ents = [];
var line5 = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
var line6 = new Line(new Point3d(0, 0, 0), new Point3d(-1, 1, 0));
@@ -174,7 +163,6 @@ public void Test_InsertBlockDef()
ents.Add(line6);
tr.BlockTable.Add("test44", ents);
-
var line3 = new Line(new Point3d(5, 5, 0), new Point3d(6, 6, 0));
var line4 = new Line(new Point3d(5, 5, 0), new Point3d(-6, 6, 0));
var att3 = new AttributeDefinition() { Position = new Point3d(10, 14, 0), Tag = "tagTest3", Height = 1, TextString = "valueTest3" };
@@ -209,24 +197,19 @@ public void Test_InsertBlockWithDoubleDatabase()
using var trans = new DBTrans();
tr.BlockTable.Add("test456",
- btr =>
- {
+ btr => {
btr.Origin = new(0, 0, 0);
},
- () =>
- {
+ () => {
var line = new Line(new(0, 0, 0), new(1, 1, 0));
var actext = DBTextEx.CreateDBText(Point3d.Origin, "123", 2.5, database: tr.Database);
return new List { line, actext };
-
});
tr.CurrentSpace.InsertBlock(Point3d.Origin, "test456");
tr.Database.SaveDwgFile();
}
-
-
[CommandMethod(nameof(Test_AddAttsDef))]
public void Test_AddAttsDef()
{
@@ -265,11 +248,11 @@ public void Test_BlockFile()
[CommandMethod(nameof(Test_BlockFiledxf))]
public void Test_BlockFiledxf()
{
- string [] files;
- var folder= new System.Windows.Forms.FolderBrowserDialog();
+ string[] files;
+ var folder = new System.Windows.Forms.FolderBrowserDialog();
if (folder.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
- files = Directory.GetFiles(folder.SelectedPath,"*.dxf",SearchOption.AllDirectories);
+ files = Directory.GetFiles(folder.SelectedPath, "*.dxf", SearchOption.AllDirectories);
using DBTrans tr = new();
foreach (var item in files)
{
@@ -280,20 +263,15 @@ public void Test_BlockFiledxf()
tr.CurrentSpace.InsertBlock(pt.Value, id);
Env.Editor.Redraw();
}
-
}
-
}
-
-
}
[CommandMethod(nameof(Test_ClipBlock))]
public void Test_ClipBlock()
{
using DBTrans tr = new();
- tr.BlockTable.Add("test1", btr =>
- {
+ tr.BlockTable.Add("test1", btr => {
btr.Origin = new Point3d(0, 0, 0);
btr.AddEntity(new Line(new Point3d(0, 0, 0), new Point3d(10, 10, 0)),
new Line(new Point3d(10, 10, 0), new Point3d(10, 0, 0)));
@@ -309,7 +287,6 @@ public void Test_ClipBlock()
brf2?.XClip(new Point3d(13, 13, 0), new Point3d(17, 17, 0));
}
-
[CommandMethod(nameof(Test_ClipBlock1))]
public void Test_ClipBlock1()
{
@@ -320,11 +297,8 @@ public void Test_ClipBlock1()
var brf1 = tr.GetObject(ent.ObjectId)!;
var pts = new List { new Point3d(3, 3, 0), new Point3d(7, 3, 0), new Point3d(7, 7, 0), new Point3d(3, 7, 0) };
brf1.XClip(pts);
-
}
-
-
// 给用户的测试程序,不知道对错
[CommandMethod(nameof(Test_Block_ej))]
public void Test_Block_ej()
@@ -349,8 +323,7 @@ public void Test_Block_ej()
var blockdef = tr.BlockTable.GetBlockFrom(fullFileName, false);
tr.Database.Clayer = tr.LayerTable["0"];// 当前图层切换为0图层
- tr.LayerTable.Change(tr.Database.Clayer, ltr =>
- {
+ tr.LayerTable.Change(tr.Database.Clayer, ltr => {
ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2); // ColorMethod.ByAci可以让我们使用AutoCAD ACI颜色索引……这里为2(表示黄色)
});
@@ -375,8 +348,7 @@ public void Test_Block_ej()
var btr = tr2.BlockTable[brf2.Name];
- tr2.BlockTable.Change(btr, ltr =>
- {
+ tr2.BlockTable.Change(btr, ltr => {
foreach (ObjectId oid in ltr)
{
var ent = tr2.GetObject(oid);
@@ -388,8 +360,10 @@ public void Test_Block_ej()
case "$$A":
mText.Contents = "hahaha";
break;
+
case "$$B":
break;
+
default:
break;
}
@@ -408,6 +382,7 @@ public void Test_Block_ej()
dimension.DimensionText = "350";
dimension.RecomputeDimensionBlock(true);
break;
+
default:
break;
}
@@ -556,7 +531,7 @@ public void Test_QuickBlockDef1()
// ed.Regen();
}
- void Wblock()
+ private void Wblock()
{
var curdb = HostApplicationServices.WorkingDatabase;
PromptSelectionOptions opts = new()
@@ -568,6 +543,7 @@ void Wblock()
var db = curdb.Wblock(ids, Point3d.Origin);
db.SaveAs(@"c:\test.dwg", DwgVersion.Current);
}
+
[CommandMethod(nameof(ChangeDynameicBlock))]
public void ChangeDynameicBlock()
{
@@ -581,6 +557,7 @@ public void ChangeDynameicBlock()
brf.ChangeBlockProperty(pro);
// 这是第一个函数的用法
}
+
[CommandMethod(nameof(ChangeBlockProperty))]
public void ChangeBlockProperty()
{
@@ -607,14 +584,12 @@ public void Test_Back()
}
using DBTrans tr = new(dwg);
- tr.ModelSpace.GetEntities().ForEach(ent =>
- {
+ tr.ModelSpace.GetEntities().ForEach(ent => {
ent.ForWrite(e => e.ColorIndex = 3);
});
tr.Database.SaveAs(dwg, DwgVersion.Current);
- tr.ModelSpace.GetEntities().ForEach(ent =>
- {
+ tr.ModelSpace.GetEntities().ForEach(ent => {
ent.ForWrite(e => e.ColorIndex = 4);
});
tr.Database.SaveAs(dwg, DwgVersion.Current);
@@ -643,11 +618,8 @@ public void Test_ExplodeBlock()
}
}
-
-
public static class Blocks
{
-
[CommandMethod("TestExplodeToOwnerSpace3")]
public static void TestExplodeToOwnerSpace3_Method()
{
@@ -706,6 +678,7 @@ public static ObjectIdCollection ExplodeToOwnerSpace3(ObjectId id, bool erase =
}
private static ObjectIdCollection idsAdded = [];
+
public static ObjectIdCollection ExplodeToOwnerSpace3(this BlockReference br)
{
idsAdded = new ObjectIdCollection();
@@ -716,6 +689,7 @@ public static ObjectIdCollection ExplodeToOwnerSpace3(this BlockReference br)
return idsAdded;
}
+
// 不能用于非等比
public static void LoopThroughInsertAndAddEntity2n3(Matrix3d mat, BlockReference br, BlockTableRecord space)
{
@@ -741,10 +715,8 @@ public static void LoopThroughInsertAndAddEntity2n3(Matrix3d mat, BlockReference
}
}
}
-
}
-
public class BlockImportClass
{
[CommandMethod(nameof(Test_Cbll))]
@@ -758,7 +730,6 @@ public void Test_Cbll()
tr.Database.Insert(blkdefname, tr1.Database, false); // 插入了块定义,未插入块参照
}
-
[CommandMethod(nameof(Test_CombineBlocksIntoLibrary))]
public void Test_CombineBlocksIntoLibrary()
{
@@ -860,5 +831,4 @@ public void Test_CombineBlocksIntoLibrary()
pathName
);
}
-
}
\ No newline at end of file
diff --git a/tests/TestShared/TestCadFilePath.cs b/tests/TestShared/TestCadFilePath.cs
index c0354d5..2b36ca0 100644
--- a/tests/TestShared/TestCadFilePath.cs
+++ b/tests/TestShared/TestCadFilePath.cs
@@ -1,5 +1,4 @@
-
-namespace Test;
+namespace Test;
public class TestCadFilePath
{
@@ -24,4 +23,4 @@ public void TestCadFilePathfun()
acadkey?.SetValue(name, $@"{str}\nihao;", RegistryValueKind.String);
}
}
-}
+}
\ No newline at end of file
diff --git a/tests/TestShared/TestConvexHull.cs b/tests/TestShared/TestConvexHull.cs
index 03692ae..10a8ece 100644
--- a/tests/TestShared/TestConvexHull.cs
+++ b/tests/TestShared/TestConvexHull.cs
@@ -1,6 +1,5 @@
namespace Test;
-
public class TestConvexHull
{
[CommandMethod(nameof(Test_ConvexHull))]
@@ -45,7 +44,6 @@ public void Test_ConvexHull()
// tr.Editor.WriteMessage(a1.ToString());
// tr.Editor.WriteMessage(a2.ToString());
-
// var vec1 = new Vector2d(1, 1);
// var vec2 = new Vector2d(-1, 1);
diff --git a/tests/TestShared/TestCurve.cs b/tests/TestShared/TestCurve.cs
index fd75698..63409dc 100644
--- a/tests/TestShared/TestCurve.cs
+++ b/tests/TestShared/TestCurve.cs
@@ -38,7 +38,6 @@ public void Test_Graph1()
});
}
-
[CommandMethod(nameof(Test_Graphspeed))]
public void Test_Graphspeed()
{
@@ -81,21 +80,17 @@ public void Test_Graphspeed()
#endif
}
-
-
public partial class TestCurve
{
[CommandMethod(nameof(Test_CurveExtend))]
public void Test_CurveExtend()
{
- using var tr = new DBTrans();
+ using var tr = new DBTrans();
var ent = Env.Editor.GetEntity("pick curve").ObjectId.GetObject();
if (ent is Curve curve)
curve.ForWrite(e => e.Extend(e.EndParam + 1));
-
}
-
private Arc ToArc1(CircularArc2d a2d)
{
double startangle, endangle;
@@ -121,7 +116,6 @@ private Arc ToArc1(CircularArc2d a2d)
endangle);
}
-
#if false
[CommandMethod(nameof(Test_Curve_ToArc))]
public void Test_Curve_ToArc()
@@ -140,8 +134,6 @@ public void Test_Curve_ToArc()
dbarc3.ColorIndex = 3;
tr.CurrentSpace.AddEntity(dbarc3);
-
-
Polyline pl0 = new();//创建有圆弧的多段线
pl0.AddVertexAt(0, new(-520, 200), -0.74, 0, 0);
@@ -151,16 +143,15 @@ public void Test_Curve_ToArc()
pl0.AddVertexAt(4, new(450, 200), -0.69, 0, 0);
tr.CurrentSpace.AddEntity(pl0);
-
for (int FFF = 0; FFF < pl0.NumberOfVertices; FFF++)
{
if (pl0.GetSegmentType(FFF) == SegmentType.Arc)
{
var bulge = pl0.GetBulgeAt(FFF);
-
+
//将 CircularArc2d 转为Arc 颜色为红
CircularArc2d arc2d = pl0.GetArcSegment2dAt(FFF);
-
+
Arc arc = arc2d.ToArc();
if (bulge < 0) arc.ReverseCurve();
arc.ColorIndex = 1;
@@ -180,11 +171,11 @@ public void Test_Curve_ToArc()
Env.Printl($"arc的ge:顺时针:{arc2d1.IsClockWise}");
Env.Printl($"arc1的ge:起点角度:{MathEx.ConvertRadToDeg(arc2d1.StartAngle)} ,终点角度: {MathEx.ConvertRadToDeg(arc2d1.EndAngle)}");
Env.Printl($"arc1的db:起点角度:{MathEx.ConvertRadToDeg(arc1.StartAngle)} ,终点角度: {MathEx.ConvertRadToDeg(arc1.EndAngle)}");
-
+
//将 CircularArc3d 转为Arc 颜色为黄色
CircularArc3d arc3d = pl0.GetArcSegmentAt(FFF);
Arc arc2 = arc3d.ToArc();
-
+
arc2.ColorIndex = 3;
tr.CurrentSpace.AddEntity(arc2);
Env.Printl($"arc2的ge:ReferenceVector:{MathEx.ConvertRadToDeg(arc3d.ReferenceVector.AngleOnPlane(new Plane()))}");
@@ -193,7 +184,6 @@ public void Test_Curve_ToArc()
/*
-
arc的ge: ReferenceVector:154.872779886857
arc的ge: 顺时针:True
arc的ge:起点角度:0,终点角度:146.005764482025
@@ -206,7 +196,6 @@ public void Test_Curve_ToArc()
arc2的ge: 起点角度:0 ,终点角度: 146.005764482025
arc2的db: 起点角度:25.1272201131434 ,终点角度: 171.132984595169
-
arc的ge: ReferenceVector:149.095360016814
arc的ge: 顺时针:False
arc的ge:起点角度:0,终点角度:109.897726505109
@@ -219,7 +208,6 @@ public void Test_Curve_ToArc()
arc2的ge: 起点角度:0 ,终点角度: 109.897726505109
arc2的db: 起点角度:149.095360016814 ,终点角度: 258.993086521922
-
arc的ge: ReferenceVector:118.727409809308
arc的ge: 顺时针:True
arc的ge:起点角度:0,终点角度:60.4383004893619
@@ -232,7 +220,6 @@ public void Test_Curve_ToArc()
arc2的ge: 起点角度:0 ,终点角度: 60.4383004893619
arc2的db: 起点角度:61.2725901906918 ,终点角度: 121.710890680054
-
arc的ge: ReferenceVector:277.644556524148
arc的ge: 顺时针:False
arc的ge:起点角度:0,终点角度:147.479590583376
@@ -245,20 +232,13 @@ public void Test_Curve_ToArc()
arc2的ge: 起点角度:0 ,终点角度: 147.479590583376
arc2的db: 起点角度:277.644556524148 ,终点角度: 65.124147107524
-
-
-
-
-
*/
}
}
-
}
#endif
}
-
public partial class TestCurve
{
[CommandMethod(nameof(Test_BreakCurve))]
diff --git a/tests/TestShared/TestDBTrans.cs b/tests/TestShared/TestDBTrans.cs
index 41eb67d..333550a 100644
--- a/tests/TestShared/TestDBTrans.cs
+++ b/tests/TestShared/TestDBTrans.cs
@@ -33,10 +33,7 @@ private static Document Getdoc()
var doc = Acaop.DocumentManager.MdiActiveDocument;
return doc;
}
-
-
-
-
+
[CommandMethod(nameof(CmdTest_DBTransActiveOpenDwg), CommandFlags.Session)]
public static void CmdTest_DBTransActiveOpenDwg()
{
@@ -94,8 +91,6 @@ public static void CmdTest_ForEachDemo()
});
}
-
-
// 后台:不存在路径的dwg会在桌面进行临时保存
[CommandMethod(nameof(FileNotExist))]
public void FileNotExist()
@@ -123,7 +118,6 @@ public void FileNotExist3()
tr2.Database.SaveFile(saveAsFile: "D:\\");
}
-
[CommandMethod(nameof(Test_SaveDwgFile))]
public void Test_SaveDwgFile()
{
@@ -134,6 +128,7 @@ public void Test_SaveDwgFile()
// tr.Database.SaveAs(filename,DwgVersion.Current);
tr.Database.SaveDwgFile();
}
+
[CommandMethod(nameof(Test_DBTransAbort))]
public void Test_DBTransAbort()
{
@@ -165,7 +160,6 @@ public void Test_DBTransAbort()
// tr.ModelSpace.AddCircle(new Point3d(0, 0, 0), 20);
// }
-
[CommandMethod(nameof(Test_TopTransaction))]
public void Test_TopTransaction()
{
@@ -184,7 +178,6 @@ public void Test_TopTransaction()
Env.Print(tr4.Transaction == tr5);
Env.Print(tr5 == tr7);
var trm = HostApplicationServices.WorkingDatabase.TransactionManager;
-
}
[CommandMethod(nameof(Test_DBTrans_BlockCount))]
@@ -194,10 +187,8 @@ public void Test_DBTrans_BlockCount()
var i = tr.CurrentSpace
.GetEntities()
.Where(ent => ent.GetBlockName() == "自定义块");
-
+
var block = i.ToList()[0];
Env.Print(i.Count());
}
-
-
}
\ No newline at end of file
diff --git a/tests/TestShared/TestDBobject.cs b/tests/TestShared/TestDBobject.cs
index f0cb142..dbaad8a 100644
--- a/tests/TestShared/TestDBobject.cs
+++ b/tests/TestShared/TestDBobject.cs
@@ -1,6 +1,4 @@
-
-
-namespace TestShared
+namespace TestShared
{
public static class TestDBobject
{
@@ -24,4 +22,4 @@ public static void TestForWrite()
});
}
}
-}
+}
\ No newline at end of file
diff --git a/tests/TestShared/TestDwgMark.cs b/tests/TestShared/TestDwgMark.cs
index cf0d712..e8b2c85 100644
--- a/tests/TestShared/TestDwgMark.cs
+++ b/tests/TestShared/TestDwgMark.cs
@@ -1,11 +1,16 @@
namespace Test;
+
using IFoxCAD.Cad;
-public class TestDwgMark {
+
+public class TestDwgMark
+{
[CommandMethod(nameof(DwgMarktest))]
- public void DwgMarktest() {
+ public void DwgMarktest()
+ {
FileInfo file = new FileInfo(@"D:\TEST\1.dwg");
DwgMark.AddMark(file, 0x4D);
- DwgMark.RemoveMark(file);
+ //DwgMark.RemoveMark(file);
int A = DwgMark.GetMark(file);
+ Env.Print(A);
}
}
\ No newline at end of file
diff --git a/tests/TestShared/TestEditor.cs b/tests/TestShared/TestEditor.cs
index 5f83345..d1621ff 100644
--- a/tests/TestShared/TestEditor.cs
+++ b/tests/TestShared/TestEditor.cs
@@ -23,6 +23,7 @@ public void Test_Editor()
var s = ed.GetString("qustr");
Env.Editor.WriteMessage("");
}
+
[CommandMethod(nameof(Test_Zoom))]
public void Test_Zoom()
{
@@ -31,6 +32,7 @@ public void Test_Zoom()
if (res.Status == PromptStatus.OK)
Env.Editor.ZoomObject(res.ObjectId.GetObject()!);
}
+
[CommandMethod(nameof(Test_ZoomExtents))]
public void Test_ZoomExtents()
{
@@ -47,25 +49,25 @@ public void Test_ZoomExtents()
[CommandMethod(nameof(Test_Zoom_1))]
public void Test_Zoom_1()
{
- Env.Editor.Zoom(new(0, 0, 0),200,200);
+ Env.Editor.Zoom(new(0, 0, 0), 200, 200);
}
+
[CommandMethod(nameof(Test_Zoom_2))]
public void Test_Zoom_2()
{
- Env.Editor.ZoomWindow(new Point3d(-100,-100,0),new(100,100,0));
+ Env.Editor.ZoomWindow(new Point3d(-100, -100, 0), new(100, 100, 0));
}
[CommandMethod(nameof(Test_Ssget))]
public void Test_Ssget()
{
-
var keyword = new Dictionary
{
{ "D", ("你好", () => { Env.Print("this is c"); }) },
{ "B", ("hello", () => { Env.Print("this is b"); }) }
};
- var ss = Env.Editor.SSGet(/*":S", */ messages: ("get", "del" ),
+ var ss = Env.Editor.SSGet(/*":S", */ messages: ("get", "del"),
keywords: keyword);
Env.Print(ss!);
}
diff --git a/tests/TestShared/TestEntity/TestAddEntity.cs b/tests/TestShared/TestEntity/TestAddEntity.cs
index 920e6e0..a0720b2 100644
--- a/tests/TestShared/TestEntity/TestAddEntity.cs
+++ b/tests/TestShared/TestEntity/TestAddEntity.cs
@@ -2,7 +2,8 @@
public class TestAddEntity
{
-#region 直线
+ #region 直线
+
[CommandMethod(nameof(Test_AddLinetoCurrentSpace))]
public void Test_AddLinetoCurrentSpace()
{
@@ -54,28 +55,32 @@ public void Test_AddEntities()
// c#12 新语法,集合表达式
tr.CurrentSpace.AddEntity([line1, line2, circle]);
}
-#endregion
-#region 圆
+ #endregion 直线
+
+ #region 圆
+
[CommandMethod(nameof(Test_AddCircle))]
public void Test_AddCircle()
{
- var cir = CircleEx.CreateCircle(Point3d.Origin, new(1,0,0)); // 两点创建圆
- var cir1 = CircleEx.CreateCircle(Point3d.Origin, new(1,1,0), new(2,0,0)); //三点创建圆
+ var cir = CircleEx.CreateCircle(Point3d.Origin, new(1, 0, 0)); // 两点创建圆
+ var cir1 = CircleEx.CreateCircle(Point3d.Origin, new(1, 1, 0), new(2, 0, 0)); //三点创建圆
var cir2 = CircleEx.CreateCircle(Point3d.Origin, 5); // 圆心半径创建圆
using DBTrans tr = new();
tr.CurrentSpace.AddEntity(cir, cir2);
-
+
// 由于三点不一定能成功创建一个圆,因此返回值是可空的,需要判空
if (cir1 is not null)
{
tr.CurrentSpace.AddEntity(cir1);
}
}
-#endregion
-#region 圆弧
+ #endregion 圆
+
+ #region 圆弧
+
[CommandMethod(nameof(Test_AddArc))]
public void Test_AddArc()
{
@@ -86,13 +91,10 @@ public void Test_AddArc()
tr.CurrentSpace.AddEntity(arc1, arc2, arc3);
}
-#endregion
+ #endregion 圆弧
+ #region 多段线
-
-
-
-#region 多段线
[CommandMethod(nameof(Test_AddPolyline1))]
public void Test_AddPolyline1()
{
@@ -121,7 +123,7 @@ public void Test_AddPolyline2()
(new Point3d(0,10,0),0,0,0),
(new Point3d(5,5,0),0,0,0)
];
-
+
using DBTrans tr = new();
var pl = pts.CreatePolyline();
tr.CurrentSpace.AddEntity(pl);
@@ -143,8 +145,7 @@ public void Test_AddPolyline3()
tr.CurrentSpace.AddEntity(pline);
// 可以通过委托,一次性的创建多段线并设置属性
- var pline1 = pts.CreatePolyline(p =>
- {
+ var pline1 = pts.CreatePolyline(p => {
p.Closed = true;
p.ConstantWidth = 0.2;
p.ColorIndex = 1;
@@ -152,6 +153,5 @@ public void Test_AddPolyline3()
tr.CurrentSpace.AddEntity(pline1);
}
-#endregion
-
-}
+ #endregion 多段线
+}
\ No newline at end of file
diff --git a/tests/TestShared/TestEnv.cs b/tests/TestShared/TestEnv.cs
index d1df3b8..c8c95b9 100644
--- a/tests/TestShared/TestEnv.cs
+++ b/tests/TestShared/TestEnv.cs
@@ -7,6 +7,7 @@ public void Test_Enum()
{
Env.CmdEcho = true;
}
+
[CommandMethod(nameof(Test_Enum1))]
public void Test_Enum1()
{
@@ -29,6 +30,7 @@ public void Test_Dimblk()
Env.Print(Env.Dimblk);
Env.Print(Env.GetDimblkId(Env.DimblkType.ArchTick));
}
+
[CommandMethod(nameof(Test_Dimblk1))]
public void Test_Dimblk1()
{
@@ -51,6 +53,7 @@ public void Test_Osmode()
Env.OSMode ^= Env.OSModeType.Center;
Env.Editor.WriteMessage(Env.OSMode.ToString());
}
+
[CommandMethod(nameof(Test_Osmode1))]
public void Test_Osmode1()
{
@@ -67,7 +70,7 @@ public void Test_Cadver()
1.Print();
"1".Print();
}
-#endif
+#endif
[CommandMethod(nameof(Test_GetVar))]
public void Test_GetVar()
{
@@ -77,8 +80,6 @@ public void Test_GetVar()
Env.SetVar("dbmod1", 1);
}
-
-
//[CommandMethod(nameof(Test_DwgVersion))]
//public void TestDwgVersion()
//{
@@ -88,7 +89,6 @@ public void Test_GetVar()
// ((DwgVersion)a).Print();
//}
-
#if !zcad
// 通过此功能获取全部变量,尚不清楚此处如何设置,没有通过测试
[CommandMethod(nameof(Test_GetvarAll))]
@@ -103,7 +103,7 @@ public static Dictionary GetvarAll()
var en = new SystemVariableEnumerator();
while (en.MoveNext())
{
- Console.WriteLine(en.Current.Name + "-----" + en.Current.Value);// Value会出现异常
+ Console.WriteLine(en.Current.Name + "-----" + en.Current.Value); // Value会出现异常
dict.Add(en.Current.Name, en.Current.Value);
}
return dict;
@@ -123,13 +123,14 @@ public static void Test_GetEnv()
Env.Printl("GetEnv:" + Env.GetEnv("abc"));
Env.Printl("GetEnv PATH:" + Env.GetEnv("PATH"));
-
+
Env.Printl($"getenv-acad: {Env.GetEnv("ACAD")}");
Env.Printl($"getvar-acad: {Env.GetVar("TRUSTEDPATHS")}");
Env.Printl($"getenv-TRUSTEDPATHS: {Env.GetEnv("TRUSTEDPATHS")}");
Env.Printl($"getenv-osmode: {Env.GetEnv("osmode")}");
Env.Printl($"getvar-osmode: {Env.GetVar("osmode")}");
}
+
[CommandMethod(nameof(Test_AppendPath))]
public static void Test_AppendPath()
{
@@ -140,9 +141,8 @@ public static void Test_AppendPath()
Env.GetEnv("ACAD").Print();
// Env.SetEnv("ACAD", @"C:\Folder1;"+Env.GetEnv("ACAD"));
Env.GetEnv("ACAD").Contains(@"C:\Folder1").Print();
-
}
-
+
[CommandMethod(nameof(Test_RemovePath))]
public static void Test_RemovePath()
{
@@ -154,10 +154,9 @@ public static void Test_RemovePath()
// Env.RemoveTrustedPath(@"c:\a\x");
Env.GetEnv("ACAD").Print();
}
-
+
public static void AppendSupportPath(string path)
{
-
string key = HostApplicationServices.Current.UserRegistryProductRootKey;
// 计算机\HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\R24.0\ACAD-4101:804
var ackey = Registry.CurrentUser.OpenSubKey($@"{key}\Profiles") ?? null;
@@ -179,6 +178,4 @@ public static void AppendSupportPath(string path)
ackey?.Close();
}
-
-
}
\ No newline at end of file
diff --git a/tests/TestShared/TestExtents.cs b/tests/TestShared/TestExtents.cs
index 96c04db..8a5f2a9 100644
--- a/tests/TestShared/TestExtents.cs
+++ b/tests/TestShared/TestExtents.cs
@@ -7,7 +7,7 @@ public void Test_BlockExtents()
{
using var tr = new DBTrans();
var ent = Env.Editor.GetEntity("pick the entity");
- if (ent.Status != PromptStatus.OK )
+ if (ent.Status != PromptStatus.OK)
{
return;
}
@@ -25,11 +25,11 @@ public void Test_BlockExtents()
];
tr.CurrentSpace.AddEntity(pts.CreatePolyline(action: e => e.ColorIndex = 1));
-
+
if (block is BlockReference block1)
{
var extents = block1.GeometryExtentsBestFit();
- List pts1 =
+ List pts1 =
[
extents.MinPoint,
new Point3d(extents.MinPoint.X, extents.MaxPoint.Y, 0),
@@ -40,17 +40,15 @@ public void Test_BlockExtents()
var extents2 = block1.GetBoundingBoxEx();
tr.CurrentSpace.AddEntity(pts.CreatePolyline(action: e => e.ColorIndex = 3));
-
+
// 此处是计算块定义的包围盒,不是块参照的,所以一般情况下不需要使用。
var ext = new Extents3d();
ext.AddBlockExtents(block1.BlockTableRecord.GetObject());
tr.CurrentSpace.AddEntity(ext.CreatePolyline(action: e => e.ColorIndex = 4));
}
-
-
}
}
-
+
[CommandMethod(nameof(Test_entextents))]
public void Test_entextents()
{
@@ -64,8 +62,7 @@ public void Test_entextents()
Env.Print($"{name}是否有包围盒-" + b);
if (b)
{
- tr.CurrentSpace.AddEntity(e.Bounds!.Value.CreatePolyline(action: e =>
- {
+ tr.CurrentSpace.AddEntity(e.Bounds!.Value.CreatePolyline(action: e => {
e.ColorIndex = 4;
e.Closed = true;
}));
@@ -73,36 +70,29 @@ public void Test_entextents()
if (ext.HasValue)
{
tr.CurrentSpace.AddEntity(
- ext.Value.Extents3d.CreatePolyline(action: e =>
- {
+ ext.Value.Extents3d.CreatePolyline(action: e => {
e.ColorIndex = 5;
e.Closed = true;
}));
}
-
+
if (e is Curve spline)
{
var ge = spline.GetGeCurve();
var box = ge.BoundBlock;
- List lst =
+ List lst =
[
box.BasePoint,
box.BasePoint + box.Direction1,
box.BasePoint + box.Direction2,
box.BasePoint + box.Direction3,
];
- tr.CurrentSpace.AddEntity(lst.CreatePolyline(action: e =>
- {
+ tr.CurrentSpace.AddEntity(lst.CreatePolyline(action: e => {
e.ColorIndex = 6;
e.Closed = true;
}));
}
-
}
-
-
-
-
}
}
}
\ No newline at end of file
diff --git a/tests/TestShared/TestHatchinfo.cs b/tests/TestShared/TestHatchinfo.cs
index e241dfb..f14d818 100644
--- a/tests/TestShared/TestHatchinfo.cs
+++ b/tests/TestShared/TestHatchinfo.cs
@@ -12,5 +12,4 @@ public void TestHatchInfo()
var hf = new HatchInfo(ids!, false, null, 1, 0).Mode2UserDefined();
hf.Build(tr.CurrentSpace);
}
-}
-
+}
\ No newline at end of file
diff --git a/tests/TestShared/TestId.cs b/tests/TestShared/TestId.cs
index 57f19cf..16cc051 100644
--- a/tests/TestShared/TestId.cs
+++ b/tests/TestShared/TestId.cs
@@ -39,6 +39,7 @@ public void Test_MyCommand()
trans.Commit();
// dbtrans.Dispose();
}
+
[CommandMethod(nameof(Test_TextStyle))]
public void Test_TextStyle()
{
@@ -51,8 +52,6 @@ public void Test_TextStyle()
tr.TextStyleTable.Add("arial", FontTTF.Arial, 0.8);
tr.TextStyleTable.Add("romas", FontTTF.Romans, 0.8);
-
-
tr.TextStyleTable.Add("daziti", ttr => {
ttr.FileName = "ascii.shx";
ttr.BigFontFileName = "gbcbig.shx";
@@ -64,7 +63,6 @@ public void Test_TextStyleChange()
{
using DBTrans tr = new();
-
tr.TextStyleTable.AddWithChange("宋体1", "simfang.ttf", height: 5);
tr.TextStyleTable.AddWithChange("仿宋体", "宋体.ttf");
tr.TextStyleTable.AddWithChange("fsgb2312", "Romans", "gbcbig");
diff --git a/tests/TestShared/TestJig.cs b/tests/TestShared/TestJig.cs
index d0076f4..64c967b 100644
--- a/tests/TestShared/TestJig.cs
+++ b/tests/TestShared/TestJig.cs
@@ -1,7 +1,7 @@
-namespace Test;
-
using System.Windows.Forms;
+namespace Test;
+
public class Commands_Jig
{
// 已在数据库的图元如何进入jig
@@ -17,16 +17,18 @@ public static void Test_Jig33()
return;
var oldSp = cir.StartPoint;
JigEx? moveJig = null;
- moveJig = new JigEx((mousePoint, drawEntitys) => {
- moveJig!.SetOptions(oldSp);// 回调过程中也可以修改基点
- // cir.UpgradeOpen();// 已经提权了,所以这里不需要提权
- cir.Move(cir.StartPoint, mousePoint);
- // cir.DowngradeOpen();
-
- // 此处会Dispose图元,
- // 所以此处不加入已经在数据库的图元,而是加入new Entity的.
- // drawEntitys.Enqueue(cir);
- });
+ moveJig = new JigEx(
+ (mousePoint, drawEntitys) => {
+ moveJig!.SetOptions(oldSp); // 回调过程中也可以修改基点
+ // cir.UpgradeOpen();// 已经提权了,所以这里不需要提权
+ cir.Move(cir.StartPoint, mousePoint);
+ // cir.DowngradeOpen();
+
+ // 此处会Dispose图元,
+ // 所以此处不加入已经在数据库的图元,而是加入new Entity的.
+ // drawEntitys.Enqueue(cir);
+ }
+ );
moveJig.SetOptions(cir.GeometricExtents.MinPoint);
// 此处详见方法注释
@@ -43,7 +45,6 @@ public static void Test_Jig33()
moveJig.Dispose();
}
-
// 不在数据库的图元如何进入jig
[CommandMethod(nameof(Test_Jig44))]
public void Test_Jig44()
@@ -62,33 +63,34 @@ public void Test_Jig44()
* 所以需要先声明再传入指针,但是我发现null也可以.
*/
JigPromptPointOptions? options = null;
- using var jig = new JigEx((mousePoint, drawEntitys) => {
- var closestPt = pl.GetClosestPointTo(mousePoint, false);
+ using var jig = new JigEx(
+ (mousePoint, drawEntitys) => {
+ var closestPt = pl.GetClosestPointTo(mousePoint, false);
- // 回调过程中SetOptions会覆盖配置,所以如果想增加关键字或者修改基点,
- // 不要这样做: jig.SetOptions(closestPt) 而是使用底层暴露
- options!.BasePoint = closestPt;
+ // 回调过程中SetOptions会覆盖配置,所以如果想增加关键字或者修改基点,
+ // 不要这样做: jig.SetOptions(closestPt) 而是使用底层暴露
+ options!.BasePoint = closestPt;
- // 允许在循环中替换关键字,需要避免重复加入同一个关键字
- if (!options.Keywords.Contains("A"))
- options.Keywords.Add("A");
+ // 允许在循环中替换关键字,需要避免重复加入同一个关键字
+ if (!options.Keywords.Contains("A"))
+ options.Keywords.Add("A");
- // 生成文字
- var dictString = (pl.GetDistAtPoint(closestPt) * 0.001).ToString("0.00");
- var acText = DBTextEx.CreateDBText(closestPt, dictString, 200);
+ // 生成文字
+ var dictString = (pl.GetDistAtPoint(closestPt) * 0.001).ToString("0.00");
+ var acText = DBTextEx.CreateDBText(closestPt, dictString, 200);
- // 加入刷新队列
- drawEntitys.Enqueue(acText);
- });
+ // 加入刷新队列
+ drawEntitys.Enqueue(acText);
+ }
+ );
options = jig.SetOptions(per.PickedPoint);
-
+
// 在这里加入关键字
// 如果没有这个,那么空格只会是 PromptStatus.None 而不是 PromptStatus.Keyword
// options.Keywords.Add(" ", " ", "空格结束啊");
// jig.SetSpaceIsKeyword();
- options.Keywords.Add("A","A","A");
-
+ options.Keywords.Add("A", "A", "A");
bool flag = true;
while (flag)
@@ -99,16 +101,17 @@ public void Test_Jig44()
switch (pr.StringResult)
{
case "A":
- tr.Editor?.WriteMessage($"\n 您触发了关键字{pr.StringResult}");
- flag = false;
- break;
+ tr.Editor?.WriteMessage($"\n 您触发了关键字{pr.StringResult}");
+ flag = false;
+ break;
+
case " ":
- tr.Editor?.WriteMessage("\n 触发关键字空格");
- flag = false;
- break;
+ tr.Editor?.WriteMessage("\n 触发关键字空格");
+ flag = false;
+ break;
}
}
- else if (pr.Status != PromptStatus.OK)// PromptStatus.None == 右键,空格,回车,都在这里结束
+ else if (pr.Status != PromptStatus.OK) // PromptStatus.None == 右键,空格,回车,都在这里结束
{
tr.Editor?.WriteMessage(Environment.NewLine + pr.Status.ToString());
return;
@@ -144,12 +147,14 @@ public void Test_MessageFilter()
// We're done - remove the message filter
System.Windows.Forms.Application.RemoveMessageFilter(filter);
}
+
// Our message filter class
public class MyMessageFilter : IMessageFilter
{
public const int WM_KEYDOWN = 0x0100;
public bool bCanceled = false;
public Keys Key { get; private set; }
+
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == WM_KEYDOWN)
@@ -167,19 +172,15 @@ public bool PreFilterMessage(ref Message m)
}
}
-
[CommandMethod(nameof(Test_QuickText))]
- static public void Test_QuickText()
+ public static void Test_QuickText()
{
var dm = Acap.DocumentManager;
var doc = dm.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
- PromptStringOptions pso = new("\nEnter text string")
- {
- AllowSpaces = true
- };
+ PromptStringOptions pso = new("\nEnter text string") { AllowSpaces = true };
var pr = ed.GetString(pso);
if (pr.Status != PromptStatus.OK)
return;
@@ -216,10 +217,12 @@ class TextPlacementJig : EntityJig
readonly Transaction _tr;
Point3d _position;
- double _angle, _txtSize;
+ double _angle,
+ _txtSize;
// Constructor
- public TextPlacementJig(Transaction tr, Database db, Entity ent) : base(ent)
+ public TextPlacementJig(Transaction tr, Database db, Entity ent)
+ : base(ent)
{
_db = db;
_tr = tr;
@@ -230,20 +233,20 @@ public TextPlacementJig(Transaction tr, Database db, Entity ent) : base(ent)
protected override SamplerStatus Sampler(JigPrompts jp)
{
// We acquire a point but with keywords
- JigPromptPointOptions po = new("\nPosition of text")
- {
- UserInputControls =
- UserInputControls.Accept3dCoordinates |
- UserInputControls.NullResponseAccepted |
- UserInputControls.NoNegativeResponseAccepted |
- UserInputControls.GovernedByOrthoMode
- };
+ JigPromptPointOptions po =
+ new("\nPosition of text")
+ {
+ UserInputControls =
+ UserInputControls.Accept3dCoordinates
+ | UserInputControls.NullResponseAccepted
+ | UserInputControls.NoNegativeResponseAccepted
+ | UserInputControls.GovernedByOrthoMode,
+ };
po.SetMessageAndKeywords(
- "\nSpecify position of text or " +
- "[Bold/Italic/LArger/Smaller/" +
- "ROtate90/LEft/Middle/RIght]: ",
- "Bold Italic LArger Smaller " +
- "ROtate90 LEft Middle RIght"
+ "\nSpecify position of text or "
+ + "[Bold/Italic/LArger/Smaller/"
+ + "ROtate90/LEft/Middle/RIght]: ",
+ "Bold Italic LArger Smaller " + "ROtate90 LEft Middle RIght"
);
PromptPointResult ppr = jp.AcquirePoint(po);
@@ -252,38 +255,42 @@ protected override SamplerStatus Sampler(JigPrompts jp)
switch (ppr.StringResult)
{
case "Bold":
- break;
+ break;
+
case "Italic":
- break;
- case "LArger":
- {
- // Multiple the text size by two
- _txtSize *= 2;
break;
- }
+
+ case "LArger":
+ {
+ // Multiple the text size by two
+ _txtSize *= 2;
+ break;
+ }
case "Smaller":
- {
- // Divide the text size by two
- _txtSize /= 2;
- break;
- }
+ {
+ // Divide the text size by two
+ _txtSize /= 2;
+ break;
+ }
case "ROtate90":
- {
- // To rotate clockwise we subtract 90 degrees and
- // then normalise the angle between 0 and 360
- _angle -= Math.PI / 2;
- while (_angle < Math.PI * 2)
{
- _angle += Math.PI * 2;
+ // To rotate clockwise we subtract 90 degrees and
+ // then normalise the angle between 0 and 360
+ _angle -= Math.PI / 2;
+ while (_angle < Math.PI * 2)
+ {
+ _angle += Math.PI * 2;
+ }
+ break;
}
- break;
- }
case "LEft":
- break;
+ break;
+
case "RIght":
- break;
+ break;
+
case "Middle":
- break;
+ break;
}
return SamplerStatus.OK;
}
diff --git a/tests/TestShared/TestJigExTransient.cs b/tests/TestShared/TestJigExTransient.cs
index 52eb3f4..9ef32b5 100644
--- a/tests/TestShared/TestJigExTransient.cs
+++ b/tests/TestShared/TestJigExTransient.cs
@@ -1,5 +1,4 @@
-
-namespace Test;
+namespace Test;
public partial class Test
{
@@ -85,4 +84,4 @@ public static void Test_JigExTransentDim()
Env.Editor.GetPoint("\n此拾取无意义,仅为了暂停查看");
tr.CurrentSpace.AddEntity(dimension);
}
-}
+}
\ No newline at end of file
diff --git a/tests/TestShared/TestJson.cs b/tests/TestShared/TestJson.cs
index 281e1b1..bc60097 100644
--- a/tests/TestShared/TestJson.cs
+++ b/tests/TestShared/TestJson.cs
@@ -9,6 +9,7 @@ public class TestJson
*
*
*/
+
[CommandMethod(nameof(JavaScriptSerializer))]
public void JavaScriptSerializer()
{
@@ -17,11 +18,8 @@ public void JavaScriptSerializer()
RegisteredUsers.Add(1);
RegisteredUsers.Add(2);
RegisteredUsers.Add(3);
-
- var serializedResult = System.Text.Json.JsonSerializer.Serialize(RegisteredUsers);
- var deserializedResult = System.Text.Json.JsonSerializer.Deserialize>(serializedResult);
-
-
+ var serializedResult = System.Text.Json.JsonSerializer.Serialize(RegisteredUsers);
+ //var deserializedResult = System.Text.Json.JsonSerializer.Deserialize>(serializedResult);
}
}
\ No newline at end of file
diff --git a/tests/TestShared/TestLayer.cs b/tests/TestShared/TestLayer.cs
index 62df5e1..5e58483 100644
--- a/tests/TestShared/TestLayer.cs
+++ b/tests/TestShared/TestLayer.cs
@@ -18,7 +18,6 @@ public void Test_LayerAdd0()
});
}
-
// 添加图层
[CommandMethod(nameof(Test_LayerAdd1))]
public void Test_LayerAdd1()
@@ -35,6 +34,7 @@ public void Test_LayerAdd2()
tr.LayerTable.Add("test2", 2);
// tr.LayerTable["3"] = new LayerTableRecord();
}
+
// 删除图层
[CommandMethod(nameof(Test_LayerDel))]
public void Test_LayerDel()
@@ -48,7 +48,7 @@ public void Test_LayerDel()
tr.LayerTable.Remove("2"); // 测试是否能强制删除
}
-
+
[CommandMethod(nameof(Test_PrintLayerName))]
public void Test_PrintLayerName()
{
diff --git a/tests/TestShared/TestLisp.cs b/tests/TestShared/TestLisp.cs
index 4bd7b19..1de51ea 100644
--- a/tests/TestShared/TestLisp.cs
+++ b/tests/TestShared/TestLisp.cs
@@ -47,17 +47,15 @@ public static object LispTest_RunLisp(ResultBuffer rb)
// 命令不会被记录在命令历史记录
[CommandMethod("CmdTest_RunLisp18", CommandFlags.NoHistory)]
#if (!zcad)
+
// 命令不会被 UNDO取消
[CommandMethod("CmdTest_RunLisp19", CommandFlags.NoUndoMarker)]
// 不能在参照块中使用命令
[CommandMethod("CmdTest_RunLisp20", CommandFlags.NoBlockEditor)]
-
// acad09增,不会被动作录制器 捕捉到
[CommandMethod("CmdTest_RunLisp21", CommandFlags.NoActionRecording)]
// acad09增,会被动作录制器捕捉
[CommandMethod("CmdTest_RunLisp22", CommandFlags.ActionMacro)]
-
-
// 推断约束时不能使用命令
[CommandMethod("CmdTest_RunLisp23", CommandFlags.NoInferConstraint)]
// 命令允许在选择图元时临时显示动态尺寸
@@ -88,35 +86,28 @@ public static void CmdTest_RunLisp()
if (flag == EditorEx.RunLispFlag.AdsQueueexpr)
{
// 同步
- Env.Editor.RunLisp("(setq a 10)(princ)",
- EditorEx.RunLispFlag.AdsQueueexpr);
- Env.Editor.RunLisp("(princ a)",
- EditorEx.RunLispFlag.AdsQueueexpr);// 成功输出
+ Env.Editor.RunLisp("(setq a 10)(princ)", EditorEx.RunLispFlag.AdsQueueexpr);
+ Env.Editor.RunLisp("(princ a)", EditorEx.RunLispFlag.AdsQueueexpr); // 成功输出
}
else if (flag == EditorEx.RunLispFlag.AcedEvaluateLisp)
{
// 使用(command "CmdTest_RunLisp1")发送,然后 !b 查看变量,acad08是有值的,高版本是null
var strlisp0 = "(setq b 20)";
- var res0 = Env.Editor.RunLisp(strlisp0,
- EditorEx.RunLispFlag.AcedEvaluateLisp); // 有lisp的返回值
+ var res0 = Env.Editor.RunLisp(strlisp0, EditorEx.RunLispFlag.AcedEvaluateLisp); // 有lisp的返回值
var strlisp1 = "(defun f1( / )(princ \"aa\"))";
- var res1 = Env.Editor.RunLisp(strlisp1,
- EditorEx.RunLispFlag.AcedEvaluateLisp); // 有lisp的返回值
+ var res1 = Env.Editor.RunLisp(strlisp1, EditorEx.RunLispFlag.AcedEvaluateLisp); // 有lisp的返回值
var strlisp2 = "(defun f2( / )(command \"line\"))";
- var res2 = Env.Editor.RunLisp(strlisp2,
- EditorEx.RunLispFlag.AcedEvaluateLisp); // 有lisp的返回值
+ var res2 = Env.Editor.RunLisp(strlisp2, EditorEx.RunLispFlag.AcedEvaluateLisp); // 有lisp的返回值
}
else if (flag == EditorEx.RunLispFlag.SendStringToExecute)
{
// 测试异步
// (command "CmdTest_RunLisp1")和(LispTest_RunLisp)4都是异步
var str = "(setq c 40)(princ)";
- Env.Editor.RunLisp(str,
- EditorEx.RunLispFlag.SendStringToExecute); // 异步,后发送
- Env.Editor.RunLisp("(princ c)",
- EditorEx.RunLispFlag.AdsQueueexpr); // 同步,先发送了,输出是null
+ Env.Editor.RunLisp(str, EditorEx.RunLispFlag.SendStringToExecute); // 异步,后发送
+ Env.Editor.RunLisp("(princ c)", EditorEx.RunLispFlag.AdsQueueexpr); // 同步,先发送了,输出是null
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/TestShared/TestLoop.cs b/tests/TestShared/TestLoop.cs
index 438253a..13f3cf7 100644
--- a/tests/TestShared/TestLoop.cs
+++ b/tests/TestShared/TestLoop.cs
@@ -1,4 +1,5 @@
namespace Test;
+
public class TestLoop
{
[CommandMethod(nameof(Test_LoopList))]
diff --git a/tests/TestShared/TestMirrorFile.cs b/tests/TestShared/TestMirrorFile.cs
index 76ac033..d3c3b60 100644
--- a/tests/TestShared/TestMirrorFile.cs
+++ b/tests/TestShared/TestMirrorFile.cs
@@ -2,8 +2,8 @@
public class MirrorFile
{
- const string file = "D:/JX.dwg";
- const string fileSave = "D:/JX222.dwg";
+ private const string file = "D:/JX.dwg";
+ private const string fileSave = "D:/JX222.dwg";
///
/// 测试:后台打开图纸,镜像文字是否存在文字偏移
diff --git a/tests/TestShared/TestPoint.cs b/tests/TestShared/TestPoint.cs
index b69afea..5b23bd6 100644
--- a/tests/TestShared/TestPoint.cs
+++ b/tests/TestShared/TestPoint.cs
@@ -1,4 +1,5 @@
namespace Test;
+
public class TestPoint
{
#if false
@@ -14,9 +15,9 @@ public void Test_GetAngle()
var polar = pt1.Polar(Math.PI / 2, 10);
Env.Printl($"pt1 90° 距离10的点是: {polar}");
-
}
#endif
+
[CommandMethod(nameof(Test_Endtoend))]
public void Test_Endtoend()
{
@@ -28,7 +29,6 @@ public void Test_Endtoend()
new(1, 0)
};
-
foreach (Point2d pt in pts)
{
Env.Printl($"X={pt.X},Y={pt.Y}");
@@ -47,7 +47,7 @@ public void Test_Endtoend()
new(1, 1,0),
new(1, 0,0)
};
-
+
foreach (Point3d pt in ptss)
{
Env.Printl($"X={pt.X},Y={pt.Y},Z={pt.Z}");
@@ -58,9 +58,8 @@ public void Test_Endtoend()
{
Env.Printl($"X={pt.X},Y={pt.Y},Z={pt.Z}");
}
-
}
-
+
///
/// 红黑树排序点集
///
@@ -90,8 +89,6 @@ public void Test_PtSortedSet()
}
}
-
-
[CommandMethod(nameof(Test_PtGethash))]
public void Test_PtGethash()
{
diff --git a/tests/TestShared/TestQuadTree.cs b/tests/TestShared/TestQuadTree.cs
index 1c2e2a8..7b4eb04 100644
--- a/tests/TestShared/TestQuadTree.cs
+++ b/tests/TestShared/TestQuadTree.cs
@@ -5,37 +5,41 @@ namespace Test;
* 调用时候必须要继承它,再提供给四叉树
* 主要是用户可以扩展属性
*/
+
public class CadEntity : QuadEntity
{
public ObjectId ObjectId;
+
// 这里加入其他字段
public List? Link;// 碰撞链
+
public System.Drawing.Color Color;
public double Angle;
+
public CadEntity(ObjectId objectId, Rect box) : base(box)
{
ObjectId = objectId;
}
+
public int CompareTo(CadEntity? other)
{
if (other == null)
return -1;
return GetHashCode() ^ other.GetHashCode();
}
+
public override int GetHashCode()
{
return (base.GetHashCode(), ObjectId.GetHashCode()).GetHashCode();
}
}
-
-
-
-
public partial class TestQuadTree
{
- QuadTree? _quadTreeRoot;
+ private QuadTree? _quadTreeRoot;
+
#region 四叉树创建并加入
+
[CommandMethod(nameof(Test_QuadTree))]
public void Test_QuadTree()
{
@@ -125,7 +129,7 @@ public void Test_QuadTree()
///
/// 创建数量
/// 数据库边界
- static IEnumerable GenerateRandomCircle(int createNumber, Rect dbExt)
+ private static IEnumerable GenerateRandomCircle(int createNumber, Rect dbExt)
{
var x1 = (int)dbExt.X;
var x2 = (int)(dbExt.X + dbExt.Width);
@@ -253,12 +257,13 @@ void AddQuadTreeRoot(Database db, Editor ed, List ss)
}
#endif
- #endregion
+ #endregion 四叉树创建并加入
/* 啊惊: 有点懒不想改了*/
#if true2
#region 节点边界显示
+
// 四叉树减去节点
[CommandMethod(nameof(CmdTest_QuadTree0))]
public void CmdTest_QuadTree0()
@@ -327,11 +332,13 @@ public void CmdTest_CreateNodesRect()
});
ed.WriteMessage($"\n四叉树深度是: {dep}");
}
- #endregion
+
+ #endregion 节点边界显示
#endif
#region 四叉树查询节点
+
// 选择范围改图元颜色
[CommandMethod(nameof(CmdTest_QuadTree3))]
public void CmdTest_QuadTree3()
@@ -349,7 +356,7 @@ public void CmdTest_QuadTree4()
/// 改颜色
///
///
- void Ssget(QuadTreeSelectMode mode)
+ private void Ssget(QuadTreeSelectMode mode)
{
if (_quadTreeRoot is null)
return;
@@ -397,7 +404,8 @@ void Ssget(QuadTreeSelectMode mode)
new Point2d(pprB.Value.X, pprB.Value.Y),
true);
}
- #endregion
+
+ #endregion 四叉树查询节点
}
// public partial class TestQuadTree
diff --git a/tests/TestShared/TestSelectfilter.cs b/tests/TestShared/TestSelectfilter.cs
index cab6c92..5f1152d 100644
--- a/tests/TestShared/TestSelectfilter.cs
+++ b/tests/TestShared/TestSelectfilter.cs
@@ -10,7 +10,6 @@ public void Test_Filter()
e => !(e.Dxf(0) == "line" & e.Dxf(8) == "0")
| e.Dxf(0) != "circle" & e.Dxf(8) == "2" & e.Dxf(10) >= p);
-
var f2 = OpFilter.Build(
e => e.Or(
!e.And(e.Dxf(0) == "line", e.Dxf(8) == "0"),
@@ -52,7 +51,5 @@ public void Test_Select_type()
item.Print();
item.ObjectClass.DxfName.Print();
}
-
}
-
}
\ No newline at end of file
diff --git a/tests/TestShared/TestSingleKeyWordHook.cs b/tests/TestShared/TestSingleKeyWordHook.cs
index 73fe216..039c516 100644
--- a/tests/TestShared/TestSingleKeyWordHook.cs
+++ b/tests/TestShared/TestSingleKeyWordHook.cs
@@ -1,4 +1,5 @@
namespace TestShared;
+
public static class TestSingleKeyWordHook
{
[CommandMethod(nameof(TestSingleKeyWordHookDemo))]
@@ -29,11 +30,12 @@ public static void TestSingleKeyWordHookDemo()
switch (skwh.IsResponsed ? skwh.StringResult : r1.StringResult.ToUpper())
{
case "A":
- line1.Rotation(line1.StartPoint, Math.PI * 0.5, Vector3d.ZAxis);
- break;
+ line1.Rotation(line1.StartPoint, Math.PI * 0.5, Vector3d.ZAxis);
+ break;
+
case "D":
- line1.Rotation(line1.StartPoint, Math.PI * 0.25, Vector3d.ZAxis);
- break;
+ line1.Rotation(line1.StartPoint, Math.PI * 0.25, Vector3d.ZAxis);
+ break;
}
continue;
}
@@ -45,4 +47,4 @@ public static void TestSingleKeyWordHookDemo()
return;
}
}
-}
+}
\ No newline at end of file
diff --git a/tests/TestShared/TestText.cs b/tests/TestShared/TestText.cs
index b25dab6..e393ff6 100644
--- a/tests/TestShared/TestText.cs
+++ b/tests/TestShared/TestText.cs
@@ -1,14 +1,12 @@
-
-namespace TestShared;
+namespace TestShared;
public class TestText
{
-
[CommandMethod(nameof(TestDBText))]
public void TestDBText()
{
using var tr = new DBTrans();
- tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action:t=> t.ColorIndex = 1));
+ tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action: t => t.ColorIndex = 1));
tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action: t => {
t.Justify = AttachmentPoint.BaseCenter;
@@ -23,17 +21,14 @@ public void TestBackDBText()
using var tr = new DBTrans(@"C:\Users\vic\Desktop\test.dwg");
tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action: t => t.ColorIndex = 1));
- tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action: t =>
- {
- t.Justify = AttachmentPoint.BaseCenter;
- t.AlignmentPoint = new(1, 1, 0);
- t.ColorIndex = 2;
+ tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action: t => {
+ t.Justify = AttachmentPoint.BaseCenter;
+ t.AlignmentPoint = new(1, 1, 0);
+ t.ColorIndex = 2;
}));
tr.Database.SaveDwgFile();
}
-
-
[CommandMethod(nameof(TestMText))]
public void TestMText()
{
@@ -45,5 +40,4 @@ public void TestMText()
t.ColorIndex = 2;
}));
}
-
-}
+}
\ No newline at end of file
diff --git a/tests/TestShared/TestXdata.cs b/tests/TestShared/TestXdata.cs
index a0c10af..0830f44 100644
--- a/tests/TestShared/TestXdata.cs
+++ b/tests/TestShared/TestXdata.cs
@@ -10,7 +10,7 @@ public class TestXdata
public void Test_AddXdata()
{
using DBTrans tr = new();
-
+
tr.RegAppTable.Add("myapp1");
tr.RegAppTable.Add(Appname); // add函数会默认的在存在这个名字的时候返回这个名字的regapp的id,不存在就新建
tr.RegAppTable.Add("myapp3");
@@ -59,15 +59,16 @@ public void Test_AddXdata()
{ 1070, 12 }
};
- tr.CurrentSpace.AddEntity(line,line1);
+ tr.CurrentSpace.AddEntity(line, line1);
}
+
// 删
[CommandMethod(nameof(Test_RemoveXdata))]
public void Test_RemoveXdata()
{
var res = Env.Editor.GetEntity("\n select the entity:");
if (res.Status != PromptStatus.OK) return;
-
+
using DBTrans tr = new();
var ent = tr.GetObject(res.ObjectId);
if (ent == null || ent.XData == null)
@@ -81,6 +82,7 @@ public void Test_RemoveXdata()
ent.RemoveXData(Appname);
Env.Printl("\n移除appName后:" + ent.XData);
}
+
// 查
[CommandMethod(nameof(Test_GetXdata))]
public void Test_GetXdata()
@@ -91,12 +93,12 @@ public void Test_GetXdata()
tr.RegAppTable.GetRecords().ForEach(rec => rec.Name.Print());
tr.RegAppTable.GetRecordNames().ForEach(name => name.Print());
tr.RegAppTable.ForEach(reg => reg.Name.Print(), checkIdOk: false);
-
+
// 查询appName里面是否含有某个
var res = Env.Editor.GetEntity("\n select the entity:");
if (res.Status != PromptStatus.OK) return;
-
+
var ent = tr.GetObject(res.ObjectId);
if (ent == null || ent.XData == null)
return;
@@ -113,13 +115,14 @@ public void Test_GetXdata()
else
Env.Printl("不含有内容:" + str);
}
+
// 改
[CommandMethod(nameof(Test_ChangeXdata))]
public void Test_ChangeXdata()
{
var res = Env.Editor.GetEntity("\n select the entity:");
if (res.Status != PromptStatus.OK) return;
-
+
using DBTrans tr = new();
var data = tr.GetObject(res.ObjectId)!;
data.ChangeXData(Appname, DxfCode.ExtendedDataAsciiString, "change");
@@ -128,5 +131,4 @@ public void Test_ChangeXdata()
return;
Env.Printl(data.XData.ToString());
}
-
}
\ No newline at end of file
diff --git a/tests/TestShared/Timer.cs b/tests/TestShared/Timer.cs
index 6bd03f1..a063749 100644
--- a/tests/TestShared/Timer.cs
+++ b/tests/TestShared/Timer.cs
@@ -1,6 +1,4 @@
-
-
-namespace Test;
+namespace Test;
/*
// 测试例子,同时验证两个计时器
@@ -28,14 +26,17 @@ public enum TimeEnum
/// 秒
///
Second,
+
///
/// 毫秒
///
Millisecond,
+
///
/// 微秒
///
Microsecond,
+
///
/// 纳秒
///
@@ -56,8 +57,10 @@ public enum TimeEnum
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceFrequency(out long lpFrequency);
- private long _startTime, _stopTime;
+ private long _startTime,
+ _stopTime;
private readonly long _freq;
+
///
/// 构造函数
///
@@ -99,22 +102,24 @@ public void Stop()
/// 毫秒
///
public double Millisecond => Second * 1000.0;
+
///
/// 微秒
///
public double Microsecond => Second * 1000000.0;
+
///
/// 纳秒
///
public double Nanosecond => Second * 1000000000.0;
+
///
/// 计算执行委托的时间
///
/// 要执行的委托
/// 时间单位
/// 执行委托的时间
- public static double RunTime(Action action,
- TimeEnum timeEnum = TimeEnum.Millisecond)
+ public static double RunTime(Action action, TimeEnum timeEnum = TimeEnum.Millisecond)
{
var nanoSecond = new Timer();
nanoSecond.Start();
@@ -127,7 +132,7 @@ public static double RunTime(Action action,
TimeEnum.Millisecond => nanoSecond.Millisecond,
TimeEnum.Microsecond => nanoSecond.Microsecond,
TimeEnum.Nanosecond => nanoSecond.Nanosecond,
- _ => 0.0
+ _ => 0.0,
};
//string timeNameZn = "";
//switch (timeEnum)
diff --git a/tests/TestShared/Tools.cs b/tests/TestShared/Tools.cs
index 4a9eefa..ab6eb76 100644
--- a/tests/TestShared/Tools.cs
+++ b/tests/TestShared/Tools.cs
@@ -48,7 +48,6 @@ public static void TestTimes3(int count, string message, Action action)
$"{message} 代码执行 {count} 次的时间:{time} ({name})".Print(); // 总毫秒数
}
-
///
/// 纳秒计时器
///
@@ -56,8 +55,7 @@ public static void TestTimes3(int count, string message, Action action)
public static void TestTimes(int count, string message, Action action,
Timer.TimeEnum timeEnum = Timer.TimeEnum.Millisecond)
{
- var time = Timer.RunTime(() =>
- {
+ var time = Timer.RunTime(() => {
for (var i = 0; i < count; i++)
action.Invoke();
}, timeEnum);
--
Gitee