Compare commits
20
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcf95d7e3a | ||
|
|
c733a27cbb | ||
|
|
9a7a6cd678 | ||
|
|
66e52e5f50 | ||
|
|
60b3934cd2 | ||
|
|
34222cedc8 | ||
|
|
596c95a4b6 | ||
|
|
6f29a5bce4 | ||
|
|
871499fa03 | ||
|
|
bbe87611bf | ||
|
|
25e1def353 | ||
|
|
f7fa0363e3 | ||
|
|
11e6e5d806 | ||
|
|
77a62d4564 | ||
|
|
dab90f0780 | ||
|
|
3f2fbe9883 | ||
|
|
86fb8c89d2 | ||
|
|
958bad6823 | ||
|
|
1bda2c155d | ||
|
|
287ddff438 |
+11
@@ -0,0 +1,11 @@
|
|||||||
|
/link/
|
||||||
|
/link
|
||||||
|
|
||||||
|
# DocumentAutomation generated files and local source data
|
||||||
|
DocumentAutomation/**/bin/
|
||||||
|
DocumentAutomation/**/obj/
|
||||||
|
DocumentAutomation/.vs/
|
||||||
|
DocumentAutomation/samples/**/*.docx
|
||||||
|
DocumentAutomation/samples/**/*.pdf
|
||||||
|
DocumentAutomation/samples/**/*.json
|
||||||
|
DocumentAutomation/**/*.csproj.user
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
|
<LangVersion>latest</LangVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,206 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.0.31903.59
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocumentAutomation.Shared", "src\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj", "{3D48D7EE-4C18-47A8-9F8F-E296491C0463}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.App", "src\DocxWorkbench.App\DocxWorkbench.App.csproj", "{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.Core", "src\DocxWorkbench.Core\DocxWorkbench.Core.csproj", "{5D7A031E-06AE-4725-89D8-C4EAD75700B1}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.OpenXml", "src\DocxWorkbench.OpenXml\DocxWorkbench.OpenXml.csproj", "{6560936F-10A6-406E-8957-24E577A3F7EE}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.WordInterop", "src\DocxWorkbench.WordInterop\DocxWorkbench.WordInterop.csproj", "{3349BB3A-001A-480D-9867-CF7199BDA04B}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.App", "src\StandardsWorkbench.App\StandardsWorkbench.App.csproj", "{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.Core", "src\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj", "{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.Pdf", "src\StandardsWorkbench.Pdf\StandardsWorkbench.Pdf.csproj", "{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.Ollama", "src\StandardsWorkbench.Ollama\StandardsWorkbench.Ollama.csproj", "{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocumentAutomation.IntegrationTests", "tests\DocumentAutomation.IntegrationTests\DocumentAutomation.IntegrationTests.csproj", "{6D7ED423-F943-4DF0-8D18-F69C127F3D67}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.Tests", "tests\DocxWorkbench.Tests\DocxWorkbench.Tests.csproj", "{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.Tests", "tests\StandardsWorkbench.Tests\StandardsWorkbench.Tests.csproj", "{6E533AAB-42E6-4C60-AE06-A89F2B283187}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{3D48D7EE-4C18-47A8-9F8F-E296491C0463} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{5D7A031E-06AE-4725-89D8-C4EAD75700B1} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{6560936F-10A6-406E-8957-24E577A3F7EE} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{3349BB3A-001A-480D-9867-CF7199BDA04B} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||||
|
{6D7ED423-F943-4DF0-8D18-F69C127F3D67} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
|
||||||
|
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
|
||||||
|
{6E533AAB-42E6-4C60-AE06-A89F2B283187} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# DocumentAutomation
|
||||||
|
|
||||||
|
Первый локальный прототип состоит из независимых `DOCX Workbench` и `Standards Workbench` на .NET 8 Windows Forms.
|
||||||
|
|
||||||
|
DOCX Workbench анализирует DOCX через Open XML, формирует документ через локальный Microsoft Word COM, сохраняет шаблонные секции/колонтитулы, обновляет поля и экспортирует PDF. Standards Workbench импортирует PDF, сохраняет checksum, извлекает страницы и кандидатные пункты, обращается к Ollama только за предложением candidate-rule и экспортирует переносимый профиль.
|
||||||
|
|
||||||
|
## Ограничения MVP
|
||||||
|
|
||||||
|
- OCR только обозначен интерфейсом; страницы без текстового слоя получают статус `OCR_REQUIRED`.
|
||||||
|
- Автоматическое утверждение нормативных правил запрещено.
|
||||||
|
- Word COM требует установленного Microsoft Word и запускается только интерактивно, не как service.
|
||||||
|
- Реальный `156-титул-ПД.docx` и нормативные PDF не добавлялись в Git.
|
||||||
|
- PDF preview использует локальный Word ExportAsFixedFormat.
|
||||||
|
|
||||||
|
Подробности: `docs/architecture.md`, `docs/docx-template-contract.md`, `docs/word-com-lifecycle.md`, `docs/standards-rule-model.md`.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Architecture
|
||||||
|
|
||||||
|
`DocxWorkbench.App` and `StandardsWorkbench.App` are separate WinForms applications. They share only DTOs in `DocumentAutomation.Shared`.
|
||||||
|
|
||||||
|
DOCX flow: GUI -> `DocxWorkbench.Core` contracts -> `DocxWorkbench.OpenXml` read-only inspection or `DocxWorkbench.WordInterop` sequential Word COM queue -> DOCX/PDF and technical JSON log.
|
||||||
|
|
||||||
|
Standards flow: GUI -> `StandardsWorkbench.Pdf` page/clause extraction and `StandardsWorkbench.Ollama` candidate-only suggestions -> manually approved portable profile -> `StandardsWorkbench.Core.RulesEngine`.
|
||||||
|
|
||||||
|
COM is isolated from Core and UI. Standards rules are not hardcoded into document generation.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Development
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
dotnet restore .\DocumentAutomation\DocumentAutomation.sln
|
||||||
|
dotnet build .\DocumentAutomation\DocumentAutomation.sln --configuration Release
|
||||||
|
dotnet test .\DocumentAutomation\DocumentAutomation.sln --configuration Release
|
||||||
|
```
|
||||||
|
|
||||||
|
Run `DocxWorkbench.App` or `StandardsWorkbench.App` from Visual Studio/VS Code. Microsoft Word is required only for DOCX generation and PDF export. Ollama is configured at `http://192.168.200.112:11434`; the model must be selected from `/api/tags`.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# DOCX template contract
|
||||||
|
|
||||||
|
The preferred insertion point is a Content Control with tag or title `DOC_BODY`, then a bookmark named `DOC_BODY`, then the exact marker `{{DOC_BODY}}`. If none is present, generation fails explicitly; the body is never silently appended.
|
||||||
|
|
||||||
|
The template is copied to a temporary working file. Body headers/footers are not imported. Template sections and headers/footers are retained, fields are updated, and Word repaginates before saving.
|
||||||
|
|
||||||
|
Before Word starts, the template is checked for the insertion point. If none is found, the build is rejected without starting Word. The GUI routes `.docx` through Open XML and `.txt` through `TextDocumentInspector`; template and body analysis results remain independent.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Standards rule model
|
||||||
|
|
||||||
|
PDF metadata includes SHA-256, page count, text-layer status and import time. Pages without text are marked `OCR_REQUIRED`; no text is invented. Clause extraction preserves clause number, text, page and confidence.
|
||||||
|
|
||||||
|
Ollama receives only a small clause context and may return a candidate JSON rule. Candidates remain `New` until human approval. Only `Approved`, `Implemented` or `Tested` rules are evaluated. Profiles contain manifest, approved rules, references and a signature hash.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Learned document templates
|
||||||
|
|
||||||
|
DOCX Workbench supports two deterministic workflows:
|
||||||
|
|
||||||
|
1. `TemplateLearningService` normalizes a `.doc` or copies a `.docx` into a temporary working directory, inspects it, adds a safe `{{DOC_BODY}}` insertion marker to the working copy, and writes a portable `.dtemplate` ZIP package.
|
||||||
|
2. `TemplateDocumentGenerator` opens the package, replaces explicitly supplied scalar tokens, imports a `.doc`, `.docx`, or `.txt` body through the existing main-story importer, and creates DOCX, PDF, generation, and validation outputs.
|
||||||
|
|
||||||
|
The package contains `manifest.json`, `template.docx`, source metadata, page archetypes, regions, slots, field bindings, mapping suggestions, and a validation profile. It contains no original source binary unless it is the normalized template copy.
|
||||||
|
|
||||||
|
All Word automation is late-bound and serialized through the existing STA queue. Binary `.doc` sources are opened read-only, macros are disabled through Word automation security, and the source SHA-256 is checked before and after normalization. The source body’s headers, footers, section properties, and page setup are excluded by `DocxBodyImporter`.
|
||||||
|
|
||||||
|
The current UI exposes three modes: template learning, document generation, and the existing quick `DOC_BODY` path. Page archetypes and slot proposals are deterministic suggestions and require later user confirmation; Ollama is not required for the workflow.
|
||||||
|
|
||||||
|
Known limitation: the first slice stores the learned structural model and default slots, but does not yet provide a pixel-level page editor or automatic extraction of every scalar field from an arbitrary engineering drawing. Those operations remain explicit user mapping work.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Word COM lifecycle
|
||||||
|
|
||||||
|
Word is resolved late-bound through `Word.Application`; the Word PIA and `office.dll` are not required at application load time. Each service owns one serial `StaWordQueue`, and every Word job runs on its dedicated STA thread with `Visible=false` and alerts disabled. The service opens a working copy, performs one operation, updates fields, repaginates, saves, closes the Document, quits the Application, and releases owned COM proxies in `finally`.
|
||||||
|
|
||||||
|
The prototype does not run as a Windows Service, does not kill unrelated `WINWORD.EXE` processes, and does not execute macros. Integration tests compare process IDs before and after each job and verify that no newly-created Word process remains.
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Samples
|
||||||
|
|
||||||
|
Реальные проектные DOCX/PDF и нормативные документы сюда не добавляются. Тесты создают синтетические документы во временном каталоге. Для локальной проверки укажите входные файлы через GUI.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,171 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace DocumentAutomation.Shared;
|
||||||
|
|
||||||
|
public sealed record InspectionWarning
|
||||||
|
{
|
||||||
|
public required string Code { get; init; }
|
||||||
|
public required string Message { get; init; }
|
||||||
|
public string? Part { get; init; }
|
||||||
|
public string? Location { get; init; }
|
||||||
|
public string? MatchedValue { get; init; }
|
||||||
|
public string? DetectionRule { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record DocumentFieldInfo
|
||||||
|
{
|
||||||
|
public required string Type { get; init; }
|
||||||
|
public required string Part { get; init; }
|
||||||
|
public int? Section { get; init; }
|
||||||
|
public string? Instruction { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record DocumentImageSummary
|
||||||
|
{
|
||||||
|
public int RasterImages { get; init; }
|
||||||
|
public int DrawingObjects { get; init; }
|
||||||
|
public int VmlShapes { get; init; }
|
||||||
|
public int ExternalImages { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record DocumentStyleInfo
|
||||||
|
{
|
||||||
|
public required string StyleId { get; init; }
|
||||||
|
public string? Name { get; init; }
|
||||||
|
public string? Type { get; init; }
|
||||||
|
public bool IsDefault { get; init; }
|
||||||
|
public string? BasedOn { get; init; }
|
||||||
|
public string? LinkedStyle { get; init; }
|
||||||
|
public int UsageCount { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record SectionPartAssignment
|
||||||
|
{
|
||||||
|
public required int Section { get; init; }
|
||||||
|
public IReadOnlyList<string> Headers { get; init; } = [];
|
||||||
|
public IReadOnlyList<string> Footers { get; init; } = [];
|
||||||
|
public bool LinkToPrevious { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record InsertionPointInfo
|
||||||
|
{
|
||||||
|
public required string Type { get; init; }
|
||||||
|
public string? Location { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum SectionBreakPolicy { Remove, ConvertToParagraph, ConvertToPageBreak }
|
||||||
|
public enum RevisionImportPolicy { PreserveAndWarn, AcceptAll, RejectAll, BlockImport }
|
||||||
|
public enum CommentImportPolicy { PreserveAndWarn, Exclude, BlockImport }
|
||||||
|
public enum StyleConflictPolicy { KeepSourceFormatting, UseDestinationStyles, MapKnownStyles }
|
||||||
|
|
||||||
|
public sealed record WordOperationProgress
|
||||||
|
{
|
||||||
|
public required string Stage { get; init; }
|
||||||
|
public string? Message { get; init; }
|
||||||
|
public int? Percent { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record BodyImportPlan
|
||||||
|
{
|
||||||
|
public required int ParagraphCount { get; init; }
|
||||||
|
public required int TableCount { get; init; }
|
||||||
|
public required int InlineShapeCount { get; init; }
|
||||||
|
public required int FloatingShapeCount { get; init; }
|
||||||
|
public required int InternalSectionBreakCount { get; init; }
|
||||||
|
public required int PageBreakCount { get; init; }
|
||||||
|
public required IReadOnlyList<string> IncludedStories { get; init; }
|
||||||
|
public required IReadOnlyList<string> ExcludedStories { get; init; }
|
||||||
|
public required IReadOnlyList<string> Warnings { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record DocxBodyImportRequest
|
||||||
|
{
|
||||||
|
public required string SourcePath { get; init; }
|
||||||
|
public required object DestinationRangeHandle { get; init; }
|
||||||
|
public SectionBreakPolicy SectionBreakPolicy { get; init; } = SectionBreakPolicy.ConvertToPageBreak;
|
||||||
|
public RevisionImportPolicy RevisionPolicy { get; init; } = RevisionImportPolicy.PreserveAndWarn;
|
||||||
|
public CommentImportPolicy CommentPolicy { get; init; } = CommentImportPolicy.Exclude;
|
||||||
|
public StyleConflictPolicy StyleConflictPolicy { get; init; } = StyleConflictPolicy.KeepSourceFormatting;
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record BodyImportResult
|
||||||
|
{
|
||||||
|
public required BodyImportPlan Plan { get; init; }
|
||||||
|
public required string InsertionMode { get; init; }
|
||||||
|
public required IReadOnlyList<string> Warnings { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record DocumentInspectionResult
|
||||||
|
{
|
||||||
|
public required string FilePath { get; init; }
|
||||||
|
public long FileSize { get; init; }
|
||||||
|
public DateTime LastWriteTimeUtc { get; init; }
|
||||||
|
public int Sections { get; init; }
|
||||||
|
public int Paragraphs { get; init; }
|
||||||
|
public int Tables { get; init; }
|
||||||
|
public int Images { get; init; }
|
||||||
|
public DocumentImageSummary ImageSummary { get; init; } = new();
|
||||||
|
public int Headers { get; init; }
|
||||||
|
public int Footers { get; init; }
|
||||||
|
public bool HasPageFields { get; init; }
|
||||||
|
public bool HasNumPagesFields { get; init; }
|
||||||
|
public bool HasSectionPagesFields { get; init; }
|
||||||
|
public IReadOnlyList<DocumentFieldInfo> Fields { get; init; } = [];
|
||||||
|
public int Bookmarks { get; init; }
|
||||||
|
public int ContentControls { get; init; }
|
||||||
|
public int Comments { get; init; }
|
||||||
|
public bool HasTrackedChanges { get; init; }
|
||||||
|
public bool HasProtectedParts { get; init; }
|
||||||
|
public IReadOnlyList<DocumentStyleInfo> StyleDetails { get; init; } = [];
|
||||||
|
public IReadOnlyList<SectionPartAssignment> SectionAssignments { get; init; } = [];
|
||||||
|
public InsertionPointInfo InsertionPoint { get; init; } = new() { Type = "None" };
|
||||||
|
public BodyImportPlan? BodyImportPlan { get; init; }
|
||||||
|
public IReadOnlyList<InspectionWarning> Warnings { get; init; } = [];
|
||||||
|
public IReadOnlyList<string> Styles => StyleDetails.Select(x => x.StyleId).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record WordDocumentBuildRequest
|
||||||
|
{
|
||||||
|
public required string TemplatePath { get; init; }
|
||||||
|
public required string BodyPath { get; init; }
|
||||||
|
public required string OutputDocxPath { get; init; }
|
||||||
|
public string? RulesProfilePath { get; init; }
|
||||||
|
public bool PreserveBodyFormatting { get; init; } = true;
|
||||||
|
public bool PreservePageBreaks { get; init; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record WordDocumentResult
|
||||||
|
{
|
||||||
|
public required string OutputDocxPath { get; init; }
|
||||||
|
public string? OutputPdfPath { get; init; }
|
||||||
|
public required string LogPath { get; init; }
|
||||||
|
public required TimeSpan Duration { get; init; }
|
||||||
|
public required string InsertionPoint { get; init; }
|
||||||
|
public BodyImportResult? BodyImport { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record WordPreviewResult
|
||||||
|
{
|
||||||
|
public required string PdfPath { get; init; }
|
||||||
|
public required TimeSpan Duration { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum RuleEvaluationStatus { Pass, Fail, NotApplicable, NeedsReview, Error }
|
||||||
|
|
||||||
|
public sealed record RuleEvaluationResult
|
||||||
|
{
|
||||||
|
public required string RuleId { get; init; }
|
||||||
|
public required RuleEvaluationStatus Status { get; init; }
|
||||||
|
public required string Message { get; init; }
|
||||||
|
public string? ClauseId { get; init; }
|
||||||
|
public int? SourcePage { get; init; }
|
||||||
|
public string? DocumentLocation { get; init; }
|
||||||
|
public bool CanAutoFix { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record OllamaSettings
|
||||||
|
{
|
||||||
|
public string BaseUrl { get; init; } = "http://192.168.200.112:11434";
|
||||||
|
public string Model { get; init; } = "";
|
||||||
|
public int TimeoutSeconds { get; init; } = 120;
|
||||||
|
}
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
namespace DocumentAutomation.Shared;
|
||||||
|
|
||||||
|
public enum TemplateSlotKind { PlainText, RichText, MainBody, Table, RepeatingTableRows, Image, Signature, Date, DocumentField }
|
||||||
|
public enum TemplateRegionKind { Fixed, Variable, Repeating, Ignored }
|
||||||
|
|
||||||
|
public sealed record TemplateSlotOccurrence
|
||||||
|
{
|
||||||
|
public required string Location { get; init; }
|
||||||
|
public int? Page { get; init; }
|
||||||
|
public string? Story { get; init; }
|
||||||
|
public string? XPath { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record TemplateSlot
|
||||||
|
{
|
||||||
|
public required string Id { get; init; }
|
||||||
|
public required string Name { get; init; }
|
||||||
|
public required TemplateSlotKind Kind { get; init; }
|
||||||
|
public required string ContentControlTag { get; init; }
|
||||||
|
public bool IsRequired { get; init; }
|
||||||
|
public bool IsRepeating { get; init; }
|
||||||
|
public string? PageArchetypeId { get; init; }
|
||||||
|
public string? RepeatGroup { get; init; }
|
||||||
|
public required IReadOnlyList<TemplateSlotOccurrence> Occurrences { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record FixedRegion
|
||||||
|
{
|
||||||
|
public required string Id { get; init; }
|
||||||
|
public required string Name { get; init; }
|
||||||
|
public required TemplateRegionKind Kind { get; init; }
|
||||||
|
public required IReadOnlyList<int> Pages { get; init; }
|
||||||
|
public required string Fingerprint { get; init; }
|
||||||
|
public string? Story { get; init; }
|
||||||
|
public string? Location { get; init; }
|
||||||
|
public double Confidence { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record RepeatingRegion
|
||||||
|
{
|
||||||
|
public required string Id { get; init; }
|
||||||
|
public required string Name { get; init; }
|
||||||
|
public required IReadOnlyList<int> Pages { get; init; }
|
||||||
|
public required string Fingerprint { get; init; }
|
||||||
|
public required TemplateRegionKind Kind { get; init; }
|
||||||
|
public string? Location { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record PageArchetype
|
||||||
|
{
|
||||||
|
public required string Id { get; init; }
|
||||||
|
public required string Name { get; init; }
|
||||||
|
public bool IsFirstPage { get; init; }
|
||||||
|
public bool IsRepeating { get; init; }
|
||||||
|
public required IReadOnlyList<int> ExamplePages { get; init; }
|
||||||
|
public required IReadOnlyList<string> FixedRegionIds { get; init; }
|
||||||
|
public required IReadOnlyList<string> SlotIds { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record TemplateFieldBinding
|
||||||
|
{
|
||||||
|
public required string SourceField { get; init; }
|
||||||
|
public required string TargetSlot { get; init; }
|
||||||
|
public required string Scope { get; init; }
|
||||||
|
public string? SourceStyle { get; init; }
|
||||||
|
public string? TargetStyle { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record SourceDocumentStructure
|
||||||
|
{
|
||||||
|
public required string SourcePath { get; init; }
|
||||||
|
public required string Sha256 { get; init; }
|
||||||
|
public required string NormalizedPath { get; init; }
|
||||||
|
public required string NormalizedSha256 { get; init; }
|
||||||
|
public required int PageCount { get; init; }
|
||||||
|
public required int SectionCount { get; init; }
|
||||||
|
public required IReadOnlyList<string> Stories { get; init; }
|
||||||
|
public required IReadOnlyList<string> RepeatedFingerprints { get; init; }
|
||||||
|
public required DocumentInspectionResult Inspection { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record TemplateLearningSuggestion
|
||||||
|
{
|
||||||
|
public required string SuggestionType { get; init; }
|
||||||
|
public required string SourceLocation { get; init; }
|
||||||
|
public string? TargetSlot { get; init; }
|
||||||
|
public string? ProposedName { get; init; }
|
||||||
|
public double Confidence { get; init; }
|
||||||
|
public required string Reason { get; init; }
|
||||||
|
public bool RequiresConfirmation { get; init; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record LearnedTemplate
|
||||||
|
{
|
||||||
|
public required string TemplateId { get; init; }
|
||||||
|
public required string Name { get; init; }
|
||||||
|
public required string SourceFileName { get; init; }
|
||||||
|
public required string SourceSha256 { get; init; }
|
||||||
|
public required string NormalizedSha256 { get; init; }
|
||||||
|
public required string CreatedAt { get; init; }
|
||||||
|
public string MinimumEngineVersion { get; init; } = "1.0";
|
||||||
|
public required SourceDocumentStructure Source { get; init; }
|
||||||
|
public required IReadOnlyList<PageArchetype> PageArchetypes { get; init; }
|
||||||
|
public required IReadOnlyList<FixedRegion> FixedRegions { get; init; }
|
||||||
|
public required IReadOnlyList<RepeatingRegion> RepeatingRegions { get; init; }
|
||||||
|
public required IReadOnlyList<TemplateSlot> Slots { get; init; }
|
||||||
|
public required IReadOnlyList<TemplateFieldBinding> FieldBindings { get; init; }
|
||||||
|
public required IReadOnlyList<TemplateLearningSuggestion> Suggestions { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record DocumentNormalizationRequest
|
||||||
|
{
|
||||||
|
public required string SourcePath { get; init; }
|
||||||
|
public required string WorkingDirectory { get; init; }
|
||||||
|
public bool OpenReadOnly { get; init; } = true;
|
||||||
|
public bool DisableMacros { get; init; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record DocumentNormalizationResult
|
||||||
|
{
|
||||||
|
public required string SourcePath { get; init; }
|
||||||
|
public required string NormalizedPath { get; init; }
|
||||||
|
public required string SourceSha256 { get; init; }
|
||||||
|
public required string NormalizedSha256 { get; init; }
|
||||||
|
public required bool WasConverted { get; init; }
|
||||||
|
public required TimeSpan Duration { get; init; }
|
||||||
|
public int? PageCount { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record TemplateLearningRequest
|
||||||
|
{
|
||||||
|
public required string SourcePath { get; init; }
|
||||||
|
public required string TemplateName { get; init; }
|
||||||
|
public required string OutputPackagePath { get; init; }
|
||||||
|
public bool CreateDefaultSlots { get; init; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record TemplateGenerationRequest
|
||||||
|
{
|
||||||
|
public required string TemplatePackagePath { get; init; }
|
||||||
|
public required string ContentSourcePath { get; init; }
|
||||||
|
public required string OutputDocxPath { get; init; }
|
||||||
|
public IReadOnlyDictionary<string, string> ScalarValues { get; init; } = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record TemplateGenerationResult
|
||||||
|
{
|
||||||
|
public required string OutputDocxPath { get; init; }
|
||||||
|
public required string OutputPdfPath { get; init; }
|
||||||
|
public required string GenerationLogPath { get; init; }
|
||||||
|
public required string ValidationLogPath { get; init; }
|
||||||
|
public required IReadOnlyList<RuleEvaluationResult> Validation { get; init; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
|
||||||
|
<ProjectReference Include="..\DocxWorkbench.Core\DocxWorkbench.Core.csproj" />
|
||||||
|
<ProjectReference Include="..\DocxWorkbench.OpenXml\DocxWorkbench.OpenXml.csproj" />
|
||||||
|
<ProjectReference Include="..\DocxWorkbench.WordInterop\DocxWorkbench.WordInterop.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.Text.Json;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocxWorkbench.Core;
|
||||||
|
using DocxWorkbench.OpenXml;
|
||||||
|
using DocxWorkbench.WordInterop;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.App;
|
||||||
|
|
||||||
|
public sealed class MainForm : Form
|
||||||
|
{
|
||||||
|
private readonly ComboBox _mode = new() { DropDownStyle = ComboBoxStyle.DropDownList, Width = 230 };
|
||||||
|
private readonly TextBox _template = new() { Width = 560 };
|
||||||
|
private readonly TextBox _body = new() { Width = 560 };
|
||||||
|
private readonly TextBox _package = new() { Width = 560 };
|
||||||
|
private readonly TextBox _templateName = new() { Width = 560, Text = "Learned document template" };
|
||||||
|
private readonly TextBox _output = new() { Width = 560 };
|
||||||
|
private readonly RichTextBox _structure = new() { Dock = DockStyle.Fill, ReadOnly = true };
|
||||||
|
private readonly RichTextBox _preview = new() { Dock = DockStyle.Fill, ReadOnly = true };
|
||||||
|
private readonly TextBox _log = new() { Multiline = true, ScrollBars = ScrollBars.Vertical, Dock = DockStyle.Fill, ReadOnly = true };
|
||||||
|
private readonly TextBox _technicalError = new() { Multiline = true, ScrollBars = ScrollBars.Vertical, Dock = DockStyle.Fill, ReadOnly = true };
|
||||||
|
private readonly Label _status = new() { AutoSize = true, Text = "Ready" };
|
||||||
|
private readonly Button _analyze; private readonly Button _learn; private readonly Button _generate; private readonly Button _build; private readonly Button _validate; private readonly Button _openDocx; private readonly Button _openPdf;
|
||||||
|
private readonly WorkbenchStateController _state = new();
|
||||||
|
private readonly IDocumentInspector _docx = new OpenXmlDocumentInspector(); private readonly IDocumentInspector _txt = new TextDocumentInspector(); private readonly IWordDocumentService _word = new WordDocumentService();
|
||||||
|
private DocumentInspectionResult? _templateResult; private DocumentInspectionResult? _bodyResult; private string? _builtDocx; private string? _builtPdf;
|
||||||
|
|
||||||
|
public MainForm()
|
||||||
|
{
|
||||||
|
Text = "DOCX Workbench"; Width = 1200; Height = 780; StartPosition = FormStartPosition.CenterScreen;
|
||||||
|
_mode.Items.AddRange(["Template learning", "Document generation", "Quick DOC_BODY"]); _mode.SelectedIndex = 2; _mode.SelectedIndexChanged += (_, _) => RefreshButtons();
|
||||||
|
var grid = new TableLayoutPanel { Dock = DockStyle.Top, Height = 245, ColumnCount = 3, RowCount = 7, Padding = new Padding(8) }; grid.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 155)); grid.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100)); grid.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 110));
|
||||||
|
AddControlRow(grid, 0, "Mode", _mode, null); AddControlRow(grid, 1, "Template DOC/DOCX", _template, BrowseTemplate); AddControlRow(grid, 2, "Template name", _templateName, null); AddControlRow(grid, 3, "Content DOC/DOCX/TXT", _body, BrowseBody); AddControlRow(grid, 4, "Package .dtemplate", _package, BrowsePackage); AddControlRow(grid, 5, "Output DOCX", _output, BrowseOutput);
|
||||||
|
var buttons = new FlowLayoutPanel { Dock = DockStyle.Fill }; _analyze = Button("Analyze", async (_, _) => await AnalyzeAsync()); _learn = Button("Learn template", async (_, _) => await LearnAsync()); _generate = Button("Generate", async (_, _) => await GenerateAsync()); _build = Button("Quick build", async (_, _) => await QuickBuildAsync()); _validate = Button("Validate", async (_, _) => await ValidateAsync()); _openDocx = Button("Open DOCX", (_, _) => Open(_builtDocx)); _openPdf = Button("Open PDF", (_, _) => Open(_builtPdf)); buttons.Controls.AddRange([_analyze, _learn, _generate, _build, _validate, _openDocx, _openPdf]); grid.Controls.Add(buttons, 1, 6); grid.SetColumnSpan(buttons, 2);
|
||||||
|
var tabs = new TabControl { Dock = DockStyle.Fill }; AddTab(tabs, "Structure", _structure); AddTab(tabs, "Preview", _preview); AddTab(tabs, "Log", _log); AddTab(tabs, "Technical error", _technicalError); Controls.Add(tabs); Controls.Add(grid); _status.Dock = DockStyle.Bottom; Controls.Add(_status); foreach (var box in new[] { _template, _body, _package, _output }) box.TextChanged += (_, _) => InputsChanged(); FormClosed += (_, _) => (_word as IDisposable)?.Dispose(); RefreshButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddTab(TabControl tabs, string title, Control content) { var tab = new TabPage(title); tab.Controls.Add(content); tabs.TabPages.Add(tab); }
|
||||||
|
private static void AddControlRow(TableLayoutPanel panel, int row, string title, Control control, EventHandler? browse) { panel.Controls.Add(new Label { Text = title, AutoSize = true, Anchor = AnchorStyles.Left }, 0, row); panel.Controls.Add(control, 1, row); if (browse is not null) { var button = new Button { Text = "Browse...", Width = 95 }; button.Click += browse; panel.Controls.Add(button, 2, row); } }
|
||||||
|
private static Button Button(string text, EventHandler handler) { var button = new Button { Text = text, AutoSize = true }; button.Click += handler; return button; }
|
||||||
|
private void BrowseTemplate(object? sender, EventArgs e) { using var dialog = new OpenFileDialog { Filter = "Word document|*.doc;*.docx" }; if (dialog.ShowDialog() == DialogResult.OK) _template.Text = dialog.FileName; }
|
||||||
|
private void BrowseBody(object? sender, EventArgs e) { using var dialog = new OpenFileDialog { Filter = "Word or text|*.doc;*.docx;*.txt" }; if (dialog.ShowDialog() == DialogResult.OK) _body.Text = dialog.FileName; }
|
||||||
|
private void BrowsePackage(object? sender, EventArgs e) { using var dialog = new OpenFileDialog { Filter = "Learned template|*.dtemplate" }; if (dialog.ShowDialog() == DialogResult.OK) _package.Text = dialog.FileName; }
|
||||||
|
private void BrowseOutput(object? sender, EventArgs e) { using var dialog = new SaveFileDialog { Filter = "DOCX|*.docx", DefaultExt = "docx" }; if (dialog.ShowDialog() == DialogResult.OK) _output.Text = dialog.FileName; }
|
||||||
|
|
||||||
|
private async Task LearnAsync()
|
||||||
|
{
|
||||||
|
try { _status.Text = "Learning template..."; using var normalizer = new WordDocumentNormalizer(); var service = new TemplateLearningService(normalizer, new TemplatePackageStore(), _docx); var learned = await service.LearnAsync(new TemplateLearningRequest { SourcePath = _template.Text, TemplateName = _templateName.Text, OutputPackagePath = _package.Text }, null, CancellationToken.None); _structure.Text = JsonSerializer.Serialize(learned, new JsonSerializerOptions { WriteIndented = true }); AppendLog($"Template package created: {_package.Text}"); _status.Text = "Template learned"; } catch (Exception ex) { ShowError(ex, "Template learning failed"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task GenerateAsync()
|
||||||
|
{
|
||||||
|
try { _status.Text = "Generating..."; using var normalizer = new WordDocumentNormalizer(); using var generator = new TemplateDocumentGenerator(new TemplatePackageStore(), normalizer, _docx); var result = await generator.GenerateAsync(new TemplateGenerationRequest { TemplatePackagePath = _package.Text, ContentSourcePath = _body.Text, OutputDocxPath = _output.Text }, null, CancellationToken.None); _builtDocx = result.OutputDocxPath; _builtPdf = result.OutputPdfPath; _preview.Text = JsonSerializer.Serialize(result.Validation, new JsonSerializerOptions { WriteIndented = true }); AppendLog(JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true })); _status.Text = "Generation succeeded"; } catch (Exception ex) { ShowError(ex, "Generation failed"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task AnalyzeAsync()
|
||||||
|
{
|
||||||
|
_status.Text = "Analyzing..."; var template = await InspectPathAsync(_template.Text); var body = await InspectPathAsync(_body.Text); _templateResult = template.Result; _bodyResult = body.Result; if (_templateResult is not null) ShowStructure(_templateResult); if (_bodyResult is not null) _preview.Text = _body.Text.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) ? File.ReadAllText(_body.Text) : JsonSerializer.Serialize(_bodyResult, new JsonSerializerOptions { WriteIndented = true }); LogInspection("Template", template); LogInspection("Body", body); _state.InputsSelected(template.Result is not null && body.Result is not null); _state.AnalysisCompleted(template.Result is not null, body.Result is not null, template.Result?.InsertionPoint.Type != "None"); _status.Text = _state.State == WorkbenchState.ReadyToBuild ? "Ready" : "Analysis completed with warnings"; RefreshButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task<(DocumentInspectionResult? Result, Exception? Error, string Inspector)> InspectPathAsync(string path) => Task.Run(() => { try { if (path.EndsWith(".docx", StringComparison.OrdinalIgnoreCase)) return (_docx.Inspect(path), (Exception?)null, "OpenXmlDocumentInspector"); if (path.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) return (_txt.Inspect(path), (Exception?)null, "TextDocumentInspector"); throw new UnsupportedDocumentFormatException($"Unsupported format {Path.GetExtension(path)}. Use DOC/DOCX/TXT or normalize DOC first."); } catch (Exception ex) { return ((DocumentInspectionResult?)null, ex, "format-router"); } });
|
||||||
|
private async Task QuickBuildAsync() { if (!_state.CanBuild) { await AnalyzeAsync(); if (!_state.CanBuild) return; } _state.BeginBuild(); RefreshButtons(); try { var result = await _word.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = _template.Text, BodyPath = _body.Text, OutputDocxPath = _output.Text }, null, CancellationToken.None); var pdf = await _word.ExportPdfAsync(result.OutputDocxPath, Path.ChangeExtension(result.OutputDocxPath, ".pdf"), CancellationToken.None); _builtDocx = result.OutputDocxPath; _builtPdf = pdf.PdfPath; _state.BuildSucceeded(); AppendLog(JsonSerializer.Serialize(new { result, pdf }, new JsonSerializerOptions { WriteIndented = true })); _status.Text = "Quick build succeeded"; } catch (Exception ex) { _state.BuildFailed(); ShowError(ex, "Build failed"); } finally { RefreshButtons(); } }
|
||||||
|
private async Task ValidateAsync() { if (!_state.CanValidate || _builtDocx is null || !File.Exists(_builtDocx)) return; try { var result = await Task.Run(() => _docx.Inspect(_builtDocx)); AppendLog(JsonSerializer.Serialize(new { label = "Output", result }, new JsonSerializerOptions { WriteIndented = true })); _status.Text = "Validation succeeded"; } catch (Exception ex) { ShowError(ex, "Validation failed"); } }
|
||||||
|
private void ShowStructure(DocumentInspectionResult result) => _structure.Text = JsonSerializer.Serialize(new { result.FilePath, result.Sections, result.Paragraphs, result.Tables, result.Headers, result.Footers, result.Fields, result.ImageSummary, result.SectionAssignments, result.StyleDetails, result.Warnings }, new JsonSerializerOptions { WriteIndented = true });
|
||||||
|
private void LogInspection(string label, (DocumentInspectionResult? Result, Exception? Error, string Inspector) value) { AppendLog(JsonSerializer.Serialize(new { label, inspector = value.Inspector, result = value.Result, error = value.Error?.Message }, new JsonSerializerOptions { WriteIndented = true })); if (value.Error is not null) _technicalError.Text = value.Error.Message; }
|
||||||
|
private void InputsChanged() { _builtDocx = null; _builtPdf = null; RefreshButtons(); }
|
||||||
|
private void RefreshButtons() { var mode = _mode.SelectedIndex; var templateSupported = _template.Text.EndsWith(".doc", StringComparison.OrdinalIgnoreCase) || _template.Text.EndsWith(".docx", StringComparison.OrdinalIgnoreCase); _analyze.Enabled = mode != 1 && File.Exists(_template.Text) && File.Exists(_body.Text); _learn.Enabled = mode == 0 && templateSupported && File.Exists(_template.Text) && !string.IsNullOrWhiteSpace(_package.Text); _generate.Enabled = mode == 1 && File.Exists(_package.Text) && File.Exists(_body.Text) && !string.IsNullOrWhiteSpace(_output.Text); _build.Enabled = mode == 2 && _state.CanBuild; _validate.Enabled = _state.CanValidate && _builtDocx is not null && File.Exists(_builtDocx); _openDocx.Enabled = _builtDocx is not null && File.Exists(_builtDocx); _openPdf.Enabled = _builtPdf is not null && File.Exists(_builtPdf); }
|
||||||
|
private void ShowError(Exception ex, string title) { _technicalError.Text = ex.ToString(); AppendLog(title + ": " + ex.Message); _status.Text = title; MessageBox.Show(ex.Message, title, MessageBoxButtons.OK, MessageBoxIcon.Error); }
|
||||||
|
private void AppendLog(string text) => _log.AppendText(text + Environment.NewLine);
|
||||||
|
private static void Open(string? path) { if (!string.IsNullOrWhiteSpace(path) && File.Exists(path)) Process.Start(new ProcessStartInfo(path) { UseShellExecute = true }); }
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
namespace DocxWorkbench.App;
|
||||||
|
|
||||||
|
static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
// To customize application configuration such as set high DPI settings or default font,
|
||||||
|
// see https://aka.ms/applicationconfiguration.
|
||||||
|
ApplicationConfiguration.Initialize();
|
||||||
|
Application.Run(new MainForm());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
using DocumentAutomation.Shared;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.Core;
|
||||||
|
|
||||||
|
public interface IDocumentInspector
|
||||||
|
{
|
||||||
|
DocumentInspectionResult Inspect(string docxPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class UnsupportedDocumentFormatException(string message) : InvalidOperationException(message);
|
||||||
|
|
||||||
|
public enum WorkbenchState { Empty, InputsSelected, Analyzed, ReadyToBuild, Building, BuildSucceeded, BuildFailed, Validating, ValidationSucceeded, ValidationFailed }
|
||||||
|
|
||||||
|
public sealed class WorkbenchStateController
|
||||||
|
{
|
||||||
|
public WorkbenchState State { get; private set; } = WorkbenchState.Empty;
|
||||||
|
public bool CanBuild => State == WorkbenchState.ReadyToBuild;
|
||||||
|
public bool CanValidate => State == WorkbenchState.BuildSucceeded;
|
||||||
|
public bool CanOpenDocx { get; private set; }
|
||||||
|
public bool CanOpenPdf { get; private set; }
|
||||||
|
public void InputsSelected(bool selected) { State = selected ? WorkbenchState.InputsSelected : WorkbenchState.Empty; if (!selected) ClearArtifacts(); }
|
||||||
|
public void AnalysisCompleted(bool templateOk, bool bodyOk, bool insertionPointFound) { State = templateOk && bodyOk && insertionPointFound ? WorkbenchState.ReadyToBuild : WorkbenchState.Analyzed; ClearArtifacts(); }
|
||||||
|
public void BeginBuild() { if (!CanBuild) throw new InvalidOperationException("Build is unavailable in the current state."); State = WorkbenchState.Building; ClearArtifacts(); }
|
||||||
|
public void BuildSucceeded() { State = WorkbenchState.BuildSucceeded; CanOpenDocx = true; CanOpenPdf = true; }
|
||||||
|
public void BuildFailed() { State = WorkbenchState.BuildFailed; ClearArtifacts(); }
|
||||||
|
public void BeginValidation() { if (!CanValidate) throw new InvalidOperationException("Validation is available only after a successful build."); State = WorkbenchState.Validating; }
|
||||||
|
public void ValidationCompleted(bool success) => State = success ? WorkbenchState.ValidationSucceeded : WorkbenchState.ValidationFailed;
|
||||||
|
private void ClearArtifacts() { CanOpenDocx = false; CanOpenPdf = false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IWordDocumentService
|
||||||
|
{
|
||||||
|
Task<WordDocumentResult> BuildDocumentAsync(WordDocumentBuildRequest request, IProgress<string>? progress, CancellationToken cancellationToken);
|
||||||
|
Task<WordPreviewResult> ExportPdfAsync(string docxPath, string outputPdfPath, CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IDocxBodyImporter
|
||||||
|
{
|
||||||
|
Task<BodyImportResult> ImportAsync(DocxBodyImportRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IWordDocumentNormalizer
|
||||||
|
{
|
||||||
|
Task<DocumentNormalizationResult> NormalizeAsync(DocumentNormalizationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ITemplateLearningService
|
||||||
|
{
|
||||||
|
Task<LearnedTemplate> LearnAsync(TemplateLearningRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ITemplatePackageStore
|
||||||
|
{
|
||||||
|
void Save(string packagePath, LearnedTemplate template, string normalizedDocxPath);
|
||||||
|
(LearnedTemplate Template, string TemplateDocxPath, string WorkingDirectory) Open(string packagePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ITemplateDocumentGenerator
|
||||||
|
{
|
||||||
|
Task<TemplateGenerationResult> GenerateAsync(TemplateGenerationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DocumentInputValidation
|
||||||
|
{
|
||||||
|
public static void Validate(WordDocumentBuildRequest request)
|
||||||
|
{
|
||||||
|
if (!File.Exists(request.TemplatePath)) throw new FileNotFoundException("Шаблон DOCX не найден.", request.TemplatePath);
|
||||||
|
if (!File.Exists(request.BodyPath)) throw new FileNotFoundException("Файл тела документа не найден.", request.BodyPath);
|
||||||
|
if (!request.TemplatePath.EndsWith(".docx", StringComparison.OrdinalIgnoreCase)) throw new ArgumentException("Шаблон должен быть DOCX.");
|
||||||
|
if (Path.GetFullPath(request.TemplatePath).Equals(Path.GetFullPath(request.OutputDocxPath), StringComparison.OrdinalIgnoreCase)) throw new InvalidOperationException("Нельзя перезаписывать исходный шаблон.");
|
||||||
|
Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(request.OutputDocxPath))!);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocumentFormat.OpenXml;
|
||||||
|
using DocumentFormat.OpenXml.Packaging;
|
||||||
|
using DocumentFormat.OpenXml.Wordprocessing;
|
||||||
|
using DocxWorkbench.Core;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.OpenXml;
|
||||||
|
|
||||||
|
public sealed class OpenXmlDocumentInspector : IDocumentInspector
|
||||||
|
{
|
||||||
|
private static readonly string[] KnownFields = ["PAGE", "NUMPAGES", "SECTIONPAGES", "FILENAME"];
|
||||||
|
|
||||||
|
public DocumentInspectionResult Inspect(string docxPath)
|
||||||
|
{
|
||||||
|
if (!File.Exists(docxPath)) throw new FileNotFoundException("DOCX was not found.", docxPath);
|
||||||
|
if (!docxPath.EndsWith(".docx", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException($"Open XML inspector accepts DOCX only, received {Path.GetExtension(docxPath)}.");
|
||||||
|
var info = new FileInfo(docxPath); using var package = WordprocessingDocument.Open(docxPath, false); var main = package.MainDocumentPart ?? throw new InvalidDataException("The DOCX has no main document part."); var roots = GetRoots(main); var fields = roots.SelectMany(x => FindFields(x.Root, x.Part, x.Section)).ToArray(); var images = CountImages(main, roots);
|
||||||
|
return new DocumentInspectionResult
|
||||||
|
{
|
||||||
|
FilePath = docxPath, FileSize = info.Length, LastWriteTimeUtc = info.LastWriteTimeUtc, Sections = Math.Max(1, main.Document.Descendants<SectionProperties>().Count()), Paragraphs = main.Document.Descendants<Paragraph>().Count(), Tables = main.Document.Descendants<Table>().Count(), Images = images.RasterImages, ImageSummary = images,
|
||||||
|
Headers = main.HeaderParts.Count(), Footers = main.FooterParts.Count(), HasPageFields = fields.Any(x => x.Type == "PAGE"), HasNumPagesFields = fields.Any(x => x.Type == "NUMPAGES"), HasSectionPagesFields = fields.Any(x => x.Type == "SECTIONPAGES"), Fields = fields,
|
||||||
|
Bookmarks = main.Document.Descendants<BookmarkStart>().Count(), ContentControls = main.Document.Descendants<SdtElement>().Count(), Comments = main.GetPartsOfType<WordprocessingCommentsPart>().Count(), HasTrackedChanges = main.Document.Descendants<Inserted>().Any() || main.Document.Descendants<Deleted>().Any(), HasProtectedParts = main.Document.Descendants<DocumentProtection>().Any(),
|
||||||
|
StyleDetails = GetStyles(main), SectionAssignments = GetSectionAssignments(main), InsertionPoint = FindInsertionPoint(main.Document), BodyImportPlan = CreateBodyImportPlan(main), Warnings = FindWarnings(roots)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IReadOnlyList<(OpenXmlPartRootElement Root, string Part, int? Section)> GetRoots(MainDocumentPart main)
|
||||||
|
{
|
||||||
|
var roots = new List<(OpenXmlPartRootElement, string, int?)> { (main.Document, "MainDocumentPart", null) }; roots.AddRange(main.HeaderParts.Select((p, i) => ((OpenXmlPartRootElement)p.Header, $"HeaderPart[{i + 1}]", (int?)null))); roots.AddRange(main.FooterParts.Select((p, i) => ((OpenXmlPartRootElement)p.Footer, $"FooterPart[{i + 1}]", (int?)null))); if (main.DocumentSettingsPart?.Settings is not null) roots.Add((main.DocumentSettingsPart.Settings, "SettingsPart", null)); if (main.FootnotesPart?.Footnotes is not null) roots.Add((main.FootnotesPart.Footnotes, "FootnotesPart", null)); if (main.EndnotesPart?.Endnotes is not null) roots.Add((main.EndnotesPart.Endnotes, "EndnotesPart", null)); foreach (var comments in main.GetPartsOfType<WordprocessingCommentsPart>()) if (comments.Comments is not null) roots.Add((comments.Comments, "CommentsPart", null)); return roots;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<DocumentFieldInfo> FindFields(OpenXmlElement root, string part, int? section)
|
||||||
|
{
|
||||||
|
foreach (var simple in root.Descendants<SimpleField>()) { var type = NormalizeField(simple.Instruction?.Value); if (type is not null) yield return new DocumentFieldInfo { Type = type, Part = part, Section = section, Instruction = simple.Instruction?.Value }; }
|
||||||
|
var active = new List<string>(); foreach (var element in root.Descendants()) { if (element is FieldChar begin && begin.FieldCharType?.Value == FieldCharValues.Begin) active.Add(""); else if (element is FieldCode code && active.Count > 0) active[^1] += " " + code.Text; else if (element is FieldChar end && end.FieldCharType?.Value == FieldCharValues.End && active.Count > 0) { var raw = active[^1]; active.RemoveAt(active.Count - 1); var type = NormalizeField(raw); if (type is not null) yield return new DocumentFieldInfo { Type = type, Part = part, Section = section, Instruction = raw.Trim() }; } }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string? NormalizeField(string? value) { if (string.IsNullOrWhiteSpace(value)) return null; var normalized = Regex.Replace(value, @"\s+", " ").Trim(); var name = Regex.Match(normalized, @"(?i)^(PAGE|NUMPAGES|SECTIONPAGES|FILENAME)\b").Value.ToUpperInvariant(); return KnownFields.Contains(name) ? name : null; }
|
||||||
|
|
||||||
|
private static DocumentImageSummary CountImages(MainDocumentPart main, IReadOnlyList<(OpenXmlPartRootElement Root, string Part, int? Section)> roots)
|
||||||
|
{
|
||||||
|
var imageParts = new HashSet<OpenXmlPart>(); var drawings = roots.Sum(x => x.Root.Descendants<Drawing>().Count()); var shapes = roots.Sum(x => x.Root.Descendants<DocumentFormat.OpenXml.Vml.Shape>().Count()); var external = 0;
|
||||||
|
foreach (var image in main.GetPartsOfType<ImagePart>()) imageParts.Add(image); foreach (var header in main.HeaderParts) { foreach (var image in header.GetPartsOfType<ImagePart>()) imageParts.Add(image); external += header.ExternalRelationships.Count(x => x.Uri?.ToString().Contains("image", StringComparison.OrdinalIgnoreCase) == true); } foreach (var footer in main.FooterParts) { foreach (var image in footer.GetPartsOfType<ImagePart>()) imageParts.Add(image); external += footer.ExternalRelationships.Count(x => x.Uri?.ToString().Contains("image", StringComparison.OrdinalIgnoreCase) == true); }
|
||||||
|
external += main.ExternalRelationships.Count(x => x.Uri?.ToString().Contains("image", StringComparison.OrdinalIgnoreCase) == true); return new DocumentImageSummary { RasterImages = imageParts.Count, DrawingObjects = drawings, VmlShapes = shapes, ExternalImages = external };
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IReadOnlyList<DocumentStyleInfo> GetStyles(MainDocumentPart main)
|
||||||
|
{
|
||||||
|
var usage = main.Document.Descendants<ParagraphStyleId>().GroupBy(x => x.Val?.Value ?? "").ToDictionary(x => x.Key, x => x.Count()); return main.StyleDefinitionsPart?.Styles?.Elements<Style>().Select(style => new DocumentStyleInfo { StyleId = style.StyleId?.Value ?? "", Name = style.StyleName?.Val?.Value, Type = style.Type is null ? null : style.Type.Value.ToString(), IsDefault = style.Default?.Value == true, BasedOn = style.BasedOn?.Val?.Value, UsageCount = usage.GetValueOrDefault(style.StyleId?.Value ?? "") }).Where(x => x.StyleId.Length > 0).ToArray() ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IReadOnlyList<SectionPartAssignment> GetSectionAssignments(MainDocumentPart main)
|
||||||
|
{
|
||||||
|
var result = new List<SectionPartAssignment>(); var sections = main.Document.Body?.Elements<SectionProperties>().ToArray() ?? []; for (var i = 0; i < sections.Length; i++) { var section = sections[i]; var headers = section.Elements<HeaderReference>().Select(x => $"{x.Type?.Value}:{PartName(main, x.Id?.Value)}").ToArray(); var footers = section.Elements<FooterReference>().Select(x => $"{x.Type?.Value}:{PartName(main, x.Id?.Value)}").ToArray(); result.Add(new SectionPartAssignment { Section = i + 1, Headers = headers, Footers = footers, LinkToPrevious = i > 0 && headers.Length == 0 && footers.Length == 0 }); } return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string PartName(MainDocumentPart main, string? id) { if (id is null) return "missing"; try { return main.GetPartById(id).Uri.ToString(); } catch { return "unresolved:" + id; } }
|
||||||
|
private static InsertionPointInfo FindInsertionPoint(Document root) { if (root.Descendants<SdtElement>().Any(x => string.Equals(x.SdtProperties?.GetFirstChild<Tag>()?.Val?.Value, "DOC_BODY", StringComparison.OrdinalIgnoreCase))) return new InsertionPointInfo { Type = "ContentControl", Location = "MainDocumentPart" }; if (root.Descendants<BookmarkStart>().Any(x => string.Equals(x.Name?.Value, "DOC_BODY", StringComparison.OrdinalIgnoreCase))) return new InsertionPointInfo { Type = "Bookmark", Location = "MainDocumentPart" }; if (root.InnerText.Contains("{{DOC_BODY}}", StringComparison.Ordinal)) return new InsertionPointInfo { Type = "TextMarker", Location = "MainDocumentPart" }; return new InsertionPointInfo { Type = "None" }; }
|
||||||
|
private static IReadOnlyList<InspectionWarning> FindWarnings(IReadOnlyList<(OpenXmlPartRootElement Root, string Part, int? Section)> roots) { var result = new List<InspectionWarning>(); foreach (var root in roots) foreach (Match match in Regex.Matches(root.Root.InnerText, @"(?i)\b(2019|legacy|старый)\b")) result.Add(new InspectionWarning { Code = "PossibleLegacyProjectData", Message = "A value matched the legacy-project heuristic.", Part = root.Part, Location = "text", MatchedValue = match.Value, DetectionRule = "word-boundary: 2019|legacy|старый" }); return result; }
|
||||||
|
private static BodyImportPlan CreateBodyImportPlan(MainDocumentPart main)
|
||||||
|
{
|
||||||
|
var body = main.Document.Body; if (body is null) return new BodyImportPlan { ParagraphCount = 0, TableCount = 0, InlineShapeCount = 0, FloatingShapeCount = 0, InternalSectionBreakCount = 0, PageBreakCount = 0, IncludedStories = ["wdMainTextStory"], ExcludedStories = ["wdPrimaryHeaderStory", "wdFirstPageHeaderStory", "wdEvenPagesHeaderStory", "wdPrimaryFooterStory", "wdFirstPageFooterStory", "wdEvenPagesFooterStory"], Warnings = [] };
|
||||||
|
var drawings = body.Descendants<Drawing>(); return new BodyImportPlan { ParagraphCount = body.Descendants<Paragraph>().Count(), TableCount = body.Descendants<Table>().Count(), InlineShapeCount = drawings.Count(x => x.Ancestors<DocumentFormat.OpenXml.Drawing.Wordprocessing.Inline>().Any()), FloatingShapeCount = drawings.Count(x => x.Ancestors<DocumentFormat.OpenXml.Drawing.Wordprocessing.Anchor>().Any()), InternalSectionBreakCount = Math.Max(0, body.Descendants<SectionProperties>().Count() - 1), PageBreakCount = body.Descendants<Break>().Count(x => x.Type?.Value == BreakValues.Page), IncludedStories = ["wdMainTextStory"], ExcludedStories = ["wdPrimaryHeaderStory", "wdFirstPageHeaderStory", "wdEvenPagesHeaderStory", "wdPrimaryFooterStory", "wdFirstPageFooterStory", "wdEvenPagesFooterStory"], Warnings = ["Source headers, footers, page setup and final section properties are excluded."] };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TextDocumentInspector : IDocumentInspector
|
||||||
|
{
|
||||||
|
public DocumentInspectionResult Inspect(string path) { if (!File.Exists(path)) throw new FileNotFoundException("TXT was not found.", path); if (!path.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException($"TXT inspector accepts TXT only, received {Path.GetExtension(path)}."); var info = new FileInfo(path); return new DocumentInspectionResult { FilePath = path, FileSize = info.Length, LastWriteTimeUtc = info.LastWriteTimeUtc, Sections = 1, Paragraphs = File.ReadAllLines(path).Length, InsertionPoint = new InsertionPointInfo { Type = "None" } }; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class DocumentInspector : IDocumentInspector
|
||||||
|
{
|
||||||
|
private readonly OpenXmlDocumentInspector _inner = new();
|
||||||
|
public DocumentInspectionResult Inspect(string docxPath) => _inner.Inspect(docxPath);
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
|
||||||
|
<ProjectReference Include="..\DocxWorkbench.Core\DocxWorkbench.Core.csproj" />
|
||||||
|
<PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
using System.IO.Compression;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text.Json;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocumentFormat.OpenXml.Packaging;
|
||||||
|
using DocumentFormat.OpenXml.Wordprocessing;
|
||||||
|
using DocxWorkbench.Core;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.OpenXml;
|
||||||
|
|
||||||
|
public sealed class TemplatePackageStore : ITemplatePackageStore
|
||||||
|
{
|
||||||
|
private static readonly JsonSerializerOptions JsonOptions = new() { WriteIndented = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
|
||||||
|
|
||||||
|
public void Save(string packagePath, LearnedTemplate template, string normalizedDocxPath)
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(packagePath))!);
|
||||||
|
if (File.Exists(packagePath)) File.Delete(packagePath);
|
||||||
|
using var archive = ZipFile.Open(packagePath, ZipArchiveMode.Create);
|
||||||
|
WriteJson(archive, "manifest.json", new { schemaVersion = "1.0", templateId = template.TemplateId, name = template.Name, sourceFileName = template.SourceFileName, sourceSha256 = template.SourceSha256, normalizedSha256 = template.NormalizedSha256, createdAt = template.CreatedAt, minimumEngineVersion = template.MinimumEngineVersion });
|
||||||
|
WriteJson(archive, "source-metadata.json", template.Source);
|
||||||
|
WriteJson(archive, "page-archetypes.json", template.PageArchetypes);
|
||||||
|
WriteJson(archive, "fixed-regions.json", template.FixedRegions.Concat(template.RepeatingRegions.Select(x => new FixedRegion { Id = x.Id, Name = x.Name, Kind = x.Kind, Pages = x.Pages, Fingerprint = x.Fingerprint, Location = x.Location })).ToArray());
|
||||||
|
WriteJson(archive, "slots.json", template.Slots);
|
||||||
|
WriteJson(archive, "field-bindings.json", template.FieldBindings);
|
||||||
|
WriteJson(archive, "mapping-rules.json", template.Suggestions);
|
||||||
|
WriteJson(archive, "validation-profile.json", new { schemaVersion = "1.0", requiredSlots = template.Slots.Where(x => x.IsRequired).Select(x => x.ContentControlTag).ToArray(), allowTrackedChanges = false, allowExternalLinks = false });
|
||||||
|
var entry = archive.CreateEntry("template.docx", CompressionLevel.Optimal); using var input = File.OpenRead(normalizedDocxPath); using var output = entry.Open(); input.CopyTo(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
public (LearnedTemplate Template, string TemplateDocxPath, string WorkingDirectory) Open(string packagePath)
|
||||||
|
{
|
||||||
|
if (!File.Exists(packagePath)) throw new FileNotFoundException("Template package was not found.", packagePath);
|
||||||
|
var work = Path.Combine(Path.GetTempPath(), "DocumentAutomation", "template-" + Guid.NewGuid().ToString("N")); Directory.CreateDirectory(work); ZipFile.ExtractToDirectory(packagePath, work);
|
||||||
|
var manifest = ReadJson<Manifest>(Path.Combine(work, "manifest.json")); if (manifest.SchemaVersion != "1.0") throw new InvalidDataException($"Unsupported template schema: {manifest.SchemaVersion}");
|
||||||
|
var template = new LearnedTemplate { TemplateId = manifest.TemplateId, Name = manifest.Name, SourceFileName = manifest.SourceFileName, SourceSha256 = manifest.SourceSha256, NormalizedSha256 = manifest.NormalizedSha256, CreatedAt = manifest.CreatedAt, MinimumEngineVersion = manifest.MinimumEngineVersion, Source = ReadJson<SourceDocumentStructure>(Path.Combine(work, "source-metadata.json")), PageArchetypes = ReadJson<List<PageArchetype>>(Path.Combine(work, "page-archetypes.json")), FixedRegions = ReadJson<List<FixedRegion>>(Path.Combine(work, "fixed-regions.json")).Where(x => x.Kind != TemplateRegionKind.Repeating).ToArray(), RepeatingRegions = ReadJson<List<FixedRegion>>(Path.Combine(work, "fixed-regions.json")).Where(x => x.Kind == TemplateRegionKind.Repeating).Select(x => new RepeatingRegion { Id = x.Id, Name = x.Name, Pages = x.Pages, Fingerprint = x.Fingerprint, Kind = x.Kind, Location = x.Location }).ToArray(), Slots = ReadJson<List<TemplateSlot>>(Path.Combine(work, "slots.json")), FieldBindings = ReadJson<List<TemplateFieldBinding>>(Path.Combine(work, "field-bindings.json")), Suggestions = ReadJson<List<TemplateLearningSuggestion>>(Path.Combine(work, "mapping-rules.json")) };
|
||||||
|
var docx = Path.Combine(work, "template.docx"); if (!File.Exists(docx)) throw new InvalidDataException("Template package does not contain template.docx."); return (template, docx, work);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void WriteJson<T>(ZipArchive archive, string name, T value) { var entry = archive.CreateEntry(name, CompressionLevel.Optimal); using var writer = new StreamWriter(entry.Open()); writer.Write(JsonSerializer.Serialize(value, JsonOptions)); }
|
||||||
|
private static T ReadJson<T>(string path) => JsonSerializer.Deserialize<T>(File.ReadAllText(path), JsonOptions) ?? throw new InvalidDataException($"Invalid template package entry: {Path.GetFileName(path)}");
|
||||||
|
private sealed record Manifest(string SchemaVersion, string TemplateId, string Name, string SourceFileName, string SourceSha256, string NormalizedSha256, string CreatedAt, string MinimumEngineVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TemplateLearningService : ITemplateLearningService
|
||||||
|
{
|
||||||
|
private readonly IWordDocumentNormalizer _normalizer;
|
||||||
|
private readonly ITemplatePackageStore _packages;
|
||||||
|
private readonly IDocumentInspector _inspector;
|
||||||
|
public TemplateLearningService(IWordDocumentNormalizer normalizer, ITemplatePackageStore packages, IDocumentInspector? inspector = null) { _normalizer = normalizer; _packages = packages; _inspector = inspector ?? new OpenXmlDocumentInspector(); }
|
||||||
|
|
||||||
|
public async Task<LearnedTemplate> LearnAsync(TemplateLearningRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
if (!File.Exists(request.SourcePath)) throw new FileNotFoundException("Template source was not found.", request.SourcePath);
|
||||||
|
var normalized = await _normalizer.NormalizeAsync(new DocumentNormalizationRequest { SourcePath = request.SourcePath, WorkingDirectory = Path.Combine(Path.GetTempPath(), "DocumentAutomation", "learning-" + Guid.NewGuid().ToString("N")) }, progress, cancellationToken);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
progress?.Report(new WordOperationProgress { Stage = "AnalyzeTemplate", Message = "Inspecting normalized template" });
|
||||||
|
EnsureBodyMarker(normalized.NormalizedPath); var normalizedHash = Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(normalized.NormalizedPath))); var inspection = _inspector.Inspect(normalized.NormalizedPath) with { FilePath = "template.docx" }; var pages = Math.Max(1, normalized.PageCount ?? inspection.Sections); var archetypes = CreateArchetypes(pages, inspection); var repeated = FindRepeatedRegions(inspection); var slots = request.CreateDefaultSlots ? DefaultSlots() : [];
|
||||||
|
var source = new SourceDocumentStructure { SourcePath = Path.GetFileName(request.SourcePath), Sha256 = normalized.SourceSha256, NormalizedPath = "template.docx", NormalizedSha256 = normalizedHash, PageCount = pages, SectionCount = inspection.Sections, Stories = ["wdMainTextStory", "wdPrimaryHeaderStory", "wdFirstPageHeaderStory", "wdEvenPagesHeaderStory", "wdPrimaryFooterStory", "wdFootnotesStory", "wdEndnotesStory", "wdCommentsStory", "wdTextFrameStory"], RepeatedFingerprints = repeated.Select(x => x.Fingerprint).ToArray(), Inspection = inspection };
|
||||||
|
var learned = new LearnedTemplate { TemplateId = Guid.NewGuid().ToString("D"), Name = request.TemplateName, SourceFileName = Path.GetFileName(request.SourcePath), SourceSha256 = normalized.SourceSha256, NormalizedSha256 = normalizedHash, CreatedAt = DateTimeOffset.Now.ToString("O"), Source = source, PageArchetypes = archetypes, FixedRegions = [], RepeatingRegions = repeated, Slots = slots, FieldBindings = [], Suggestions = BuildSuggestions(inspection, slots) };
|
||||||
|
_packages.Save(request.OutputPackagePath, learned, normalized.NormalizedPath); return learned;
|
||||||
|
}
|
||||||
|
finally { TryDeleteDirectory(normalized.NormalizedPath, normalized.SourcePath); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void EnsureBodyMarker(string path) { using var doc = WordprocessingDocument.Open(path, true); var main = doc.MainDocumentPart ?? throw new InvalidDataException("Main document part is missing."); var body = main.Document.Body ?? throw new InvalidDataException("Document body is missing."); if (main.Document.InnerText.Contains("{{DOC_BODY}}", StringComparison.Ordinal)) return; body.AppendChild(new Paragraph(new Run(new Text("{{DOC_BODY}}")))); main.Document.Save(); }
|
||||||
|
private static IReadOnlyList<PageArchetype> CreateArchetypes(int pages, DocumentInspectionResult inspection) { var result = new List<PageArchetype> { new() { Id = "FirstPage", Name = "FirstPage", IsFirstPage = true, IsRepeating = false, ExamplePages = [1], FixedRegionIds = [], SlotIds = [] } }; if (pages > 1) result.Add(new PageArchetype { Id = "RepeatingPage", Name = "RepeatingPage", IsRepeating = true, ExamplePages = Enumerable.Range(2, pages - 1).ToArray(), FixedRegionIds = [], SlotIds = [] }); return result; }
|
||||||
|
private static IReadOnlyList<RepeatingRegion> FindRepeatedRegions(DocumentInspectionResult inspection) => inspection.SectionAssignments.GroupBy(x => string.Join("|", x.Headers.Concat(x.Footers))).Where(x => x.Count() > 1 && x.Key.Length > 0).Select((x, i) => new RepeatingRegion { Id = "region-" + (i + 1), Name = "Repeated header/footer", Pages = x.Select(y => y.Section).ToArray(), Fingerprint = Convert.ToHexString(SHA256.HashData(System.Text.Encoding.UTF8.GetBytes(x.Key))), Kind = TemplateRegionKind.Repeating, Location = "section assignments" }).ToArray();
|
||||||
|
private static IReadOnlyList<TemplateSlot> DefaultSlots() => new[] { "PROJECT.CODE", "PROJECT.NAME", "PROJECT.OBJECT", "DOCUMENT.CODE", "DOCUMENT.TITLE", "DOCUMENT.STAGE", "DOCUMENT.SHEET", "DOCUMENT.SHEET_COUNT", "REGISTER.CONTENTS", "REGISTER.MAIN_DRAWING_SETS", "REGISTER.DRAWINGS", "REGISTER.REFERENCE_DOCUMENTS", "DOCUMENT.GENERAL_NOTES", "DOCUMENT.MAIN_BODY" }.Select(x => new TemplateSlot { Id = x, Name = x, Kind = x == "DOCUMENT.MAIN_BODY" ? TemplateSlotKind.MainBody : TemplateSlotKind.PlainText, ContentControlTag = x, IsRequired = x is "DOCUMENT.CODE" or "DOCUMENT.TITLE" or "DOCUMENT.MAIN_BODY", Occurrences = [] }).ToArray();
|
||||||
|
private static IReadOnlyList<TemplateLearningSuggestion> BuildSuggestions(DocumentInspectionResult inspection, IReadOnlyList<TemplateSlot> slots) => [new TemplateLearningSuggestion { SuggestionType = "PageArchetype", SourceLocation = "document", ProposedName = inspection.Sections > 1 ? "FirstPage + RepeatingPage" : "SinglePage", Confidence = 0.5, Reason = "Initial deterministic proposal based on document sections." }];
|
||||||
|
private static void TryDeleteDirectory(string normalized, string source) { var directory = Path.GetDirectoryName(normalized); if (directory is not null && !Path.GetFullPath(source).Equals(Path.GetFullPath(normalized), StringComparison.OrdinalIgnoreCase)) try { if (Directory.Exists(directory)) Directory.Delete(directory, true); } catch { } }
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocxWorkbench.Core;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.WordInterop;
|
||||||
|
|
||||||
|
public sealed class DocxBodyImporter : IDocxBodyImporter, IDisposable
|
||||||
|
{
|
||||||
|
private readonly StaWordQueue _queue;
|
||||||
|
private readonly bool _ownsQueue;
|
||||||
|
public DocxBodyImporter() : this(new StaWordQueue(), true) { }
|
||||||
|
internal DocxBodyImporter(StaWordQueue queue) : this(queue, false) { }
|
||||||
|
private DocxBodyImporter(StaWordQueue queue, bool ownsQueue) { _queue = queue; _ownsQueue = ownsQueue; }
|
||||||
|
|
||||||
|
public Task<BodyImportResult> ImportAsync(DocxBodyImportRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken)
|
||||||
|
=> _queue.Enqueue(() => ImportStandalone(request, progress, cancellationToken), cancellationToken);
|
||||||
|
|
||||||
|
private BodyImportResult ImportStandalone(DocxBodyImportRequest request, IProgress<WordOperationProgress>? progress, CancellationToken token)
|
||||||
|
{
|
||||||
|
dynamic? application = null; var proxies = new List<object?>(); try { var type = Type.GetTypeFromProgID("Word.Application", false) ?? throw new WordNotInstalledException("Microsoft Word is not installed or is not registered in COM."); application = Activator.CreateInstance(type) ?? throw new WordAutomationException("Could not create Word.Application."); application.Visible = false; application.DisplayAlerts = 0; return ImportOnSta(application, null, request.DestinationRangeHandle, request, progress, token, proxies); } finally { try { if (application is not null) application.Quit(0); } catch { } Release(application); ReleaseAll(proxies); }
|
||||||
|
}
|
||||||
|
|
||||||
|
internal BodyImportResult ImportOnSta(dynamic application, dynamic destinationDocument, dynamic destinationRange, DocxBodyImportRequest request, IProgress<WordOperationProgress>? progress, CancellationToken token, List<object?> proxies)
|
||||||
|
{
|
||||||
|
if (!File.Exists(request.SourcePath)) throw new FileNotFoundException("Source DOCX was not found.", request.SourcePath); if (!request.SourcePath.EndsWith(".docx", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException("DocxBodyImporter accepts DOCX only.");
|
||||||
|
var plan = BuildPlanFromOpenXml(request.SourcePath);
|
||||||
|
var temp = Path.Combine(Path.GetTempPath(), "DocumentAutomation", "body-" + Guid.NewGuid().ToString("N")); Directory.CreateDirectory(temp); var sourceCopy = Path.Combine(temp, "source.docx"); File.Copy(request.SourcePath, sourceCopy, true); NormalizeSourceSections(sourceCopy, request.SectionBreakPolicy); dynamic? sourceDocument = null; dynamic? sourceDocuments = null; dynamic? sourceRange = null; dynamic? importRange = null; var localProxies = new List<object?>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
token.ThrowIfCancellationRequested(); progress?.Report(new WordOperationProgress { Stage = "OpenSource", Message = "Opening source DOCX read-only" }); sourceDocuments = Own(application.Documents, localProxies); sourceDocument = Own(sourceDocuments.Open(sourceCopy, true, false, false), localProxies); dynamic stories = Own(sourceDocument.StoryRanges, localProxies); sourceRange = Own(stories[1], localProxies); var start = (int)sourceRange.Start; var end = (int)sourceRange.End; if (end > start) end -= 1; importRange = Own(sourceDocument.Range(start, end), localProxies);
|
||||||
|
var warnings = new List<string>(); var sourceRevisions = TryCount(importRange.Revisions); var sourceComments = TryCount(importRange.Comments); if (sourceRevisions > 0) { if (request.RevisionPolicy == RevisionImportPolicy.BlockImport) throw new WordAutomationException("Source DOCX contains tracked changes and RevisionPolicy is BlockImport."); if (request.RevisionPolicy == RevisionImportPolicy.AcceptAll) importRange.Revisions.AcceptAll(); if (request.RevisionPolicy == RevisionImportPolicy.RejectAll) importRange.Revisions.RejectAll(); if (request.RevisionPolicy == RevisionImportPolicy.PreserveAndWarn) warnings.Add($"Tracked changes preserved: {sourceRevisions}."); } if (sourceComments > 0) { if (request.CommentPolicy == CommentImportPolicy.BlockImport) throw new WordAutomationException("Source DOCX contains comments and CommentPolicy is BlockImport."); if (request.CommentPolicy == CommentImportPolicy.PreserveAndWarn) warnings.Add($"Comments preserved: {sourceComments}."); }
|
||||||
|
progress?.Report(new WordOperationProgress { Stage = "FormattedText", Message = "Copying only the main text story" }); destinationRange.FormattedText = importRange.FormattedText; if (request.CommentPolicy == CommentImportPolicy.Exclude) RemoveImportedComments(destinationRange); if (request.RevisionPolicy == RevisionImportPolicy.PreserveAndWarn) warnings.Add("Revision policy: PreserveAndWarn.");
|
||||||
|
plan = plan with { Warnings = warnings }; return new BodyImportResult { Plan = plan, InsertionMode = "FormattedText", Warnings = warnings };
|
||||||
|
}
|
||||||
|
finally { try { if (sourceDocument is not null) sourceDocument.Close(0); } catch { } ReleaseAll(localProxies); TryDelete(temp); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static BodyImportPlan BuildPlanFromOpenXml(string path)
|
||||||
|
{
|
||||||
|
using var archive = ZipFile.OpenRead(path);
|
||||||
|
var entry = archive.GetEntry("word/document.xml") ?? throw new InvalidDataException("Source DOCX document.xml is missing.");
|
||||||
|
using var reader = new StreamReader(entry.Open());
|
||||||
|
var document = XDocument.Parse(reader.ReadToEnd(), LoadOptions.PreserveWhitespace);
|
||||||
|
var w = XNamespace.Get("http://schemas.openxmlformats.org/wordprocessingml/2006/main");
|
||||||
|
var wp = XNamespace.Get("http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing");
|
||||||
|
var body = document.Root?.Element(w + "body") ?? throw new InvalidDataException("Source DOCX body is missing.");
|
||||||
|
var sectionMarks = body.Descendants(w + "sectPr").ToList();
|
||||||
|
var internalSections = Math.Max(0, sectionMarks.Count - 1);
|
||||||
|
var pageBreaks = body.Descendants(w + "br").Count(x => string.Equals((string?)x.Attribute(w + "type"), "page", StringComparison.OrdinalIgnoreCase));
|
||||||
|
return new BodyImportPlan
|
||||||
|
{
|
||||||
|
ParagraphCount = body.Descendants(w + "p").Count(),
|
||||||
|
TableCount = body.Descendants(w + "tbl").Count(),
|
||||||
|
InlineShapeCount = body.Descendants(wp + "inline").Count(),
|
||||||
|
FloatingShapeCount = body.Descendants(wp + "anchor").Count(),
|
||||||
|
InternalSectionBreakCount = internalSections,
|
||||||
|
PageBreakCount = pageBreaks,
|
||||||
|
IncludedStories = ["wdMainTextStory"],
|
||||||
|
ExcludedStories = ["wdPrimaryHeaderStory", "wdFirstPageHeaderStory", "wdEvenPagesHeaderStory", "wdPrimaryFooterStory", "wdFirstPageFooterStory", "wdEvenPagesFooterStory"],
|
||||||
|
Warnings = []
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void NormalizeSourceSections(string path, SectionBreakPolicy policy)
|
||||||
|
{
|
||||||
|
if (policy == SectionBreakPolicy.ConvertToParagraph) policy = SectionBreakPolicy.Remove;
|
||||||
|
using var archive = ZipFile.Open(path, ZipArchiveMode.Update); var entry = archive.GetEntry("word/document.xml") ?? throw new InvalidDataException("Source DOCX document.xml is missing."); string xml; using (var reader = new StreamReader(entry.Open())) xml = reader.ReadToEnd(); var w = XNamespace.Get("http://schemas.openxmlformats.org/wordprocessingml/2006/main"); var document = XDocument.Parse(xml, LoadOptions.PreserveWhitespace); var body = document.Root?.Element(w + "body") ?? throw new InvalidDataException("Source DOCX body is missing."); var sections = body.Descendants(w + "sectPr").ToList(); for (var i = 0; i < sections.Count; i++) { var section = sections[i]; var parent = section.Parent; var paragraph = parent?.Name == w + "pPr" ? parent.Parent : null; section.Remove(); if (i < sections.Count - 1 && policy == SectionBreakPolicy.ConvertToPageBreak && paragraph is not null) paragraph.Add(new XElement(w + "r", new XElement(w + "br", new XAttribute(w + "type", "page")))); } entry.Delete(); var replacement = archive.CreateEntry("word/document.xml", CompressionLevel.Optimal); using var stream = replacement.Open(); using var writer = new StreamWriter(stream, new UTF8Encoding(false)); document.Save(writer, SaveOptions.DisableFormatting);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void RemoveImportedComments(dynamic range) { try { dynamic comments = range.Comments; for (var i = comments.Count; i >= 1; i--) comments[i].Delete(); } catch { } }
|
||||||
|
private static int TryCount(dynamic collection) { try { return (int)collection.Count; } catch { return 0; } }
|
||||||
|
private static T? Own<T>(T? value, List<object?> proxies) where T : class { if (value is not null) proxies.Add(value); return value; }
|
||||||
|
private static void Release(object? value) { try { if (value is not null && Marshal.IsComObject(value)) Marshal.FinalReleaseComObject(value); } catch { } }
|
||||||
|
private static void ReleaseAll(IEnumerable<object?> values) { foreach (var value in values.Reverse()) Release(value); }
|
||||||
|
private static void TryDelete(string path) { try { if (Directory.Exists(path)) Directory.Delete(path, true); } catch { } }
|
||||||
|
public void Dispose() { if (_ownsQueue) _queue.Dispose(); }
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
|
||||||
|
<ProjectReference Include="..\DocxWorkbench.Core\DocxWorkbench.Core.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
[assembly: InternalsVisibleTo("DocxWorkbench.Tests")]
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
using System.Collections.Concurrent;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.WordInterop;
|
||||||
|
|
||||||
|
internal sealed class StaWordQueue : IDisposable
|
||||||
|
{
|
||||||
|
private readonly BlockingCollection<Action> _jobs = new();
|
||||||
|
private readonly Thread _thread;
|
||||||
|
private readonly ManualResetEventSlim _stopped = new(false);
|
||||||
|
private readonly object _lifetimeGate = new();
|
||||||
|
private bool _accepting = true;
|
||||||
|
|
||||||
|
public StaWordQueue()
|
||||||
|
{
|
||||||
|
_thread = new Thread(Run) { IsBackground = true, Name = "DocumentAutomation.Word.STA" };
|
||||||
|
_thread.SetApartmentState(ApartmentState.STA);
|
||||||
|
_thread.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<T> Enqueue<T>(Func<T> operation, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
if (operation is null) throw new ArgumentNullException(nameof(operation));
|
||||||
|
if (cancellationToken.IsCancellationRequested) return Task.FromCanceled<T>(cancellationToken);
|
||||||
|
var completion = new TaskCompletionSource<T>(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||||
|
lock (_lifetimeGate)
|
||||||
|
{
|
||||||
|
if (!_accepting) throw new ObjectDisposedException(nameof(StaWordQueue));
|
||||||
|
try { _jobs.Add(() => Execute(operation, completion, cancellationToken), cancellationToken); }
|
||||||
|
catch (InvalidOperationException) { throw new ObjectDisposedException(nameof(StaWordQueue)); }
|
||||||
|
catch (OperationCanceledException) { completion.TrySetCanceled(cancellationToken); }
|
||||||
|
}
|
||||||
|
return completion.Task;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Execute<T>(Func<T> operation, TaskCompletionSource<T> completion, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
try { cancellationToken.ThrowIfCancellationRequested(); completion.TrySetResult(operation()); }
|
||||||
|
catch (OperationCanceledException ex) { completion.TrySetCanceled(ex.CancellationToken); }
|
||||||
|
catch (Exception ex) { completion.TrySetException(ex); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Run()
|
||||||
|
{
|
||||||
|
try { foreach (var job in _jobs.GetConsumingEnumerable()) job(); }
|
||||||
|
finally { _stopped.Set(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
lock (_lifetimeGate)
|
||||||
|
{
|
||||||
|
if (!_accepting) return;
|
||||||
|
_accepting = false;
|
||||||
|
_jobs.CompleteAdding();
|
||||||
|
}
|
||||||
|
if (Thread.CurrentThread != _thread) _stopped.Wait(TimeSpan.FromSeconds(30));
|
||||||
|
// Do not dispose the collection or stop event while the STA worker may
|
||||||
|
// still be draining it. The worker owns the final enumeration lifetime.
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
using System.IO.Compression;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocxWorkbench.Core;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.WordInterop;
|
||||||
|
|
||||||
|
public sealed class TemplateDocumentGenerator : ITemplateDocumentGenerator, IDisposable
|
||||||
|
{
|
||||||
|
private readonly ITemplatePackageStore _packages;
|
||||||
|
private readonly IWordDocumentNormalizer _normalizer;
|
||||||
|
private readonly WordDocumentService _word = new();
|
||||||
|
private readonly IDocumentInspector _inspector;
|
||||||
|
public TemplateDocumentGenerator(ITemplatePackageStore packages, IWordDocumentNormalizer normalizer, IDocumentInspector inspector) { _packages = packages; _normalizer = normalizer; _inspector = inspector; }
|
||||||
|
|
||||||
|
public async Task<TemplateGenerationResult> GenerateAsync(TemplateGenerationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var opened = _packages.Open(request.TemplatePackagePath); DocumentNormalizationResult? normalizedBody = null; var outputPdf = Path.ChangeExtension(request.OutputDocxPath, ".pdf");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var bodyPath = request.ContentSourcePath;
|
||||||
|
if (Path.GetExtension(bodyPath).Equals(".doc", StringComparison.OrdinalIgnoreCase)) { normalizedBody = await _normalizer.NormalizeAsync(new DocumentNormalizationRequest { SourcePath = bodyPath, WorkingDirectory = Path.Combine(opened.WorkingDirectory, "body") }, progress, cancellationToken); bodyPath = normalizedBody.NormalizedPath; }
|
||||||
|
var workingTemplate = Path.Combine(opened.WorkingDirectory, "working-template.docx"); File.Copy(opened.TemplateDocxPath, workingTemplate, true); ReplaceScalarTokens(workingTemplate, request.ScalarValues); progress?.Report(new WordOperationProgress { Stage = "Generate", Message = "Building document from learned template" });
|
||||||
|
var result = await _word.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = workingTemplate, BodyPath = bodyPath, OutputDocxPath = request.OutputDocxPath }, progress is null ? null : new Progress<string>(x => progress.Report(new WordOperationProgress { Stage = "Generate", Message = x })), cancellationToken); await _word.ExportPdfAsync(result.OutputDocxPath, outputPdf, cancellationToken);
|
||||||
|
var validation = Validate(result.OutputDocxPath, opened.Template.TemplateId); var validationPath = Path.ChangeExtension(request.OutputDocxPath, ".validation.json"); File.WriteAllText(validationPath, JsonSerializer.Serialize(validation, new JsonSerializerOptions { WriteIndented = true })); return new TemplateGenerationResult { OutputDocxPath = result.OutputDocxPath, OutputPdfPath = outputPdf, GenerationLogPath = result.LogPath, ValidationLogPath = validationPath, Validation = validation };
|
||||||
|
}
|
||||||
|
finally { TryDeleteDirectory(opened.WorkingDirectory); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private IReadOnlyList<RuleEvaluationResult> Validate(string output, string templateId)
|
||||||
|
{
|
||||||
|
var inspection = _inspector.Inspect(output); var result = new List<RuleEvaluationResult> { new() { RuleId = "DOCX_EXISTS", Status = File.Exists(output) ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, Message = "Output DOCX exists.", DocumentLocation = output }, new() { RuleId = "NO_BODY_MARKER", Status = inspection.InsertionPoint.Type == "None" ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.NeedsReview, Message = inspection.InsertionPoint.Type == "None" ? "No unresolved insertion marker remains." : "An insertion marker remains in the output.", DocumentLocation = "word/document.xml" }, new() { RuleId = "NO_TRACKED_CHANGES", Status = inspection.HasTrackedChanges ? RuleEvaluationStatus.Fail : RuleEvaluationStatus.Pass, Message = inspection.HasTrackedChanges ? "Tracked changes remain." : "No tracked changes detected." }, new() { RuleId = "TEMPLATE_ID", Status = RuleEvaluationStatus.Pass, Message = $"Generated from template {templateId}." } }; return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ReplaceScalarTokens(string path, IReadOnlyDictionary<string, string> values)
|
||||||
|
{
|
||||||
|
if (values.Count == 0) return; using var archive = ZipFile.Open(path, ZipArchiveMode.Update); var w = XNamespace.Get("http://schemas.openxmlformats.org/wordprocessingml/2006/main");
|
||||||
|
foreach (var entry in archive.Entries.Where(x => x.FullName.StartsWith("word/", StringComparison.OrdinalIgnoreCase) && x.FullName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase)).ToArray())
|
||||||
|
{
|
||||||
|
XDocument document; using (var reader = new StreamReader(entry.Open())) document = XDocument.Parse(reader.ReadToEnd(), LoadOptions.PreserveWhitespace); var changed = false; foreach (var text in document.Descendants(w + "t")) { var value = text.Value; foreach (var pair in values) { var token = "{{" + pair.Key + "}}"; if (!value.Contains(token, StringComparison.OrdinalIgnoreCase)) continue; value = value.Replace(token, pair.Value, StringComparison.OrdinalIgnoreCase); changed = true; } text.Value = value; } if (!changed) continue; entry.Delete(); var replacement = archive.CreateEntry(entry.FullName, CompressionLevel.Optimal); using var stream = replacement.Open(); using var writer = new StreamWriter(stream, new UTF8Encoding(false)); document.Save(writer, SaveOptions.DisableFormatting);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void TryDeleteDirectory(string path) { try { if (Directory.Exists(path)) Directory.Delete(path, true); } catch { } }
|
||||||
|
public void Dispose() { _word.Dispose(); if (_normalizer is IDisposable disposable) disposable.Dispose(); }
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocxWorkbench.Core;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.WordInterop;
|
||||||
|
|
||||||
|
public sealed class WordDocumentNormalizer : IWordDocumentNormalizer, IDisposable
|
||||||
|
{
|
||||||
|
private readonly StaWordQueue _queue;
|
||||||
|
public WordDocumentNormalizer() : this(new StaWordQueue(), true) { }
|
||||||
|
internal WordDocumentNormalizer(StaWordQueue queue) : this(queue, false) { }
|
||||||
|
private readonly bool _ownsQueue;
|
||||||
|
private WordDocumentNormalizer(StaWordQueue queue, bool ownsQueue) { _queue = queue; _ownsQueue = ownsQueue; }
|
||||||
|
|
||||||
|
public Task<DocumentNormalizationResult> NormalizeAsync(DocumentNormalizationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken)
|
||||||
|
=> _queue.Enqueue(() => NormalizeOnSta(request, progress, cancellationToken), cancellationToken);
|
||||||
|
|
||||||
|
private static DocumentNormalizationResult NormalizeOnSta(DocumentNormalizationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken token)
|
||||||
|
{
|
||||||
|
if (!File.Exists(request.SourcePath)) throw new FileNotFoundException("Document source was not found.", request.SourcePath);
|
||||||
|
var extension = Path.GetExtension(request.SourcePath);
|
||||||
|
if (!extension.Equals(".doc", StringComparison.OrdinalIgnoreCase) && !extension.Equals(".docx", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException("Template source must be DOC or DOCX.");
|
||||||
|
var started = Stopwatch.StartNew(); var sourceHash = Hash(request.SourcePath); var work = Path.GetFullPath(request.WorkingDirectory); Directory.CreateDirectory(work); var normalized = Path.Combine(work, "normalized.docx"); token.ThrowIfCancellationRequested();
|
||||||
|
if (extension.Equals(".docx", StringComparison.OrdinalIgnoreCase)) { File.Copy(request.SourcePath, normalized, true); return new DocumentNormalizationResult { SourcePath = request.SourcePath, NormalizedPath = normalized, SourceSha256 = sourceHash, NormalizedSha256 = Hash(normalized), WasConverted = false, Duration = started.Elapsed }; }
|
||||||
|
dynamic? application = null; dynamic? documents = null; dynamic? document = null; var proxies = new List<object?>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
progress?.Report(new WordOperationProgress { Stage = "NormalizeDoc", Message = "Opening binary DOC read-only" }); var wordType = Type.GetTypeFromProgID("Word.Application", false) ?? throw new WordNotInstalledException("Microsoft Word is not installed or is not registered in COM."); application = Own(Activator.CreateInstance(wordType), proxies) ?? throw new WordAutomationException("Could not create Word.Application."); application.Visible = false; application.DisplayAlerts = 0; if (request.DisableMacros) { try { application.AutomationSecurity = 3; } catch { } } documents = Own(application.Documents, proxies); document = Own(documents.Open(request.SourcePath, false, true, false), proxies) ?? throw new WordAutomationException("Word could not open the DOC source read-only."); token.ThrowIfCancellationRequested(); progress?.Report(new WordOperationProgress { Stage = "NormalizeDoc", Message = "Saving temporary DOCX" }); document.SaveAs2(normalized, 12); int? pageCount = null; try { document.Repaginate(); pageCount = (int)document.ComputeStatistics(2); } catch { } document.Close(0); document = null; return new DocumentNormalizationResult { SourcePath = request.SourcePath, NormalizedPath = normalized, SourceSha256 = sourceHash, NormalizedSha256 = Hash(normalized), WasConverted = true, Duration = started.Elapsed, PageCount = pageCount };
|
||||||
|
}
|
||||||
|
catch (WordNotInstalledException) { throw; }
|
||||||
|
catch (WordAutomationException) { throw; }
|
||||||
|
catch (Exception ex) { throw new WordAutomationException("DOC normalization failed.", ex); }
|
||||||
|
finally { try { if (document is not null) document.Close(0); } catch { } try { if (application is not null) application.Quit(0); } catch { } ReleaseAll(proxies); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string Hash(string path) => Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(path)));
|
||||||
|
private static T? Own<T>(T? value, List<object?> proxies) where T : class { if (value is not null) proxies.Add(value); return value; }
|
||||||
|
private static void ReleaseAll(IEnumerable<object?> proxies) { foreach (var value in proxies.Reverse()) try { if (value is not null && Marshal.IsComObject(value)) Marshal.FinalReleaseComObject(value); } catch { } }
|
||||||
|
public void Dispose() { if (_ownsQueue) _queue.Dispose(); }
|
||||||
|
}
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocxWorkbench.Core;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.WordInterop;
|
||||||
|
|
||||||
|
public sealed class WordNotInstalledException(string message) : InvalidOperationException(message);
|
||||||
|
public sealed class WordAutomationException(string message, Exception? inner = null) : InvalidOperationException(message, inner);
|
||||||
|
|
||||||
|
public sealed class WordDocumentService : IWordDocumentService, IDisposable
|
||||||
|
{
|
||||||
|
private readonly StaWordQueue _queue = new();
|
||||||
|
private readonly DocxBodyImporter _bodyImporter;
|
||||||
|
public WordDocumentService() => _bodyImporter = new DocxBodyImporter(_queue);
|
||||||
|
|
||||||
|
public Task<WordDocumentResult> BuildDocumentAsync(WordDocumentBuildRequest request, IProgress<string>? progress, CancellationToken cancellationToken)
|
||||||
|
=> _queue.Enqueue(() => BuildOnSta(request, progress, cancellationToken), cancellationToken);
|
||||||
|
|
||||||
|
public Task<WordPreviewResult> ExportPdfAsync(string docxPath, string outputPdfPath, CancellationToken cancellationToken)
|
||||||
|
=> _queue.Enqueue(() => ExportPdfOnSta(docxPath, outputPdfPath, cancellationToken), cancellationToken);
|
||||||
|
|
||||||
|
private WordDocumentResult BuildOnSta(WordDocumentBuildRequest request, IProgress<string>? progress, CancellationToken token)
|
||||||
|
{
|
||||||
|
DocumentInputValidation.Validate(request);
|
||||||
|
if (!request.BodyPath.EndsWith(".docx", StringComparison.OrdinalIgnoreCase) && !request.BodyPath.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException($"Unsupported body format: {Path.GetExtension(request.BodyPath)}. Use DOCX or TXT.");
|
||||||
|
var insertion = TemplateInsertionPointReader.Find(request.TemplatePath);
|
||||||
|
if (insertion.Type == "None") throw new WordAutomationException("No DOC_BODY insertion point was found. Add a DOC_BODY content control, DOC_BODY bookmark, or {{DOC_BODY}} marker.");
|
||||||
|
var started = Stopwatch.StartNew(); var temp = Path.Combine(Path.GetTempPath(), "DocumentAutomation", Guid.NewGuid().ToString("N")); Directory.CreateDirectory(temp); var workingTemplate = Path.Combine(temp, "template.docx"); var stagedOutput = Path.Combine(temp, "result.docx"); File.Copy(request.TemplatePath, workingTemplate, true);
|
||||||
|
dynamic? application = null; dynamic? documents = null; dynamic? document = null; dynamic? range = null; var proxies = new List<object?>(); int? wordPid = null; BodyImportResult? bodyImport = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
token.ThrowIfCancellationRequested(); progress?.Report("Checking Word.Application COM registration"); var wordType = Type.GetTypeFromProgID("Word.Application", false) ?? throw new WordNotInstalledException("Microsoft Word is not installed or is not registered in COM."); application = Own(Activator.CreateInstance(wordType), proxies) ?? throw new WordAutomationException("Could not create Word.Application."); application.Visible = false; application.DisplayAlerts = 0; TrySetAutomationSecurity(application); wordPid = TryGetPid(application); progress?.Report($"Word COM started (PID {wordPid?.ToString() ?? "unknown"})");
|
||||||
|
documents = Own(application.Documents, proxies); document = Own(documents.Open(workingTemplate, false, false, false), proxies) ?? throw new WordAutomationException("Word could not open the working template copy.");
|
||||||
|
range = Own(FindInsertionRange(document, insertion.Type, proxies), proxies) ?? throw new WordAutomationException("The insertion point disappeared while opening the template.");
|
||||||
|
token.ThrowIfCancellationRequested(); progress?.Report($"Inserting {Path.GetExtension(request.BodyPath).ToUpperInvariant()} body"); if (request.BodyPath.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) range.Text = File.ReadAllText(request.BodyPath).Replace("\r\n", "\r").Replace('\n', '\r'); else bodyImport = _bodyImporter.ImportOnSta(application, document, range, new DocxBodyImportRequest { SourcePath = request.BodyPath, DestinationRangeHandle = range }, progress is null ? null : new Progress<WordOperationProgress>(x => progress.Report(x.Message ?? x.Stage)), token, proxies);
|
||||||
|
token.ThrowIfCancellationRequested(); progress?.Report("Updating fields and pagination"); document.Repaginate(); document.Fields.Update(); UpdateHeadersFooters(document, proxies); document.SaveAs2(stagedOutput, 12); document.Close(0); document = null; RemoveUnreferencedHeaderFooterParts(stagedOutput); CommitOutput(stagedOutput, request.OutputDocxPath);
|
||||||
|
var logPath = Path.ChangeExtension(request.OutputDocxPath, ".generation.json"); File.WriteAllText(logPath, JsonSerializer.Serialize(new { operationId = Guid.NewGuid(), operationType = "BuildDocument", startedAtUtc = DateTime.UtcNow.Subtract(started.Elapsed), completedAtUtc = DateTime.UtcNow, template = request.TemplatePath, templateSha256 = Hash(request.TemplatePath), templateVersion = "1.0", body = request.BodyPath, sourceSha256 = Hash(request.BodyPath), output = request.OutputDocxPath, resultSha256 = Hash(request.OutputDocxPath), insertionPoint = insertion.Type, wordPid, staThread = Thread.CurrentThread.ManagedThreadId, staApartment = Thread.CurrentThread.GetApartmentState().ToString(), durationMs = started.ElapsedMilliseconds, status = "Succeeded", errorCode = (string?)null }, new JsonSerializerOptions { WriteIndented = true }));
|
||||||
|
return new WordDocumentResult { OutputDocxPath = request.OutputDocxPath, LogPath = logPath, Duration = started.Elapsed, InsertionPoint = insertion.Type, BodyImport = bodyImport };
|
||||||
|
}
|
||||||
|
catch (WordNotInstalledException) { throw; }
|
||||||
|
catch (WordAutomationException) { throw; }
|
||||||
|
catch (Exception ex) when (ex is not OperationCanceledException) { throw new WordAutomationException("Word automation failed. See technical details in the operation log.", ex); }
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
try { if (document is not null) document.Close(0); } catch { }
|
||||||
|
try { if (application is not null) application.Quit(0); } catch { }
|
||||||
|
ReleaseAll(proxies); TryDeleteDirectory(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static WordPreviewResult ExportPdfOnSta(string docxPath, string outputPdfPath, CancellationToken token)
|
||||||
|
{
|
||||||
|
if (!File.Exists(docxPath)) throw new FileNotFoundException("DOCX was not found.", docxPath); Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(outputPdfPath))!); var sw = Stopwatch.StartNew(); dynamic? application = null; dynamic? documents = null; dynamic? document = null; var proxies = new List<object?>();
|
||||||
|
try { token.ThrowIfCancellationRequested(); var wordType = Type.GetTypeFromProgID("Word.Application", false) ?? throw new WordNotInstalledException("Microsoft Word is not installed or is not registered in COM."); application = Own(Activator.CreateInstance(wordType), proxies) ?? throw new WordAutomationException("Could not create Word.Application."); application.Visible = false; application.DisplayAlerts = 0; TrySetAutomationSecurity(application); documents = Own(application.Documents, proxies); document = Own(documents.Open(docxPath, true, false, false), proxies) ?? throw new WordAutomationException("Word could not open the DOCX."); document.ExportAsFixedFormat(outputPdfPath, 17); return new WordPreviewResult { PdfPath = outputPdfPath, Duration = sw.Elapsed }; }
|
||||||
|
catch (WordNotInstalledException) { throw; }
|
||||||
|
catch (WordAutomationException) { throw; }
|
||||||
|
catch (Exception ex) when (ex is not OperationCanceledException) { throw new WordAutomationException("PDF export through Word failed.", ex); }
|
||||||
|
finally { try { if (document is not null) document.Close(0); } catch { } try { if (application is not null) application.Quit(0); } catch { } ReleaseAll(proxies); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static dynamic? FindInsertionRange(dynamic document, string type, List<object?> proxies)
|
||||||
|
{
|
||||||
|
if (type == "ContentControl") { dynamic controls = Own(document.ContentControls, proxies); for (var i = 1; i <= controls.Count; i++) { dynamic control = Own(controls[i], proxies); if (string.Equals((string?)control.Tag, "DOC_BODY", StringComparison.OrdinalIgnoreCase) || string.Equals((string?)control.Title, "DOC_BODY", StringComparison.OrdinalIgnoreCase)) return control.Range; } }
|
||||||
|
if (type == "Bookmark") return document.Bookmarks["DOC_BODY"].Range;
|
||||||
|
dynamic search = Own(document.Content, proxies); search.Find.ClearFormatting(); search.Find.Text = "{{DOC_BODY}}"; if (search.Find.Execute()) { search.Text = ""; return search; } return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void UpdateHeadersFooters(dynamic document, List<object?> proxies)
|
||||||
|
{
|
||||||
|
dynamic sections = Own(document.Sections, proxies); for (var i = 1; i <= sections.Count; i++) { dynamic section = Own(sections[i], proxies); UpdateCollection(section.Headers, proxies); UpdateCollection(section.Footers, proxies); }
|
||||||
|
void UpdateCollection(dynamic collection, List<object?> proxies) { dynamic owned = WordDocumentService.Own(collection, proxies); for (var i = 1; i <= owned.Count; i++) { dynamic item = WordDocumentService.Own(owned[i], proxies); dynamic range = WordDocumentService.Own(item.Range, proxies); range.Fields.Update(); } }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void TrySetAutomationSecurity(dynamic application) { try { application.AutomationSecurity = 3; application.ScreenUpdating = false; } catch { } }
|
||||||
|
private static int? TryGetPid(dynamic application) { try { return Process.GetProcessById((int)application.Hwnd).Id; } catch { return null; } }
|
||||||
|
private static T? Own<T>(T? value, List<object?> proxies) where T : class { if (value is not null) proxies.Add(value); return value; }
|
||||||
|
private static void ReleaseAll(IEnumerable<object?> proxies) { foreach (var proxy in proxies.Reverse()) try { if (proxy is not null && Marshal.IsComObject(proxy)) Marshal.FinalReleaseComObject(proxy); } catch { } }
|
||||||
|
private static string Hash(string path) => Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(path)));
|
||||||
|
private static void CommitOutput(string staged, string output) { var full = Path.GetFullPath(output); if (File.Exists(full)) File.Copy(full, full + ".bak-" + DateTime.UtcNow.ToString("yyyyMMddHHmmss"), true); File.Copy(staged, full, true); }
|
||||||
|
private static void RemoveUnreferencedHeaderFooterParts(string path)
|
||||||
|
{
|
||||||
|
using var archive = ZipFile.Open(path, ZipArchiveMode.Update);
|
||||||
|
var documentEntry = archive.GetEntry("word/document.xml");
|
||||||
|
var relsEntry = archive.GetEntry("word/_rels/document.xml.rels");
|
||||||
|
if (documentEntry is null || relsEntry is null) return;
|
||||||
|
XDocument document;
|
||||||
|
XDocument relationships;
|
||||||
|
using (var reader = new StreamReader(documentEntry.Open())) document = XDocument.Parse(reader.ReadToEnd(), LoadOptions.PreserveWhitespace);
|
||||||
|
using (var reader = new StreamReader(relsEntry.Open())) relationships = XDocument.Parse(reader.ReadToEnd(), LoadOptions.PreserveWhitespace);
|
||||||
|
var w = XNamespace.Get("http://schemas.openxmlformats.org/wordprocessingml/2006/main");
|
||||||
|
var rel = XNamespace.Get("http://schemas.openxmlformats.org/package/2006/relationships");
|
||||||
|
var used = document.Descendants(w + "headerReference").Concat(document.Descendants(w + "footerReference")).Select(x => (string?)x.Attribute(XNamespace.Get("http://schemas.openxmlformats.org/officeDocument/2006/relationships") + "id")).Where(x => x is not null).ToHashSet(StringComparer.Ordinal);
|
||||||
|
var removedTargets = new List<string>();
|
||||||
|
foreach (var relationship in relationships.Root?.Elements(rel + "Relationship").ToList() ?? [])
|
||||||
|
{
|
||||||
|
var type = (string?)relationship.Attribute("Type") ?? string.Empty;
|
||||||
|
var id = (string?)relationship.Attribute("Id");
|
||||||
|
if (id is null || (!type.EndsWith("/header", StringComparison.OrdinalIgnoreCase) && !type.EndsWith("/footer", StringComparison.OrdinalIgnoreCase)) || used.Contains(id)) continue;
|
||||||
|
var target = (string?)relationship.Attribute("Target");
|
||||||
|
if (!string.IsNullOrWhiteSpace(target)) removedTargets.Add(ResolveWordPart(target));
|
||||||
|
relationship.Remove();
|
||||||
|
}
|
||||||
|
foreach (var target in removedTargets.Distinct(StringComparer.OrdinalIgnoreCase)) archive.GetEntry(target)?.Delete();
|
||||||
|
relsEntry.Delete();
|
||||||
|
var replacement = archive.CreateEntry("word/_rels/document.xml.rels", CompressionLevel.Optimal);
|
||||||
|
using var stream = replacement.Open();
|
||||||
|
using var writer = new StreamWriter(stream, new UTF8Encoding(false));
|
||||||
|
relationships.Save(writer, SaveOptions.DisableFormatting);
|
||||||
|
}
|
||||||
|
private static string ResolveWordPart(string target) => target.StartsWith("/", StringComparison.Ordinal) ? target.TrimStart('/') : "word/" + target.Replace("\\", "/").TrimStart("./".ToCharArray());
|
||||||
|
private static void TryDeleteDirectory(string path) { try { if (Directory.Exists(path)) Directory.Delete(path, true); } catch { } }
|
||||||
|
public void Dispose() => _queue.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static class TemplateInsertionPointReader
|
||||||
|
{
|
||||||
|
public static InsertionPointInfo Find(string docxPath)
|
||||||
|
{
|
||||||
|
using var archive = ZipFile.OpenRead(docxPath); var entry = archive.GetEntry("word/document.xml") ?? throw new InvalidDataException("DOCX document.xml is missing."); using var reader = new StreamReader(entry.Open()); var xml = reader.ReadToEnd();
|
||||||
|
if (Regex.IsMatch(xml, @"w:tag[^>]+w:val=""DOC_BODY""", RegexOptions.IgnoreCase)) return new InsertionPointInfo { Type = "ContentControl", Location = "word/document.xml" };
|
||||||
|
if (Regex.IsMatch(xml, @"w:bookmarkStart[^>]+w:name=""DOC_BODY""", RegexOptions.IgnoreCase)) return new InsertionPointInfo { Type = "Bookmark", Location = "word/document.xml" };
|
||||||
|
if (xml.Contains("{{DOC_BODY}}", StringComparison.Ordinal)) return new InsertionPointInfo { Type = "TextMarker", Location = "word/document.xml" };
|
||||||
|
return new InsertionPointInfo { Type = "None" };
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using System.Text.Json;
|
||||||
|
using StandardsWorkbench.Core;
|
||||||
|
using StandardsWorkbench.Ollama;
|
||||||
|
using StandardsWorkbench.Pdf;
|
||||||
|
|
||||||
|
namespace StandardsWorkbench.App;
|
||||||
|
|
||||||
|
public sealed class MainForm : Form
|
||||||
|
{
|
||||||
|
private readonly TextBox _pdf = new() { Width = 560 }; private readonly TextBox _code = new() { Width = 240, Text = "ГОСТ Р 21.101-2026" }; private readonly TextBox _title = new() { Width = 560, Text = "Нормативный документ" }; private readonly TextBox _log = new() { Multiline = true, Dock = DockStyle.Fill, ScrollBars = ScrollBars.Vertical }; private readonly ListBox _candidates = new() { Dock = DockStyle.Fill }; private readonly Label _status = new() { AutoSize = true, Text = "Готово" }; private readonly IStandardPdfService _service = new PdfStandardService(); private StandardMetadata? _metadata; private List<CandidateRule> _rules = [];
|
||||||
|
public MainForm()
|
||||||
|
{
|
||||||
|
Text = "Standards Workbench"; Width = 900; Height = 620; var top = new TableLayoutPanel { Dock = DockStyle.Top, Height = 150, ColumnCount = 3, RowCount = 4, Padding = new Padding(8) }; top.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 120)); top.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100)); top.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 110)); Add(top, 0, "Стандарт PDF", _pdf, Browse); Add(top, 1, "Код", _code, null); Add(top, 2, "Название", _title, null); var buttons = new FlowLayoutPanel { Dock = DockStyle.Fill }; buttons.Controls.Add(Button("Анализировать PDF", async (_, _) => await ImportAsync())); buttons.Controls.Add(Button("Утвердить выбранное", (_, _) => SetSelectedStatus("Approved"))); buttons.Controls.Add(Button("Отклонить выбранное", (_, _) => SetSelectedStatus("Rejected"))); buttons.Controls.Add(Button("Экспортировать профиль", (_, _) => ExportProfile())); top.Controls.Add(buttons, 1, 3); top.SetColumnSpan(buttons, 2); var tabs = new TabControl { Dock = DockStyle.Fill }; foreach (var t in new[] { "Документ", "Страницы", "Пункты", "Кандидаты правил", "Профили", "Сравнение", "Журнал" }) { var p = new TabPage(t); if (t == "Журнал") p.Controls.Add(_log); if (t == "Кандидаты правил") p.Controls.Add(_candidates); tabs.TabPages.Add(p); } Controls.Add(tabs); Controls.Add(top); Controls.Add(_status); _status.Dock = DockStyle.Bottom;
|
||||||
|
}
|
||||||
|
private static void Add(TableLayoutPanel p, int row, string label, TextBox box, EventHandler? browse) { p.Controls.Add(new Label { Text = label, AutoSize = true }, 0, row); p.Controls.Add(box, 1, row); if (browse is not null) { var b = new Button { Text = "Обзор..." }; b.Click += browse; p.Controls.Add(b, 2, row); } }
|
||||||
|
private static Button Button(string text, EventHandler e) { var b = new Button { Text = text, AutoSize = true }; b.Click += e; return b; }
|
||||||
|
private void Browse(object? s, EventArgs e) { using var d = new OpenFileDialog { Filter = "PDF|*.pdf" }; if (d.ShowDialog() == DialogResult.OK) _pdf.Text = d.FileName; }
|
||||||
|
private async Task ImportAsync() { try { _status.Text = "Анализ PDF..."; var result = await _service.ImportAsync(_pdf.Text, _code.Text, _title.Text, CancellationToken.None); _metadata = result.Metadata; _rules = result.Clauses.Select(c => new CandidateRule { CandidateId = Guid.NewGuid().ToString("N"), StandardId = c.StandardId, ClauseId = c.ClauseId, SourcePage = c.StartPage, SourceText = c.Text, Title = c.Heading.Length > 0 ? c.Heading : $"Кандидат по пункту {c.ClauseId}", RequiresHumanApproval = true }).ToList(); RefreshCandidates(); _log.AppendText(JsonSerializer.Serialize(new { result.Metadata, result.Pages, result.Clauses }, new JsonSerializerOptions { WriteIndented = true }) + Environment.NewLine); _status.Text = $"Готово: {result.Pages.Count} страниц, {result.Clauses.Count} пунктов"; } catch (Exception ex) { _log.AppendText(ex + Environment.NewLine); _status.Text = "Ошибка"; MessageBox.Show(ex.Message); } }
|
||||||
|
private void RefreshCandidates() { _candidates.Items.Clear(); foreach (var rule in _rules) _candidates.Items.Add($"[{rule.Status}] {rule.ClauseId} стр.{rule.SourcePage}: {rule.Title}"); }
|
||||||
|
private void SetSelectedStatus(string status) { if (_candidates.SelectedIndex < 0 || _candidates.SelectedIndex >= _rules.Count) return; _rules[_candidates.SelectedIndex] = _rules[_candidates.SelectedIndex] with { Status = status }; RefreshCandidates(); }
|
||||||
|
private void ExportProfile() { if (_metadata is null) { MessageBox.Show("Сначала импортируйте PDF."); return; } using var dialog = new FolderBrowserDialog(); if (dialog.ShowDialog() != DialogResult.OK) return; var profile = new ApprovedRulesProfile { StandardId = _metadata.StandardId, Code = _metadata.Code, Revision = _metadata.Revision, SourceFileSha256 = _metadata.SourceFileSha256, Rules = _rules.Where(r => r.Status == "Approved").ToArray() }; var path = Path.Combine(dialog.SelectedPath, $"{_metadata.StandardId}-docx-profile"); ProfileStore.Export(path, profile); _status.Text = $"Профиль экспортирован: {path}"; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
namespace StandardsWorkbench.App;
|
||||||
|
|
||||||
|
static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
// To customize application configuration such as set high DPI settings or default font,
|
||||||
|
// see https://aka.ms/applicationconfiguration.
|
||||||
|
ApplicationConfiguration.Initialize();
|
||||||
|
Application.Run(new MainForm());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
|
||||||
|
<ProjectReference Include="..\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj" />
|
||||||
|
<ProjectReference Include="..\StandardsWorkbench.Pdf\StandardsWorkbench.Pdf.csproj" />
|
||||||
|
<ProjectReference Include="..\StandardsWorkbench.Ollama\StandardsWorkbench.Ollama.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text.Json;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
|
||||||
|
namespace StandardsWorkbench.Core;
|
||||||
|
|
||||||
|
public sealed record StandardMetadata
|
||||||
|
{
|
||||||
|
public required string StandardId { get; init; }
|
||||||
|
public required string Code { get; init; }
|
||||||
|
public required string Title { get; init; }
|
||||||
|
public string Revision { get; init; } = "";
|
||||||
|
public DateOnly? EffectiveFrom { get; init; }
|
||||||
|
public required string SourceFileSha256 { get; init; }
|
||||||
|
public int PageCount { get; init; }
|
||||||
|
public bool TextLayerDetected { get; init; }
|
||||||
|
public DateTime ImportedAt { get; init; } = DateTime.UtcNow;
|
||||||
|
public string Status { get; init; } = "Imported";
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record PdfPageText(int PageNumber, string Text, bool TextLayerDetected, string Status, IReadOnlyList<string> Blocks);
|
||||||
|
public sealed record StandardClause(string StandardId, string ClauseId, string Heading, string Text, int StartPage, int EndPage, double ExtractionConfidence);
|
||||||
|
public sealed record CandidateRule
|
||||||
|
{
|
||||||
|
public required string CandidateId { get; init; }
|
||||||
|
public required string StandardId { get; init; }
|
||||||
|
public required string ClauseId { get; init; }
|
||||||
|
public int SourcePage { get; init; }
|
||||||
|
public required string SourceText { get; init; }
|
||||||
|
public required string Title { get; init; }
|
||||||
|
public string[] Scope { get; init; } = ["DOCX"];
|
||||||
|
public string RuleKind { get; init; } = "ExpertReview";
|
||||||
|
public string Target { get; init; } = "Document";
|
||||||
|
public Dictionary<string, string> Parameters { get; init; } = [];
|
||||||
|
public string Severity { get; init; } = "Warning";
|
||||||
|
public string AutomationLevel { get; init; } = "Manual";
|
||||||
|
public double Confidence { get; init; }
|
||||||
|
public bool RequiresHumanApproval { get; init; } = true;
|
||||||
|
public string Status { get; init; } = "New";
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record ApprovedRulesProfile
|
||||||
|
{
|
||||||
|
public required string StandardId { get; init; }
|
||||||
|
public required string Code { get; init; }
|
||||||
|
public required string Revision { get; init; }
|
||||||
|
public required string SourceFileSha256 { get; init; }
|
||||||
|
public string ProfileVersion { get; init; } = "1.0";
|
||||||
|
public string MinimumRulesEngineVersion { get; init; } = "1.0";
|
||||||
|
public DateTime ExportedAt { get; init; } = DateTime.UtcNow;
|
||||||
|
public IReadOnlyList<CandidateRule> Rules { get; init; } = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IPdfOcrService { Task<PdfPageText> RecognizePageAsync(string pdfPath, int pageNumber, CancellationToken cancellationToken); }
|
||||||
|
public interface IStandardPdfService { Task<(StandardMetadata Metadata, IReadOnlyList<PdfPageText> Pages, IReadOnlyList<StandardClause> Clauses)> ImportAsync(string pdfPath, string code, string title, CancellationToken cancellationToken); }
|
||||||
|
public interface IOllamaService { Task<IReadOnlyList<string>> GetModelsAsync(CancellationToken cancellationToken); Task<CandidateRule?> SuggestCandidateAsync(StandardClause clause, string model, CancellationToken cancellationToken); }
|
||||||
|
|
||||||
|
public static class ProfileStore
|
||||||
|
{
|
||||||
|
public static string Sha256(string path) { using var stream = File.OpenRead(path); return Convert.ToHexString(SHA256.HashData(stream)).ToLowerInvariant(); }
|
||||||
|
public static void Export(string directory, ApprovedRulesProfile profile)
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(directory); var options = new JsonSerializerOptions { WriteIndented = true }; File.WriteAllText(Path.Combine(directory, "manifest.json"), JsonSerializer.Serialize(profile, options)); File.WriteAllText(Path.Combine(directory, "approved-rules.json"), JsonSerializer.Serialize(profile.Rules, options)); File.WriteAllText(Path.Combine(directory, "references.json"), JsonSerializer.Serialize(profile.Rules.Select(r => new { r.ClauseId, r.SourcePage, r.StandardId }), options)); File.WriteAllText(Path.Combine(directory, "signature.sha256"), Sha256(Path.Combine(directory, "approved-rules.json")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class RulesEngine
|
||||||
|
{
|
||||||
|
public IReadOnlyList<RuleEvaluationResult> Evaluate(DocumentInspectionResult document, ApprovedRulesProfile profile)
|
||||||
|
=> profile.Rules.Where(r => r.Status is "Approved" or "Implemented" or "Tested").Select(r => EvaluateOne(document, r)).ToArray();
|
||||||
|
|
||||||
|
private static RuleEvaluationResult EvaluateOne(DocumentInspectionResult d, CandidateRule rule)
|
||||||
|
{
|
||||||
|
var status = rule.RuleKind switch { "SectionCount" => d.Sections > 0 ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, "ContentControlPresence" => d.ContentControls > 0 ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, "BookmarkPresence" => d.Bookmarks > 0 ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, "CommentsAbsent" => d.Comments == 0 ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, "TrackedChangesAbsent" => !d.HasTrackedChanges ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, _ => RuleEvaluationStatus.NeedsReview };
|
||||||
|
return new RuleEvaluationResult { RuleId = rule.CandidateId, Status = status, Message = status == RuleEvaluationStatus.Pass ? "Проверка пройдена." : status == RuleEvaluationStatus.Fail ? "Проверка не пройдена." : "Требуется экспертная проверка.", ClauseId = rule.ClauseId, SourcePage = rule.SourcePage, DocumentLocation = rule.Target, CanAutoFix = false };
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup><ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" /></ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Net.Http.Json;
|
||||||
|
using System.Text.Json;
|
||||||
|
using StandardsWorkbench.Core;
|
||||||
|
|
||||||
|
namespace StandardsWorkbench.Ollama;
|
||||||
|
|
||||||
|
public sealed class OllamaClient : IOllamaService
|
||||||
|
{
|
||||||
|
private readonly HttpClient _http;
|
||||||
|
public OllamaClient(HttpClient? httpClient = null) { _http = httpClient ?? new HttpClient(); _http.BaseAddress = new Uri("http://192.168.200.112:11434"); _http.Timeout = TimeSpan.FromSeconds(120); }
|
||||||
|
public async Task<IReadOnlyList<string>> GetModelsAsync(CancellationToken cancellationToken)
|
||||||
|
{ using var response = await _http.GetAsync("/api/tags", cancellationToken); response.EnsureSuccessStatusCode(); using var json = await response.Content.ReadFromJsonAsync<JsonDocument>(cancellationToken: cancellationToken); return json?.RootElement.GetProperty("models").EnumerateArray().Select(x => x.GetProperty("name").GetString() ?? "").Where(x => x.Length > 0).ToArray() ?? []; }
|
||||||
|
public async Task<CandidateRule?> SuggestCandidateAsync(StandardClause clause, string model, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(model)) throw new ArgumentException("Модель Ollama не выбрана.", nameof(model)); var prompt = $"Return JSON only. Extract one candidate DOCX rule from clause {clause.ClauseId}. Never invent source references. Text: {clause.Text}"; using var response = await _http.PostAsJsonAsync("/api/generate", new { model, prompt, stream = false, format = "json" }, cancellationToken); response.EnsureSuccessStatusCode(); using var json = await response.Content.ReadFromJsonAsync<JsonDocument>(cancellationToken: cancellationToken); var raw = json?.RootElement.GetProperty("response").GetString(); if (string.IsNullOrWhiteSpace(raw)) return null; try { return JsonSerializer.Deserialize<CandidateRule>(raw); } catch (JsonException) { return null; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup><ProjectReference Include="..\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj" /></ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using StandardsWorkbench.Core;
|
||||||
|
using UglyToad.PdfPig;
|
||||||
|
|
||||||
|
namespace StandardsWorkbench.Pdf;
|
||||||
|
|
||||||
|
public sealed class PdfStandardService : IStandardPdfService
|
||||||
|
{
|
||||||
|
public Task<(StandardMetadata Metadata, IReadOnlyList<PdfPageText> Pages, IReadOnlyList<StandardClause> Clauses)> ImportAsync(string pdfPath, string code, string title, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
if (!File.Exists(pdfPath)) throw new FileNotFoundException("PDF ГОСТа не найден.", pdfPath);
|
||||||
|
return Task.Run(() =>
|
||||||
|
{
|
||||||
|
using var pdf = PdfDocument.Open(pdfPath); var pages = new List<PdfPageText>();
|
||||||
|
foreach (var page in pdf.GetPages()) { cancellationToken.ThrowIfCancellationRequested(); var text = page.Text ?? ""; pages.Add(new PdfPageText(page.Number, text, text.Trim().Length > 0, text.Trim().Length > 0 ? "Extracted" : "OCR_REQUIRED", text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries))); }
|
||||||
|
var standardId = Regex.Replace(code.ToUpperInvariant(), "[^A-ZА-Я0-9]+", "-").Trim('-'); var clauses = ExtractClauses(standardId, pages); var meta = new StandardMetadata { StandardId = standardId, Code = code, Title = title, SourceFileSha256 = ProfileStore.Sha256(pdfPath), PageCount = pages.Count, TextLayerDetected = pages.Any(p => p.TextLayerDetected), ImportedAt = DateTime.UtcNow };
|
||||||
|
return (meta, (IReadOnlyList<PdfPageText>)pages, (IReadOnlyList<StandardClause>)clauses);
|
||||||
|
}, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<StandardClause> ExtractClauses(string id, IReadOnlyList<PdfPageText> pages)
|
||||||
|
{
|
||||||
|
var result = new List<StandardClause>(); string? currentId = null; var currentText = new List<string>(); var start = 1;
|
||||||
|
void Flush(int end) { if (currentId is not null) result.Add(new StandardClause(id, currentId, "", string.Join(Environment.NewLine, currentText), start, end, 0.85)); }
|
||||||
|
foreach (var page in pages) foreach (var line in page.Text.Split('\n', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)) { var match = Regex.Match(line, "^(\\d+(?:\\.\\d+){0,5})[.)]?\\s+(.+)$"); if (match.Success) { Flush(page.PageNumber - 1); currentId = match.Groups[1].Value; currentText = [line]; start = page.PageNumber; } else if (currentId is not null) currentText.Add(line); }
|
||||||
|
Flush(pages.Count); return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class NoOpOcrService : IPdfOcrService
|
||||||
|
{
|
||||||
|
public Task<PdfPageText> RecognizePageAsync(string pdfPath, int pageNumber, CancellationToken cancellationToken) => Task.FromResult(new PdfPageText(pageNumber, "", false, "OCR_REQUIRED", []));
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
|
||||||
|
<ProjectReference Include="..\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj" />
|
||||||
|
<PackageReference Include="PdfPig" Version="0.1.9" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<IsTestProject>true</IsTestProject>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup><ProjectReference Include="..\..\src\DocxWorkbench.WordInterop\DocxWorkbench.WordInterop.csproj" /><ProjectReference Include="..\..\src\DocxWorkbench.OpenXml\DocxWorkbench.OpenXml.csproj" /><ProjectReference Include="..\..\src\StandardsWorkbench.Pdf\StandardsWorkbench.Pdf.csproj" /><PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" /></ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="coverlet.collector" Version="6.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||||
|
<PackageReference Include="xunit" Version="2.5.3" />
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Using Include="Xunit" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
+72
@@ -0,0 +1,72 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.Text.Json;
|
||||||
|
using DocumentFormat.OpenXml.Packaging;
|
||||||
|
using DocumentFormat.OpenXml.Wordprocessing;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocxWorkbench.WordInterop;
|
||||||
|
using DocxWorkbench.OpenXml;
|
||||||
|
using Xunit.Sdk;
|
||||||
|
|
||||||
|
namespace DocumentAutomation.IntegrationTests;
|
||||||
|
|
||||||
|
public sealed class WordComIntegrationTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void IntegrationAssemblyIsAvailable() => Assert.True(typeof(WordComIntegrationTests).Assembly.GetName().Name is not null);
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WordAvailability_DoesNotRequireOfficePia()
|
||||||
|
{
|
||||||
|
var names = typeof(WordDocumentService).Assembly.GetReferencedAssemblies().Select(x => x.Name).ToArray(); Assert.DoesNotContain(names, name => string.Equals(name, "office", StringComparison.OrdinalIgnoreCase) || string.Equals(name, "Microsoft.Office.Interop.Word", StringComparison.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Build_WithoutInsertionPoint_DoesNotStartWord()
|
||||||
|
{
|
||||||
|
var template = CreateDocx(false); var body = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".txt"); File.WriteAllText(body, "text"); var before = ProcessIds(); try { using var service = new WordDocumentService(); await Assert.ThrowsAsync<WordAutomationException>(() => service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = body, OutputDocxPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx") }, null, CancellationToken.None)); Assert.Empty(ProcessIds().Except(before)); } finally { File.Delete(template); File.Delete(body); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public async Task Build_RunsOnStaThread() { await RequireWord(); var result = await BuildTxt(); var log = JsonSerializer.Deserialize<JsonElement>(File.ReadAllText(result.LogPath)); Assert.Equal("STA", log.GetProperty("staApartment").GetString()); }
|
||||||
|
[Fact] public async Task Build_WithTxtBody_InsertsText() { await RequireWord(); var result = await BuildTxt(); Assert.Contains("TXT integration body", ReadMainText(result.OutputDocxPath)); }
|
||||||
|
[Fact] public async Task Build_WithDocxBody_InsertsDocument() { await RequireWord(); var template = CreateDocx(true); var body = CreateDocx(false, "DOCX integration body"); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); try { using var service = new WordDocumentService(); await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = body, OutputDocxPath = output }, null, CancellationToken.None); Assert.Contains("DOCX integration body", ReadMainText(output)); } finally { File.Delete(template); File.Delete(body); File.Delete(output); } }
|
||||||
|
[Fact] public async Task Build_ExportsPdf() { await RequireWord(); var result = await BuildTxt(); using var service = new WordDocumentService(); var pdf = await service.ExportPdfAsync(result.OutputDocxPath, Path.ChangeExtension(result.OutputDocxPath, ".pdf"), CancellationToken.None); Assert.True(File.Exists(pdf.PdfPath)); File.Delete(result.OutputDocxPath); File.Delete(pdf.PdfPath); File.Delete(result.LogPath); }
|
||||||
|
[Fact] public async Task Build_DoesNotLeaveCreatedWinwordProcess() { await RequireWord(); var before = ProcessIds(); var result = await BuildTxt(); await Task.Delay(500); Assert.Empty(ProcessIds().Except(before)); File.Delete(result.OutputDocxPath); File.Delete(result.LogPath); }
|
||||||
|
[Fact] public async Task Build_Failure_ReleasesWord() { await RequireWord(); var before = ProcessIds(); var template = CreateDocx(true); var body = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".txt"); var outputDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); Directory.CreateDirectory(outputDirectory); File.WriteAllText(body, "failure body"); try { using var service = new WordDocumentService(); await Assert.ThrowsAnyAsync<Exception>(() => service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = body, OutputDocxPath = outputDirectory }, null, CancellationToken.None)); await Task.Delay(500); Assert.Empty(ProcessIds().Except(before)); } finally { File.Delete(template); File.Delete(body); Directory.Delete(outputDirectory, true); } }
|
||||||
|
[Fact]
|
||||||
|
public async Task RuntimeGate_DesktopDocxBodyUsesTemplateCopy()
|
||||||
|
{
|
||||||
|
await RequireWord(); var template = @"C:\Users\codex\Desktop\156-титул-ПД.docx"; var body = @"C:\Users\codex\Desktop\НХС-33-УК3-ОЗХ-13011-000-НК-ОД.docx"; if (!File.Exists(template) || !File.Exists(body)) throw SkipException.ForSkip("The supplied Desktop DOCX fixtures are not available."); var copy = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); File.Copy(template, copy); try { using (var document = WordprocessingDocument.Open(copy, true)) { var main = document.MainDocumentPart ?? throw new InvalidDataException("Main part missing."); main.Document.Body!.Append(new Paragraph(new Run(new Text("{{DOC_BODY}}")))); main.Document.Save(); } using var service = new WordDocumentService(); var result = await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = copy, BodyPath = body, OutputDocxPath = output }, null, CancellationToken.None); Assert.True(File.Exists(result.OutputDocxPath)); } finally { File.Delete(copy); File.Delete(output); File.Delete(Path.ChangeExtension(output, ".generation.json")); }
|
||||||
|
}
|
||||||
|
[Fact]
|
||||||
|
public async Task ImportDocxBody_ExcludesSourceHeaders()
|
||||||
|
{
|
||||||
|
await RequireWord(); var template = CreateDocx(true); var source = CreateComplexSource(); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); var sourceHash = Convert.ToHexString(System.Security.Cryptography.SHA256.HashData(File.ReadAllBytes(source))); try { using var service = new WordDocumentService(); var result = await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = source, OutputDocxPath = output }, null, CancellationToken.None); using var document = WordprocessingDocument.Open(result.OutputDocxPath, false); var main = document.MainDocumentPart!; Assert.DoesNotContain(main.HeaderParts.SelectMany(x => x.Header?.Descendants<Text>() ?? []), x => x.Text == "SOURCE HEADER"); Assert.DoesNotContain(main.FooterParts.SelectMany(x => x.Footer?.Descendants<Text>() ?? []), x => x.Text == "SOURCE FOOTER"); Assert.Single(main.Document.Descendants<SectionProperties>()); Assert.NotNull(result.BodyImport); Assert.Contains("wdMainTextStory", result.BodyImport!.Plan.IncludedStories); Assert.Equal(sourceHash, Convert.ToHexString(System.Security.Cryptography.SHA256.HashData(File.ReadAllBytes(source)))); } finally { File.Delete(template); File.Delete(source); File.Delete(output); File.Delete(Path.ChangeExtension(output, ".generation.json")); }
|
||||||
|
}
|
||||||
|
[Fact]
|
||||||
|
public async Task ImportDocxBody_DoesNotChangeDestinationPageSetup()
|
||||||
|
{
|
||||||
|
await RequireWord(); var template = CreateDocx(true); var source = CreateComplexSource(); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); try { using var service = new WordDocumentService(); var result = await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = source, OutputDocxPath = output }, null, CancellationToken.None); using var document = WordprocessingDocument.Open(result.OutputDocxPath, false); Assert.Single(document.MainDocumentPart!.Document.Descendants<SectionProperties>()); Assert.Contains("DOCX complex body", document.MainDocumentPart.Document.InnerText); } finally { File.Delete(template); File.Delete(source); File.Delete(output); File.Delete(Path.ChangeExtension(output, ".generation.json")); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task TemplateLearning_EndToEnd_RealDocToDtemplateToDocxAndPdf()
|
||||||
|
{
|
||||||
|
await RequireWord(); var source = @"C:\Users\codex\Desktop\НХС-33-УК3-ОЗХ-13011-000-НК-ОД.doc"; var content = @"C:\Users\codex\Desktop\НХС-33-УК3-ОЗХ-13011-000-НК-ОД.docx"; if (!File.Exists(source) || !File.Exists(content)) throw SkipException.ForSkip("The supplied real DOC/DOCX fixtures are not available.");
|
||||||
|
var package = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".dtemplate"); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); var sourceHash = Convert.ToHexString(System.Security.Cryptography.SHA256.HashData(File.ReadAllBytes(source))); var before = ProcessIds();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var normalizer = new WordDocumentNormalizer(); var learning = new TemplateLearningService(normalizer, new TemplatePackageStore(), new OpenXmlDocumentInspector()); var learned = await learning.LearnAsync(new TemplateLearningRequest { SourcePath = source, TemplateName = "Real sample", OutputPackagePath = package }, null, CancellationToken.None); Assert.NotEmpty(learned.Slots); Assert.True(File.Exists(package)); using var generator = new TemplateDocumentGenerator(new TemplatePackageStore(), new WordDocumentNormalizer(), new OpenXmlDocumentInspector()); var result = await generator.GenerateAsync(new TemplateGenerationRequest { TemplatePackagePath = package, ContentSourcePath = content, OutputDocxPath = output }, null, CancellationToken.None); Assert.True(File.Exists(result.OutputDocxPath)); Assert.True(File.Exists(result.OutputPdfPath)); Assert.Equal(sourceHash, Convert.ToHexString(System.Security.Cryptography.SHA256.HashData(File.ReadAllBytes(source)))); Assert.Empty(ProcessIds().Except(before));
|
||||||
|
}
|
||||||
|
finally { File.Delete(package); File.Delete(output); File.Delete(Path.ChangeExtension(output, ".pdf")); File.Delete(Path.ChangeExtension(output, ".generation.json")); File.Delete(Path.ChangeExtension(output, ".validation.json")); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task RequireWord() { if (!OperatingSystem.IsWindows() || Type.GetTypeFromProgID("Word.Application", false) is null) throw SkipException.ForSkip("Microsoft Word COM is not installed or registered on this workstation."); await Task.CompletedTask; }
|
||||||
|
private static async Task<WordDocumentResult> BuildTxt() { var template = CreateDocx(true); var body = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".txt"); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); File.WriteAllText(body, "TXT integration body"); try { using var service = new WordDocumentService(); return await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = body, OutputDocxPath = output }, null, CancellationToken.None); } finally { File.Delete(template); File.Delete(body); } }
|
||||||
|
private static HashSet<int> ProcessIds() => Process.GetProcessesByName("WINWORD").Select(x => x.Id).ToHashSet();
|
||||||
|
private static string ReadMainText(string path) { using var doc = WordprocessingDocument.Open(path, false); return doc.MainDocumentPart?.Document.InnerText ?? ""; }
|
||||||
|
private static string CreateComplexSource()
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); using var doc = WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document); var main = doc.AddMainDocumentPart(); var header1 = main.AddNewPart<HeaderPart>(); header1.Header = new Header(new Paragraph(new Run(new Text("SOURCE HEADER")))); var footer1 = main.AddNewPart<FooterPart>(); footer1.Footer = new Footer(new Paragraph(new Run(new Text("SOURCE FOOTER")))); var body = new Body(); var first = new Paragraph(new ParagraphProperties(new SectionProperties(new HeaderReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(header1) }, new FooterReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(footer1) })), new Run(new Text("DOCX complex body"))); body.Append(first); body.Append(new Table(new TableRow(new TableCell(new Paragraph(new Run(new Text("source table"))))))); body.Append(new SectionProperties(new HeaderReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(header1) }, new FooterReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(footer1) })); main.Document = new Document(body); main.Document.Save(); return path;
|
||||||
|
}
|
||||||
|
private static string CreateDocx(bool marker, string text = "template body") { var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); using var doc = WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document); var main = doc.AddMainDocumentPart(); main.Document = new Document(new Body(new Paragraph(new Run(new Text(marker ? "{{DOC_BODY}}" : text))))); main.Document.Save(); return path; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
using DocumentFormat.OpenXml.Packaging;
|
||||||
|
using DocumentFormat.OpenXml.Wordprocessing;
|
||||||
|
using DocxWorkbench.Core;
|
||||||
|
using DocxWorkbench.OpenXml;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.Tests;
|
||||||
|
|
||||||
|
public sealed class DocumentInspectorTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Analyze_DocxTemplateAndTxtBody_Succeeds()
|
||||||
|
{
|
||||||
|
var docx = CreateDocx(marker: true); var txt = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".txt"); File.WriteAllText(txt, "line one\nline two"); try { var template = new OpenXmlDocumentInspector().Inspect(docx); var body = new TextDocumentInspector().Inspect(txt); Assert.Equal("TextMarker", template.InsertionPoint.Type); Assert.Equal(2, body.Paragraphs); } finally { File.Delete(docx); File.Delete(txt); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Analyze_DocxTemplateAndDocxBody_Succeeds()
|
||||||
|
{
|
||||||
|
var template = CreateDocx(marker: true); var body = CreateDocx(marker: false); try { var inspector = new OpenXmlDocumentInspector(); Assert.Equal("TextMarker", inspector.Inspect(template).InsertionPoint.Type); Assert.Equal(1, inspector.Inspect(body).Sections); } finally { File.Delete(template); File.Delete(body); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Inspect_DetectsMarkerInsertionPoint()
|
||||||
|
{
|
||||||
|
var path = CreateDocx(marker: true); try { Assert.Equal("TextMarker", new OpenXmlDocumentInspector().Inspect(path).InsertionPoint.Type); } finally { File.Delete(path); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Inspect_FindsPageFieldsInFooter()
|
||||||
|
{
|
||||||
|
var path = CreateDocx(marker: true, fields: true); try { var result = new OpenXmlDocumentInspector().Inspect(path); Assert.Contains(result.Fields, field => field.Type == "PAGE" && field.Part.StartsWith("FooterPart", StringComparison.Ordinal)); Assert.Contains(result.Fields, field => field.Type == "NUMPAGES"); } finally { File.Delete(path); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Inspect_CountsHeaderFooterGraphics()
|
||||||
|
{
|
||||||
|
var path = CreateDocx(marker: true, graphics: true); try { var result = new OpenXmlDocumentInspector().Inspect(path); Assert.True(result.ImageSummary.RasterImages >= 2); } finally { File.Delete(path); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Inspect_UnsupportedFormatIsDomainError()
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".bin"); File.WriteAllText(path, "not a document"); try { var exception = Assert.Throws<UnsupportedDocumentFormatException>(() => new OpenXmlDocumentInspector().Inspect(path)); Assert.Contains("Open XML inspector", exception.Message); } finally { File.Delete(path); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string CreateDocx(bool marker, bool fields = false, bool graphics = false)
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); using var document = WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document); var main = document.AddMainDocumentPart(); var body = new Body(new Paragraph(new Run(new Text(marker ? "{{DOC_BODY}}" : "body")))); main.Document = new Document(body);
|
||||||
|
var header = main.AddNewPart<HeaderPart>(); header.Header = new Header(new Paragraph(new Run(new Text("header")))); var footer = main.AddNewPart<FooterPart>();
|
||||||
|
if (fields) { var paragraph = new Paragraph(); paragraph.Append(new Run(new FieldChar { FieldCharType = FieldCharValues.Begin })); paragraph.Append(new Run(new FieldCode(" PAGE "))); paragraph.Append(new Run(new FieldChar { FieldCharType = FieldCharValues.End })); paragraph.Append(new SimpleField { Instruction = " NUMPAGES " }); footer.Footer = new Footer(paragraph); } else footer.Footer = new Footer(new Paragraph(new Run(new Text("footer"))));
|
||||||
|
if (graphics) { var image = header.AddImagePart(ImagePartType.Png); image.FeedData(new MemoryStream([137, 80, 78, 71])); var image2 = footer.AddImagePart(ImagePartType.Png); image2.FeedData(new MemoryStream([137, 80, 78, 71])); }
|
||||||
|
body.Append(new SectionProperties(new HeaderReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(header) }, new FooterReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(footer) })); main.Document.Save(); return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<IsTestProject>true</IsTestProject>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup><ProjectReference Include="..\..\src\DocxWorkbench.Core\DocxWorkbench.Core.csproj" /><ProjectReference Include="..\..\src\DocxWorkbench.OpenXml\DocxWorkbench.OpenXml.csproj" /><ProjectReference Include="..\..\src\DocxWorkbench.WordInterop\DocxWorkbench.WordInterop.csproj" /><PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" /></ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="coverlet.collector" Version="6.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||||
|
<PackageReference Include="xunit" Version="2.5.3" />
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Using Include="Xunit" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using DocxWorkbench.WordInterop;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.Tests;
|
||||||
|
|
||||||
|
public sealed class StaWordQueueTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public async Task Dispose_DrainsActiveJobAndIsIdempotent()
|
||||||
|
{
|
||||||
|
using var queue = new StaWordQueue(); using var started = new ManualResetEventSlim(false); using var release = new ManualResetEventSlim(false);
|
||||||
|
var job = queue.Enqueue(() => { started.Set(); Assert.Equal(ApartmentState.STA, Thread.CurrentThread.GetApartmentState()); release.Wait(); return 42; }, CancellationToken.None); Assert.True(started.Wait(TimeSpan.FromSeconds(2)));
|
||||||
|
var dispose = Task.Run(queue.Dispose); var completed = await Task.WhenAny(dispose, Task.Delay(100)); Assert.NotSame(dispose, completed); release.Set(); await dispose; Assert.Equal(42, await job); queue.Dispose(); Assert.Throws<ObjectDisposedException>(() => EnqueueAfterDispose(queue));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Enqueue_CancellationCompletesCanceledTask()
|
||||||
|
{
|
||||||
|
using var queue = new StaWordQueue(); using var cancellation = new CancellationTokenSource(); cancellation.Cancel(); await Assert.ThrowsAnyAsync<OperationCanceledException>(() => queue.Enqueue(() => 1, cancellation.Token));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void EnqueueAfterDispose(StaWordQueue queue) => queue.Enqueue(() => 1, CancellationToken.None);
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
using System.IO.Compression;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using DocxWorkbench.OpenXml;
|
||||||
|
using DocxWorkbench.WordInterop;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.Tests;
|
||||||
|
|
||||||
|
public sealed class TemplateLearningTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public async Task NormalizeDocx_UsesSafeWorkingCopy()
|
||||||
|
{
|
||||||
|
var source = CreateDocx("template"); var hash = Hash(source); var working = Path.Combine(Path.GetTempPath(), "learning-test-" + Guid.NewGuid().ToString("N")); using var normalizer = new WordDocumentNormalizer(); try { var result = await normalizer.NormalizeAsync(new DocumentNormalizationRequest { SourcePath = source, WorkingDirectory = working }, null, CancellationToken.None); Assert.False(result.WasConverted); Assert.NotEqual(Path.GetFullPath(source), Path.GetFullPath(result.NormalizedPath)); Assert.Equal(hash, Hash(source)); Assert.Equal(hash, result.SourceSha256); Assert.True(File.Exists(result.NormalizedPath)); } finally { File.Delete(source); if (Directory.Exists(working)) Directory.Delete(working, true); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task TemplatePackage_CanBeCreatedAndReopened()
|
||||||
|
{
|
||||||
|
var source = CreateDocx("{{DOC_BODY}}"); var package = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".dtemplate"); using var normalizer = new WordDocumentNormalizer(); try { var service = new TemplateLearningService(normalizer, new TemplatePackageStore()); var learned = await service.LearnAsync(new TemplateLearningRequest { SourcePath = source, TemplateName = "Unit template", OutputPackagePath = package }, null, CancellationToken.None); Assert.NotEmpty(learned.Slots); Assert.Contains(learned.PageArchetypes, x => x.IsFirstPage); using var archive = ZipFile.OpenRead(package); Assert.Contains(archive.Entries, x => x.FullName == "manifest.json"); Assert.Contains(archive.Entries, x => x.FullName == "template.docx"); var opened = new TemplatePackageStore().Open(package); Assert.Equal(learned.TemplateId, opened.Template.TemplateId); Assert.True(File.Exists(opened.TemplateDocxPath)); Directory.Delete(opened.WorkingDirectory, true); } finally { File.Delete(source); File.Delete(package); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string CreateDocx(string text) { var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); using var document = DocumentFormat.OpenXml.Packaging.WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document); var main = document.AddMainDocumentPart(); main.Document = new DocumentFormat.OpenXml.Wordprocessing.Document(new DocumentFormat.OpenXml.Wordprocessing.Body(new DocumentFormat.OpenXml.Wordprocessing.Paragraph(new DocumentFormat.OpenXml.Wordprocessing.Run(new DocumentFormat.OpenXml.Wordprocessing.Text(text))))); main.Document.Save(); return path; }
|
||||||
|
private static string Hash(string path) => Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(path)));
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using DocxWorkbench.Core;
|
||||||
|
|
||||||
|
namespace DocxWorkbench.Tests;
|
||||||
|
|
||||||
|
public sealed class WorkbenchStateTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void VerifyButton_DisabledBeforeBuild() { var state = new WorkbenchStateController(); Assert.False(state.CanValidate); }
|
||||||
|
[Fact]
|
||||||
|
public void VerifyButton_DisabledAfterBuildFailure() { var state = Ready(); state.BeginBuild(); state.BuildFailed(); Assert.False(state.CanValidate); Assert.False(state.CanOpenDocx); }
|
||||||
|
[Fact]
|
||||||
|
public void VerifyButton_EnabledAfterBuildSuccess() { var state = Ready(); state.BeginBuild(); state.BuildSucceeded(); Assert.True(state.CanValidate); Assert.True(state.CanOpenDocx); Assert.True(state.CanOpenPdf); }
|
||||||
|
private static WorkbenchStateController Ready() { var state = new WorkbenchStateController(); state.InputsSelected(true); state.AnalysisCompleted(true, true, true); return state; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using DocumentAutomation.Shared;
|
||||||
|
using StandardsWorkbench.Core;
|
||||||
|
|
||||||
|
namespace StandardsWorkbench.Tests;
|
||||||
|
|
||||||
|
public sealed class RulesEngineTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void OnlyApprovedRulesAreEvaluated()
|
||||||
|
{
|
||||||
|
var document = new DocumentInspectionResult { FilePath = "synthetic.docx", ContentControls = 1, Sections = 1, Paragraphs = 2, Tables = 0 };
|
||||||
|
var profile = new ApprovedRulesProfile { StandardId = "TEST", Code = "TEST", Revision = "1", Rules = [
|
||||||
|
new CandidateRule { CandidateId = "approved", StandardId = "TEST", ClauseId = "1", SourceText = "x", Title = "x", RuleKind = "ContentControlPresence", Status = "Approved" },
|
||||||
|
new CandidateRule { CandidateId = "new", StandardId = "TEST", ClauseId = "2", SourceText = "x", Title = "x", RuleKind = "SectionCount", Status = "New" }
|
||||||
|
], SourceFileSha256 = "test"};
|
||||||
|
var result = new RulesEngine().Evaluate(document, profile); Assert.Single(result); Assert.Equal(RuleEvaluationStatus.Pass, result[0].Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void FailedRuleHasClauseReference()
|
||||||
|
{
|
||||||
|
var document = new DocumentInspectionResult { FilePath = "synthetic.docx", ContentControls = 0, Sections = 1, Paragraphs = 1, Tables = 0 };
|
||||||
|
var rule = new CandidateRule { CandidateId = "cc", StandardId = "TEST", ClauseId = "6.3", SourcePage = 4, SourceText = "required", Title = "cc", RuleKind = "ContentControlPresence", Status = "Tested" };
|
||||||
|
var result = Assert.Single(new RulesEngine().Evaluate(document, new ApprovedRulesProfile { StandardId = "TEST", Code = "TEST", Revision = "1", SourceFileSha256 = "test", Rules = [rule] })); Assert.Equal(RuleEvaluationStatus.Fail, result.Status); Assert.Equal("6.3", result.ClauseId); Assert.Equal(4, result.SourcePage);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<IsTestProject>true</IsTestProject>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup><ProjectReference Include="..\..\src\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj" /></ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="coverlet.collector" Version="6.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||||
|
<PackageReference Include="xunit" Version="2.5.3" />
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Using Include="Xunit" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
artifacts/
|
||||||
|
.local-dotnet-sdk/
|
||||||
|
.local-tools/
|
||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
.vs/
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<LangVersion>latest</LangVersion>
|
||||||
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
<DebugType>portable</DebugType>
|
||||||
|
<AutoCAD2026ManagedDir Condition="'$(AutoCAD2026ManagedDir)' == '' and '$(Plant3D2026InstallDir)' != ''">$(Plant3D2026InstallDir)</AutoCAD2026ManagedDir>
|
||||||
|
<Plant3D2026ManagedDir Condition="'$(Plant3D2026ManagedDir)' == '' and '$(Plant3D2026InstallDir)' != ''">$(Plant3D2026InstallDir)\PLNT3D</Plant3D2026ManagedDir>
|
||||||
|
<Plant3D2026InstallDir Condition="'$(Plant3D2026InstallDir)' == '' and '$(AutoCAD2026ManagedDir)' != ''">$(AutoCAD2026ManagedDir)</Plant3D2026InstallDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.0.31903.59
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecAnnot.Abstractions", "src\PRecAnnot.Abstractions\PRecAnnot.Abstractions.csproj", "{10000000-0000-0000-0000-000000000001}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecAnnot.Core", "src\PRecAnnot.Core\PRecAnnot.Core.csproj", "{10000000-0000-0000-0000-000000000002}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecAnnot.Application", "src\PRecAnnot.Application\PRecAnnot.Application.csproj", "{10000000-0000-0000-0000-000000000003}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecAnnot.Plant3D2026", "src\PRecAnnot.Plant3D2026\PRecAnnot.Plant3D2026.csproj", "{10000000-0000-0000-0000-000000000004}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecAnnot.UI", "src\PRecAnnot.UI\PRecAnnot.UI.csproj", "{10000000-0000-0000-0000-000000000005}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecAnnot.Telemetry", "src\PRecAnnot.Telemetry\PRecAnnot.Telemetry.csproj", "{10000000-0000-0000-0000-000000000006}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecAnnot.Core.Tests", "tests\PRecAnnot.Core.Tests\PRecAnnot.Core.Tests.csproj", "{10000000-0000-0000-0000-000000000007}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{10000000-0000-0000-0000-000000000001}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000001}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000001}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000001}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000002}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000002}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000002}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000003}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000003}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000003}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000003}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000004}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000004}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000004}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000005}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000005}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000005}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000005}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000006}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000006}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000006}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000006}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000007}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000007}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000007}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{10000000-0000-0000-0000-000000000007}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# P_Rec_Annot Plant 3D 2026 foundation
|
||||||
|
|
||||||
|
Foundation for migration from the legacy P_Rec_Annot v1.0.4. Legacy sources remain read-only and are not copied here.
|
||||||
|
|
||||||
|
Current slice:
|
||||||
|
|
||||||
|
* `PRecAnnot.Abstractions` — Autodesk-free immutable contracts and DTOs;
|
||||||
|
* `PRecAnnot.Core` — deterministic annotation planning and duplicate filtering;
|
||||||
|
* `PRecAnnot.Application` — command registry and use-case orchestration;
|
||||||
|
* `PRecAnnot.Plant3D2026` — guarded adapter boundary; compilation against Plant 3D 2026 is blocked until the SDK/runtime is installed;
|
||||||
|
* `PRecAnnot.UI` — idempotent Ribbon registration model, without legacy `_netload`;
|
||||||
|
* `PRecAnnot.Telemetry` — local JSONL command-scope events, without project path/number;
|
||||||
|
* `PRecAnnot.Bundle.Tests` and `PRecAnnot.Core.Tests` — architecture/core/packaging checks.
|
||||||
|
|
||||||
|
The first vertical slice is intentionally a dry-run planning slice. It does not mutate DWG until the Plant 3D 2026 adapter is compiled and runtime-tested on a controlled project.
|
||||||
|
|
||||||
|
Build:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
dotnet build .\PRecAnnot2026.sln --configuration Release
|
||||||
|
dotnet test .\PRecAnnot2026.sln --configuration Release --no-build
|
||||||
|
```
|
||||||
|
|
||||||
|
When Plant 3D 2026 is installed, pass `/p:Plant3D2026InstallDir=...`. Autodesk assemblies are `Private=false`, `CopyLocal=false` and are never committed.
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ApplicationPackage SchemaVersion="1.0" Name="P_Rec_Annot" Description="P_Rec_Annot Plant 3D 2026" AppVersion="0.1.0" Author="NBIM">
|
||||||
|
<Components>
|
||||||
|
<!-- SeriesMin/SeriesMax and platform token are pending official/runtime verification. -->
|
||||||
|
<RuntimeRequirements OS="Win64" />
|
||||||
|
<ComponentEntry AppName="PRecAnnot2026" ModuleName="Contents\Windows\PRecAnnot.Plant3D2026.dll" AppDescription="P_Rec_Annot entry assembly" LoadReasons="LoadOnAutoCADStartup" />
|
||||||
|
</Components>
|
||||||
|
</ApplicationPackage>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Target architecture
|
||||||
|
|
||||||
|
Core and Abstractions have no Autodesk, WinForms or WPF references. Only `PRecAnnot.Plant3D2026` may reference installed Autodesk assemblies. DWG mutation remains synchronous on AutoCAD's thread; no `Task.Run` is used for database operations. Ribbon registration is guarded and unloadable. The bundle has one entry assembly and no legacy `_netload` chain.
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# Build
|
||||||
|
|
||||||
|
The workstation has .NET SDK 8.0.423 and Autodesk AutoCAD Plant 3D 2026 installed. The paths are deliberately supplied at build time; no machine-specific Autodesk path is stored in project files.
|
||||||
|
|
||||||
|
Detected assembly inventory:
|
||||||
|
|
||||||
|
| Assembly | Assembly version | Build input |
|
||||||
|
|---|---:|---|
|
||||||
|
| AcMgd.dll | 25.1.0.0 | `AutoCAD2026ManagedDir` |
|
||||||
|
| AcDbMgd.dll | 25.1.0.0 | `AutoCAD2026ManagedDir` |
|
||||||
|
| AcCoreMgd.dll | 25.1.0.0 | `AutoCAD2026ManagedDir` |
|
||||||
|
| AdWindows.dll | 5.2.1.1 | `AutoCAD2026ManagedDir` |
|
||||||
|
| PnP3dObjectsMgd.dll | 17.0.60.1 | `Plant3D2026ManagedDir` |
|
||||||
|
| PnPProjectManagerMgd.dll | 17.0.60.1 | `Plant3D2026ManagedDir` |
|
||||||
|
|
||||||
|
The actual build used:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
dotnet restore .\Plant3D2026\P_Rec_Annot\PRecAnnot2026.sln
|
||||||
|
dotnet build .\Plant3D2026\P_Rec_Annot\PRecAnnot2026.sln --configuration Release `
|
||||||
|
/p:AutoCAD2026ManagedDir="<AutoCAD managed directory>" `
|
||||||
|
/p:Plant3D2026ManagedDir="<Plant 3D managed directory>"
|
||||||
|
```
|
||||||
|
|
||||||
|
`PRecAnnot.Plant3D2026` now compiles against the real AutoCAD/Plant 3D 2026 metadata. The adapter has real `IExtensionApplication`, `CommandMethod`, `PlantApplication.CurrentProject`, `Document`, `Editor`, and `Autodesk.Windows` Ribbon references. The previous conditional foundation-only adapter was removed. Autodesk references are `Private=false` and `CopyLocal=false`.
|
||||||
|
|
||||||
|
Release emits one non-fatal WindowsBase reference conflict caused by Autodesk's legacy reference surface versus the .NET 8 reference pack. It does not copy Autodesk assemblies to output. Autodesk DLLs are excluded from Git, NuGet, bundle, and publish output.
|
||||||
|
|
||||||
|
The local smoke bundle is created at `Plant3D2026\P_Rec_Annot\artifacts\P_Rec_Annot.bundle`. Deploy is NOT PERFORMED.
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Command migration matrix
|
||||||
|
|
||||||
|
Initial active set is based on non-archive command registrations and Ribbon definitions in audit evidence. This matrix is deliberately explicit; commands remain blocked until Plant 3D 2026 runtime evidence exists.
|
||||||
|
|
||||||
|
| Legacy command | Legacy module | Target use case | Decision | Status | Blocker/test |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| PXP-AAV | AutoAnnotateView | automatic annotations in viewport | port after isolation | BLOCKED_WITH_REASON | 2026 assemblies/runtime |
|
||||||
|
| PXP-OA | OrthoAutoAnnotate | axis/support graphical annotations | port after isolation | BLOCKED_WITH_REASON | exact legacy rules/golden DWG |
|
||||||
|
| PXP-ALC | AutoLinenumberConnections | line-number connection annotations | reimplement | BLOCKED_WITH_REASON | DataLinks adapter |
|
||||||
|
| PXP-LN, PXP-ELN, PXP-ULN, PXP-ESN, PXP-RMP | AnnotateLineNumbers | line-number list/updates | reimplement | BLOCKED_WITH_REASON | golden cases |
|
||||||
|
| PXP-AE, PXP-IE | AutoElevation/InsertElevation | elevations | reimplement | BLOCKED_WITH_REASON | geometry/runtime |
|
||||||
|
| PXP-IOD | UpdateOrthoDrawings | batch update | defer to Wave 5 | BLOCKED_WITH_REASON | multi-DWG transaction |
|
||||||
|
| PXP-UOB | UpdateOrthoViewBlocks | viewport layers | adapter | BLOCKED_WITH_REASON | layer API |
|
||||||
|
| PXP-OSI, PXP-COV | OrthoAutoAnnotate/CheckOrthoView | locate/check objects | compare native | BLOCKED_WITH_REASON | runtime comparison |
|
||||||
|
| PXP-MA, CAC, BJ, mto-ma | PHPAnnotations/P3DNewMa | manual annotation blocks | port/review | BLOCKED_WITH_REASON | UI and block contract |
|
||||||
|
| PXP-AC | SwapAttributesMenuItem | swap annotation attributes | port after rules | BLOCKED_WITH_REASON | block schema |
|
||||||
|
|
||||||
|
Archive-only registrations are not published. No command is silently discarded.
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Golden test plan
|
||||||
|
|
||||||
|
Capture a minimal 2019 Ortho fixture with input objects, output blocks/attributes, text, layer, style, coordinates, rotation, scale, DataLinks, before/after usage event and repeat-run behavior. Recreate the same fixture in 2026 only after the adapter is available. Do not commit production DWG/DCF.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
RuleId,TargetClass,TargetMethod,LegacyFile,LegacyLines,Behavior,MigrationDecision,TestName
|
||||||
|
RULE-001,AnnotationRuleEngine,BuildPlan,AutoAnnotateView/Commands.cs,476-500,Remove prior annotations then insert calculated annotations,REIMPLEMENT_SAME_BEHAVIOR,ExistingAnnotation_IsUpdatedNotDuplicated
|
||||||
|
RULE-002,AnnotationRuleEngine,BuildPlan,OrthoAutoAnnotate/Commands.cs,6444-6488,Require Plant project and registered Ortho drawing,KEEP_AFTER_ISOLATION,PlantProjectAndOrthoDrawingRequired
|
||||||
|
RULE-003,PlantObjectReader,ReadObjects,README.md,96-101,Read EngineeringItems and line-group relationships through PnP API,REIMPLEMENT_SAME_BEHAVIOR,PlantAdapter_ReadsGoldenObjects
|
||||||
|
RULE-004,CommandRegistry,Foundation,OrthoLoader/Ribbon.cs,109-129,Expose annotation commands in annotation panel,REIMPLEMENT_SAME_BEHAVIOR,AllActiveCommands_AreMapped
|
||||||
|
@@ -0,0 +1,16 @@
|
|||||||
|
# Migration dashboard
|
||||||
|
|
||||||
|
The first real Plant 3D 2026 build is complete against the workstation assemblies (AutoCAD managed 25.1.0.0; Plant managed 17.0.60.1; AdWindows 5.2.1.1). Core remains Autodesk-free.
|
||||||
|
|
||||||
|
| Area | Status |
|
||||||
|
|---|---|
|
||||||
|
| `PHP_REC_ANNOT` | Registered real `CommandMethod`; primary diagnostic entry point |
|
||||||
|
| `PXP-AAV` | Registered real `CommandMethod`; diagnostic alias |
|
||||||
|
| `PXP-OA` | Registered real `CommandMethod`; diagnostic alias |
|
||||||
|
| Ribbon | Implemented with `Autodesk.Windows`; idempotent tab/panel guard |
|
||||||
|
| Adapter | Compiled against real 2026 assemblies |
|
||||||
|
| Bundle | Local smoke package built and checked for Autodesk DLL exclusion |
|
||||||
|
| Runtime | Not executed in AutoCAD/Plant process |
|
||||||
|
| Production deploy | NOT PERFORMED |
|
||||||
|
|
||||||
|
Fixed API assumptions: foundation-only lifecycle became `IExtensionApplication`; command descriptors became actual `CommandMethod` registrations; Plant project detection uses `PlantApplication.CurrentProject`; Ribbon uses `ComponentManager.Ribbon`, `RibbonTab`, `RibbonPanelSource`, and `RibbonButton`. Remaining blockers are runtime loading, Ortho API/data-link mapping, safe DWG transaction implementation, and golden fixture validation.
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Module migration matrix
|
||||||
|
|
||||||
|
| Legacy module | Target project | Classification | Wave |
|
||||||
|
|---|---|---|---|
|
||||||
|
| AnnotateLineNumbers | PRecAnnot.Core + Plant3D2026 | KEEP_AFTER_ISOLATION | 3 |
|
||||||
|
| AutoAnnotateView | Core + Plant3D2026 | REIMPLEMENT_SAME_BEHAVIOR | 1 |
|
||||||
|
| OrthoAutoAnnotate | Core + Plant3D2026 | REIMPLEMENT_SAME_BEHAVIOR | 1 |
|
||||||
|
| AutoLinenumberConnections | Core + Plant3D2026 | REIMPLEMENT_SAME_BEHAVIOR | 2 |
|
||||||
|
| AutoElevation/InsertElevation | Core + Plant3D2026 | REIMPLEMENT_SAME_BEHAVIOR | 3 |
|
||||||
|
| UpdateOrthoDrawings | Plant3D2026/Application | DEFER_AND_RETEST | 5 |
|
||||||
|
| OrthoLoader | bundle/entry composition root | DO_NOT_REUSE | 1 |
|
||||||
|
| Ribbon | PRecAnnot.UI | REIMPLEMENT | 1 |
|
||||||
|
| GetLinenumberAnnotationText | Plant adapter + Core mapper | KEEP_AFTER_ISOLATION | 2 |
|
||||||
|
| PHPAnnotations/P3DNewMa | UI + block adapter | REVIEW_USAGE | 4 |
|
||||||
|
| telemetry | PRecAnnot.Telemetry | REIMPLEMENT | 1 |
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Runtime test plan
|
||||||
|
|
||||||
|
Runtime smoke is ready but has not been executed in AutoCAD. The local package is `Plant3D2026\P_Rec_Annot\artifacts\P_Rec_Annot.bundle`.
|
||||||
|
|
||||||
|
Next-step installation command (intentionally not executed):
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Copy-Item -Recurse -Force .\Plant3D2026\P_Rec_Annot\artifacts\P_Rec_Annot.bundle `
|
||||||
|
"$env:APPDATA\Autodesk\ApplicationPlugins\P_Rec_Annot.bundle"
|
||||||
|
```
|
||||||
|
|
||||||
|
In a controlled Plant 3D 2026 session, verify that the entry assembly loads, the `Промхимпроект` tab and `Аннотации` panel occur once, and the `Аннотировать` button invokes `PHP_REC_ANNOT`. Open a Plant project and active DWG, run all three commands, verify the project guard and diagnostic-only behavior, and confirm no unhandled exception. Repeat initialization and confirm no Ribbon duplicate. DWG mutation, Ortho viewport/data-link behavior, undo, repeat-run idempotence, and golden-DWG comparison remain runtime blockers for the implementation wave.
|
||||||
|
|
||||||
|
Deploy status: NOT PERFORMED.
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
namespace PRecAnnot.Abstractions;
|
||||||
|
|
||||||
|
public sealed record OrthoViewportRef(string DrawingId, string ViewportId);
|
||||||
|
|
||||||
|
public sealed record PlantObjectData
|
||||||
|
{
|
||||||
|
public required string ObjectId { get; init; }
|
||||||
|
public required string ClassName { get; init; }
|
||||||
|
public string? LineNumber { get; init; }
|
||||||
|
public string? Tag { get; init; }
|
||||||
|
public string? DisplayName { get; init; }
|
||||||
|
public required AnnotationPoint Position { get; init; }
|
||||||
|
public double Rotation { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public readonly record struct AnnotationPoint(double X, double Y, double Z = 0);
|
||||||
|
|
||||||
|
public sealed record ExistingAnnotation(string StableKey, string? Text, AnnotationPoint Position);
|
||||||
|
|
||||||
|
public sealed record AnnotationRequest
|
||||||
|
{
|
||||||
|
public required OrthoViewportRef Viewport { get; init; }
|
||||||
|
public required IReadOnlyList<PlantObjectData> Objects { get; init; }
|
||||||
|
public required IReadOnlyList<ExistingAnnotation> Existing { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record AnnotationIntent
|
||||||
|
{
|
||||||
|
public required string StableKey { get; init; }
|
||||||
|
public required string Text { get; init; }
|
||||||
|
public required AnnotationPoint Position { get; init; }
|
||||||
|
public required double Rotation { get; init; }
|
||||||
|
public required string ClassName { get; init; }
|
||||||
|
public required string Layer { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record AnnotationPlan
|
||||||
|
{
|
||||||
|
public required IReadOnlyList<AnnotationIntent> Create { get; init; }
|
||||||
|
public required IReadOnlyList<AnnotationIntent> Update { get; init; }
|
||||||
|
public required IReadOnlyList<string> Delete { get; init; }
|
||||||
|
public required IReadOnlyList<string> SkipReasons { get; init; }
|
||||||
|
public int ExaminedCount { get; init; }
|
||||||
|
public bool IsDeterministic { get; init; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IPlantProjectContext
|
||||||
|
{
|
||||||
|
bool IsPlantProjectOpen { get; }
|
||||||
|
string? ProjectName { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IOrthoDrawingContext
|
||||||
|
{
|
||||||
|
bool IsOrthoDrawing { get; }
|
||||||
|
IReadOnlyList<OrthoViewportRef> GetViewports();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IPlantObjectReader
|
||||||
|
{
|
||||||
|
IReadOnlyList<PlantObjectData> ReadObjects(OrthoViewportRef viewport, CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IAnnotationRepository
|
||||||
|
{
|
||||||
|
IReadOnlyList<ExistingAnnotation> FindExisting(OrthoViewportRef viewport);
|
||||||
|
AnnotationWriteResult Apply(AnnotationPlan plan, CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record AnnotationWriteResult(int Created, int Updated, int Deleted, int Skipped);
|
||||||
|
|
||||||
|
public interface IAnnotationRuleEngine
|
||||||
|
{
|
||||||
|
AnnotationPlan BuildPlan(AnnotationRequest request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record CommandUsageEvent
|
||||||
|
{
|
||||||
|
public required string CommandName { get; init; }
|
||||||
|
public required string ResultStatus { get; init; }
|
||||||
|
public int ObjectsExamined { get; init; }
|
||||||
|
public int AnnotationsCreated { get; init; }
|
||||||
|
public int AnnotationsUpdated { get; init; }
|
||||||
|
public int AnnotationsDeleted { get; init; }
|
||||||
|
public int AnnotationsSkipped { get; init; }
|
||||||
|
public int WarningCount { get; init; }
|
||||||
|
public int ErrorCount { get; init; }
|
||||||
|
public long DurationMilliseconds { get; init; }
|
||||||
|
public DateTimeOffset TimestampUtc { get; init; } = DateTimeOffset.UtcNow;
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ICommandUsageSink
|
||||||
|
{
|
||||||
|
void Record(CommandUsageEvent usageEvent);
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup><TargetFramework>net8.0</TargetFramework></PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
namespace PRecAnnot.Application;
|
||||||
|
|
||||||
|
public sealed record PRecAnnotCommandDescriptor
|
||||||
|
{
|
||||||
|
public required string CommandName { get; init; }
|
||||||
|
public required string DisplayName { get; init; }
|
||||||
|
public required string UseCaseId { get; init; }
|
||||||
|
public required string RibbonPanel { get; init; }
|
||||||
|
public bool RequiresPlantProject { get; init; }
|
||||||
|
public bool RequiresOrthoDrawing { get; init; }
|
||||||
|
public bool RequiresSelection { get; init; }
|
||||||
|
public string Status { get; init; } = "BLOCKED_WITH_REASON";
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class CommandRegistry
|
||||||
|
{
|
||||||
|
private readonly IReadOnlyDictionary<string, PRecAnnotCommandDescriptor> _commands;
|
||||||
|
|
||||||
|
public CommandRegistry(IEnumerable<PRecAnnotCommandDescriptor> commands)
|
||||||
|
{
|
||||||
|
var list = commands.ToList();
|
||||||
|
if (list.GroupBy(x => x.CommandName, StringComparer.OrdinalIgnoreCase).Any(x => x.Count() > 1))
|
||||||
|
throw new ArgumentException("Command names must be unique.", nameof(commands));
|
||||||
|
_commands = list.ToDictionary(x => x.CommandName, StringComparer.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IReadOnlyCollection<PRecAnnotCommandDescriptor> Commands => _commands.Values.ToArray();
|
||||||
|
public bool TryGet(string name, out PRecAnnotCommandDescriptor? descriptor) => _commands.TryGetValue(name, out descriptor);
|
||||||
|
|
||||||
|
public static CommandRegistry Foundation() => new(new[]
|
||||||
|
{
|
||||||
|
new PRecAnnotCommandDescriptor { CommandName = "PHP_REC_ANNOT", DisplayName = "Аннотировать", UseCaseId = "ortho-annotation", RibbonPanel = "Аннотации", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" },
|
||||||
|
new PRecAnnotCommandDescriptor { CommandName = "PXP-AAV", DisplayName = "Разместить аннотации автоматически", UseCaseId = "auto-annotate-view", RibbonPanel = "Аннотации", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" },
|
||||||
|
new PRecAnnotCommandDescriptor { CommandName = "PXP-OA", DisplayName = "Разместить осевые линии и опоры", UseCaseId = "ortho-axes-supports", RibbonPanel = "Осевые линии и опоры", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" }
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup><TargetFramework>net8.0</TargetFramework></PropertyGroup>
|
||||||
|
<ItemGroup><ProjectReference Include="..\PRecAnnot.Abstractions\PRecAnnot.Abstractions.csproj" /></ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
using PRecAnnot.Abstractions;
|
||||||
|
|
||||||
|
namespace PRecAnnot.Core;
|
||||||
|
|
||||||
|
public sealed class AnnotationRuleEngine : IAnnotationRuleEngine
|
||||||
|
{
|
||||||
|
public AnnotationPlan BuildPlan(AnnotationRequest request)
|
||||||
|
{
|
||||||
|
var existing = request.Existing.ToDictionary(x => x.StableKey, StringComparer.OrdinalIgnoreCase);
|
||||||
|
var create = new List<AnnotationIntent>();
|
||||||
|
var update = new List<AnnotationIntent>();
|
||||||
|
var skipped = new List<string>();
|
||||||
|
|
||||||
|
foreach (var item in request.Objects.OrderBy(x => x.ObjectId, StringComparer.Ordinal))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(item.LineNumber) && string.IsNullOrWhiteSpace(item.Tag))
|
||||||
|
{
|
||||||
|
skipped.Add($"{item.ObjectId}:missing-line-number-or-tag");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var text = BuildText(item);
|
||||||
|
var intent = new AnnotationIntent
|
||||||
|
{
|
||||||
|
StableKey = $"{request.Viewport.DrawingId}:{request.Viewport.ViewportId}:{item.ObjectId}",
|
||||||
|
Text = text,
|
||||||
|
Position = item.Position,
|
||||||
|
Rotation = item.Rotation,
|
||||||
|
ClassName = item.ClassName,
|
||||||
|
Layer = "PXP_ANNOTATION"
|
||||||
|
};
|
||||||
|
|
||||||
|
if (existing.ContainsKey(intent.StableKey)) update.Add(intent); else create.Add(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new AnnotationPlan
|
||||||
|
{
|
||||||
|
Create = create,
|
||||||
|
Update = update,
|
||||||
|
Delete = Array.Empty<string>(),
|
||||||
|
SkipReasons = skipped,
|
||||||
|
ExaminedCount = request.Objects.Count
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string BuildText(PlantObjectData item) =>
|
||||||
|
string.IsNullOrWhiteSpace(item.LineNumber) ? item.Tag!.Trim() : item.LineNumber.Trim();
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup><TargetFramework>net8.0</TargetFramework></PropertyGroup>
|
||||||
|
<ItemGroup><ProjectReference Include="..\PRecAnnot.Abstractions\PRecAnnot.Abstractions.csproj" /></ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
using Autodesk.AutoCAD.ApplicationServices;
|
||||||
|
using Autodesk.AutoCAD.EditorInput;
|
||||||
|
using Autodesk.AutoCAD.Runtime;
|
||||||
|
using Autodesk.ProcessPower.PlantInstance;
|
||||||
|
using Autodesk.Windows;
|
||||||
|
using AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application;
|
||||||
|
|
||||||
|
namespace PRecAnnot.Plant3D2026;
|
||||||
|
|
||||||
|
public sealed class EntryPoint : IExtensionApplication
|
||||||
|
{
|
||||||
|
public void Initialize() => RibbonIntegration.Register();
|
||||||
|
|
||||||
|
public void Terminate() { }
|
||||||
|
|
||||||
|
[CommandMethod("PHP_REC_ANNOT")]
|
||||||
|
public void PrimaryCommand() => RunDiagnostic("PHP_REC_ANNOT");
|
||||||
|
|
||||||
|
[CommandMethod("PXP-AAV")]
|
||||||
|
public void AutoAnnotateViewCommand() => RunDiagnostic("PXP-AAV");
|
||||||
|
|
||||||
|
[CommandMethod("PXP-OA")]
|
||||||
|
public void OrthoAnnotateCommand() => RunDiagnostic("PXP-OA");
|
||||||
|
|
||||||
|
private static void RunDiagnostic(string commandName)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Document? document = AcadApplication.DocumentManager.MdiActiveDocument;
|
||||||
|
if (document is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Editor editor = document.Editor;
|
||||||
|
if (PlantApplication.CurrentProject is null)
|
||||||
|
{
|
||||||
|
editor.WriteMessage("\nP_Rec_Annot: активный Plant 3D project не найден; DWG не изменён.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
editor.WriteMessage($"\nP_Rec_Annot {commandName}: Plant 3D project '{PlantApplication.CurrentProject.Name}' найден; diagnostic-only, DWG не изменён.");
|
||||||
|
}
|
||||||
|
catch (System.Exception exception)
|
||||||
|
{
|
||||||
|
try { AcadApplication.DocumentManager.MdiActiveDocument?.Editor.WriteMessage($"\nP_Rec_Annot: безопасная диагностика завершилась ошибкой: {exception.Message}"); }
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static class RibbonIntegration
|
||||||
|
{
|
||||||
|
private const string TabId = "PRecAnnot.Plant3D2026";
|
||||||
|
private const string Command = "PHP_REC_ANNOT ";
|
||||||
|
|
||||||
|
public static void Register()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
RibbonControl? ribbon = ComponentManager.Ribbon;
|
||||||
|
if (ribbon is null) return;
|
||||||
|
|
||||||
|
RibbonTab? tab = ribbon.Tabs.FirstOrDefault(item => string.Equals(item.Id, TabId, StringComparison.OrdinalIgnoreCase));
|
||||||
|
if (tab is null)
|
||||||
|
{
|
||||||
|
tab = new RibbonTab { Id = TabId, Title = "Промхимпроект" };
|
||||||
|
ribbon.Tabs.Add(tab);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tab.Panels.Any(panel => string.Equals(panel.Source?.Title, "Аннотации", StringComparison.OrdinalIgnoreCase))) return;
|
||||||
|
|
||||||
|
RibbonPanelSource source = new() { Title = "Аннотации" };
|
||||||
|
source.Items.Add(new RibbonButton { Text = "Аннотировать", ShowText = true, CommandParameter = Command });
|
||||||
|
tab.Panels.Add(new RibbonPanel { Source = source });
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Ribbon is optional; command-line registration remains available.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup><TargetFramework>net8.0-windows</TargetFramework><PlatformTarget>x64</PlatformTarget><UseWindowsForms>true</UseWindowsForms><EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition></PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PRecAnnot.Abstractions\PRecAnnot.Abstractions.csproj" />
|
||||||
|
<ProjectReference Include="..\PRecAnnot.Application\PRecAnnot.Application.csproj" />
|
||||||
|
<ProjectReference Include="..\PRecAnnot.Core\PRecAnnot.Core.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup Condition="Exists('$(AutoCAD2026ManagedDir)') and Exists('$(Plant3D2026ManagedDir)')">
|
||||||
|
<Reference Include="AcMgd"><HintPath>$(AutoCAD2026ManagedDir)\AcMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
||||||
|
<Reference Include="AcDbMgd"><HintPath>$(AutoCAD2026ManagedDir)\AcDbMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
||||||
|
<Reference Include="AcCoreMgd"><HintPath>$(AutoCAD2026ManagedDir)\AcCoreMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
||||||
|
<Reference Include="AdWindows"><HintPath>$(AutoCAD2026ManagedDir)\AdWindows.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
||||||
|
<Reference Include="PnPDataLinks"><HintPath>$(AutoCAD2026ManagedDir)\PnPDataLinks.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
||||||
|
<Reference Include="PnPProjectManagerMgd"><HintPath>$(Plant3D2026ManagedDir)\PnPProjectManagerMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
||||||
|
<Reference Include="PnP3dObjectsMgd"><HintPath>$(Plant3D2026ManagedDir)\PnP3dObjectsMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
namespace PRecAnnot.Plant3D2026;
|
||||||
|
|
||||||
|
public sealed record Plant3D2026Availability(bool IsAvailable, string InstallDirectory, IReadOnlyList<string> MissingAssemblies)
|
||||||
|
{
|
||||||
|
public static Plant3D2026Availability Detect(string installDirectory)
|
||||||
|
{
|
||||||
|
var expected = new[] { "AcMgd.dll", "AcDbMgd.dll", "AcCoreMgd.dll", "PnPDataLinks.dll", Path.Combine("PLNT3D", "PnPProjectManagerMgd.dll"), Path.Combine("PLNT3D", "PnP3dObjectsMgd.dll") };
|
||||||
|
var missing = expected.Where(x => !File.Exists(Path.Combine(installDirectory, x))).ToArray();
|
||||||
|
return new(missing.Length == 0, installDirectory, missing);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class Plant3D2026BlockedException(Plant3D2026Availability availability)
|
||||||
|
: InvalidOperationException($"Plant 3D 2026 assemblies are unavailable at '{availability.InstallDirectory}'. Missing: {string.Join(", ", availability.MissingAssemblies)}") { }
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using System.Text.Json;
|
||||||
|
using PRecAnnot.Abstractions;
|
||||||
|
|
||||||
|
namespace PRecAnnot.Telemetry;
|
||||||
|
|
||||||
|
public sealed class JsonlUsageSink(string path) : ICommandUsageSink
|
||||||
|
{
|
||||||
|
private readonly object _gate = new();
|
||||||
|
public void Record(CommandUsageEvent usageEvent)
|
||||||
|
{
|
||||||
|
var json = JsonSerializer.Serialize(usageEvent);
|
||||||
|
lock (_gate) File.AppendAllText(path, json + Environment.NewLine);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup><TargetFramework>net8.0</TargetFramework></PropertyGroup>
|
||||||
|
<ItemGroup><ProjectReference Include="..\PRecAnnot.Abstractions\PRecAnnot.Abstractions.csproj" /></ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup><TargetFramework>net8.0-windows</TargetFramework><UseWindowsForms>true</UseWindowsForms></PropertyGroup>
|
||||||
|
<ItemGroup><ProjectReference Include="..\PRecAnnot.Application\PRecAnnot.Application.csproj" /></ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using PRecAnnot.Application;
|
||||||
|
|
||||||
|
namespace PRecAnnot.UI;
|
||||||
|
|
||||||
|
public sealed class RibbonRegistration
|
||||||
|
{
|
||||||
|
private readonly HashSet<string> _registered = new(StringComparer.OrdinalIgnoreCase);
|
||||||
|
public bool Register(CommandRegistry registry)
|
||||||
|
{
|
||||||
|
var changed = false;
|
||||||
|
foreach (var item in registry.Commands)
|
||||||
|
changed |= _registered.Add($"{item.RibbonPanel}:{item.CommandName}");
|
||||||
|
return changed;
|
||||||
|
}
|
||||||
|
public void Unregister(CommandRegistry registry) { foreach (var item in registry.Commands) _registered.Remove($"{item.RibbonPanel}:{item.CommandName}"); }
|
||||||
|
public int RegisteredCount => _registered.Count;
|
||||||
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
using PRecAnnot.Abstractions;
|
||||||
|
using PRecAnnot.Application;
|
||||||
|
using PRecAnnot.Core;
|
||||||
|
using PRecAnnot.UI;
|
||||||
|
|
||||||
|
namespace PRecAnnot.Core.Tests;
|
||||||
|
|
||||||
|
public sealed class FoundationTests
|
||||||
|
{
|
||||||
|
private static string ProjectRoot
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var directory = new DirectoryInfo(AppContext.BaseDirectory);
|
||||||
|
while (directory is not null && !File.Exists(Path.Combine(directory.FullName, "PRecAnnot2026.sln"))) directory = directory.Parent;
|
||||||
|
return directory?.FullName ?? throw new DirectoryNotFoundException("PRecAnnot2026.sln was not found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void Plan_IsDeterministic()
|
||||||
|
{
|
||||||
|
var engine = new AnnotationRuleEngine();
|
||||||
|
var request = new AnnotationRequest { Viewport = new("d", "v"), Objects = new[] { new PlantObjectData { ObjectId = "2", ClassName = "Pipe", LineNumber = "L-2", Position = new(2, 2) }, new PlantObjectData { ObjectId = "1", ClassName = "Pipe", LineNumber = "L-1", Position = new(1, 1) } }, Existing = Array.Empty<ExistingAnnotation>() };
|
||||||
|
var plan = engine.BuildPlan(request);
|
||||||
|
Assert.Equal(new[] { "1", "2" }, plan.Create.Select(x => x.StableKey.Split(':').Last()));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void ExistingAnnotation_IsUpdatedNotDuplicated()
|
||||||
|
{
|
||||||
|
var item = new PlantObjectData { ObjectId = "1", ClassName = "Valve", Tag = "V-1", Position = new(0, 0) };
|
||||||
|
var plan = new AnnotationRuleEngine().BuildPlan(new AnnotationRequest { Viewport = new("d", "v"), Objects = new[] { item }, Existing = new[] { new ExistingAnnotation("d:v:1", "old", new(0, 0)) } });
|
||||||
|
Assert.Empty(plan.Create); Assert.Single(plan.Update);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void CoreContracts_DoNotExposeAutodeskTypes()
|
||||||
|
{
|
||||||
|
var names = typeof(AnnotationRequest).Assembly.GetReferencedAssemblies().Select(x => x.Name).ToArray();
|
||||||
|
Assert.DoesNotContain(names, x => x is not null && x.StartsWith("Ac", StringComparison.OrdinalIgnoreCase));
|
||||||
|
Assert.DoesNotContain(names, x => x is not null && x.StartsWith("Autodesk", StringComparison.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void RibbonRegistration_IsIdempotent()
|
||||||
|
{
|
||||||
|
var ribbon = new RibbonRegistration(); var registry = CommandRegistry.Foundation();
|
||||||
|
Assert.True(ribbon.Register(registry)); Assert.False(ribbon.Register(registry)); Assert.Equal(3, ribbon.RegisteredCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void PlantAdapter_LoadsAgainst2026Assemblies()
|
||||||
|
{
|
||||||
|
var adapter = Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "bin", "Release", "net8.0-windows", "PRecAnnot.Plant3D2026.dll");
|
||||||
|
var assembly = System.Reflection.AssemblyName.GetAssemblyName(adapter);
|
||||||
|
var project = File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "PRecAnnot.Plant3D2026.csproj"));
|
||||||
|
Assert.NotNull(assembly);
|
||||||
|
Assert.Contains("AcMgd", project);
|
||||||
|
Assert.Contains("PnPProjectManagerMgd", project);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void CommandClass_HasCommandMethodAttributes()
|
||||||
|
{
|
||||||
|
var source = File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "EntryPoint.cs"));
|
||||||
|
Assert.Contains("[CommandMethod(\"PHP_REC_ANNOT\")]", source);
|
||||||
|
Assert.Contains("[CommandMethod(\"PXP-AAV\")]", source);
|
||||||
|
Assert.Contains("[CommandMethod(\"PXP-OA\")]", source);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void PrimaryCommand_IsRegistered() => Assert.Contains("[CommandMethod(\"PHP_REC_ANNOT\")]", File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "EntryPoint.cs")));
|
||||||
|
[Fact] public void LegacyAliases_AreRegistered() => Assert.True(File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "EntryPoint.cs")).Contains("PXP-AAV") && File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "EntryPoint.cs")).Contains("PXP-OA"));
|
||||||
|
[Fact] public void RibbonCommand_ReferencesRegisteredCommand() => Assert.Contains("PHP_REC_ANNOT ", File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "EntryPoint.cs")));
|
||||||
|
|
||||||
|
[Fact] public void AutodeskReferences_AreNotCopyLocal()
|
||||||
|
{
|
||||||
|
var project = File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "PRecAnnot.Plant3D2026.csproj"));
|
||||||
|
Assert.DoesNotContain("<Private>true</Private>", project);
|
||||||
|
Assert.DoesNotContain("<CopyLocal>true</CopyLocal>", project);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void Bundle_DoesNotContainAutodeskAssemblies()
|
||||||
|
{
|
||||||
|
var root = Path.Combine(ProjectRoot, "artifacts", "P_Rec_Annot.bundle");
|
||||||
|
if (!Directory.Exists(root)) return;
|
||||||
|
Assert.DoesNotContain(Directory.EnumerateFiles(root, "*.dll", SearchOption.AllDirectories), path => Path.GetFileName(path).StartsWith("PnP", StringComparison.OrdinalIgnoreCase) || new[] { "AcMgd.dll", "AcDbMgd.dll", "AcCoreMgd.dll", "AdWindows.dll" }.Contains(Path.GetFileName(path), StringComparer.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] public void Core_HasNoAutodeskReferences()
|
||||||
|
{
|
||||||
|
var references = typeof(AnnotationRequest).Assembly.GetReferencedAssemblies();
|
||||||
|
Assert.DoesNotContain(references, x => x.Name?.StartsWith("Autodesk", StringComparison.OrdinalIgnoreCase) == true || x.Name?.StartsWith("Ac", StringComparison.OrdinalIgnoreCase) == true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup><TargetFramework>net8.0-windows</TargetFramework><IsPackable>false</IsPackable><IsTestProject>true</IsTestProject></PropertyGroup>
|
||||||
|
<ItemGroup><ProjectReference Include="..\..\src\PRecAnnot.Core\PRecAnnot.Core.csproj" /><ProjectReference Include="..\..\src\PRecAnnot.Application\PRecAnnot.Application.csproj" /><ProjectReference Include="..\..\src\PRecAnnot.UI\PRecAnnot.UI.csproj" /></ItemGroup>
|
||||||
|
<ItemGroup><PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" /><PackageReference Include="xunit" Version="2.5.3" /><PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" /></ItemGroup>
|
||||||
|
<ItemGroup><Using Include="Xunit" /></ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
param([ValidateSet('Debug','Release')][string]$Configuration='Release',[Parameter(Mandatory=$true)][string]$AutoCAD2026ManagedDir,[Parameter(Mandatory=$true)][string]$Plant3D2026ManagedDir)
|
||||||
|
$ErrorActionPreference='Stop'
|
||||||
|
dotnet build (Join-Path $PSScriptRoot '..\PRecAnnot2026.sln') --configuration $Configuration /p:AutoCAD2026ManagedDir=$AutoCAD2026ManagedDir /p:Plant3D2026ManagedDir=$Plant3D2026ManagedDir
|
||||||
|
if($LASTEXITCODE -ne 0){ throw "Build failed: $LASTEXITCODE" }
|
||||||
|
$bundleRoot=Join-Path $PSScriptRoot '..\artifacts\P_Rec_Annot.bundle'
|
||||||
|
$contents=Join-Path $bundleRoot 'Contents\Windows'
|
||||||
|
New-Item -ItemType Directory -Force -Path $contents | Out-Null
|
||||||
|
$output=Join-Path $PSScriptRoot "..\src\PRecAnnot.Plant3D2026\bin\$Configuration\net8.0-windows"
|
||||||
|
Get-ChildItem $output -File -Filter '*.dll' | Copy-Item -Destination $contents -Force
|
||||||
|
Copy-Item (Join-Path $PSScriptRoot '..\bundle\P_Rec_Annot.bundle\PackageContents.xml') $bundleRoot -Force
|
||||||
|
Write-Host 'Bundle assembly build completed; deployment is intentionally not performed.'
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
param([string]$BundleRoot=(Join-Path $PSScriptRoot '..\artifacts\P_Rec_Annot.bundle'))
|
||||||
|
$ErrorActionPreference='Stop'
|
||||||
|
$package=Join-Path $BundleRoot 'PackageContents.xml'
|
||||||
|
[xml]$xml=Get-Content -LiteralPath $package
|
||||||
|
$entry=$xml.ApplicationPackage.Components.ComponentEntry
|
||||||
|
if(@($entry).Count -ne 1){throw 'Bundle must have exactly one entry assembly.'}
|
||||||
|
if($entry.ModuleName -match '_netload|OrthoLoader|Settings.xml'){throw 'Legacy loading chain is forbidden.'}
|
||||||
|
if($entry.ModuleName -notmatch 'PRecAnnot\.Plant3D2026\.dll'){throw 'Unexpected entry assembly.'}
|
||||||
|
if(-not (Test-Path (Join-Path $BundleRoot 'Contents\Windows\PRecAnnot.Plant3D2026.dll'))){throw 'Entry assembly is missing.'}
|
||||||
|
$forbidden='^(AcMgd|AcDbMgd|AcCoreMgd|AdWindows|PnP.*)\.dll$'
|
||||||
|
$forbiddenFiles=Get-ChildItem $BundleRoot -Recurse -File | Where-Object { $_.Name -match $forbidden -or $_.Extension -in '.pdb','.cs' -or $_.FullName -match '\\(bin|obj)\\' }
|
||||||
|
if($forbiddenFiles){throw "Bundle contains forbidden files: $($forbiddenFiles.FullName -join ', ')"}
|
||||||
|
Write-Host 'Bundle manifest is structurally valid.'
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# Аудит P_Rec_Annot v1.0.4
|
||||||
|
|
||||||
|
Статический read-only аудит каталога `C:\dev\autodesk\link\P_Rec_Annot\v1.0.4\repo`. Исходник не запускался, не собирался и не изменялся. `link` — symbolic link на `\\phpsrv03\NBIM\code\CS`; каталог `repo` внутри ссылки — обычный directory без собственного `.git`.
|
||||||
|
|
||||||
|
## Краткий вывод
|
||||||
|
|
||||||
|
P_Rec_Annot — не одна команда, а комплект из 25 legacy-проектов DLL в одном решении. Его ядро обслуживает орто-чертежи Plant 3D: пакетное обновление, размещение и обновление line-number annotations, автоматические осевые линии/опоры, высотные отметки, проверку отсутствующих объектов, слои viewport и ручные annotation blocks. README исходника прямо называет former `OrthoTools.2019` (`README.md:1-5`) и перечисляет пользовательские команды (`README.md:8-31`).
|
||||||
|
|
||||||
|
Наиболее употребляемым в агрегате XLSX является имя `P_Rec_Annot` с 218 796 единицами `Количество запусков`. В самом исходном комплекте не найден подтверждённый writer этого счётчика: найдено только использование `Environment.MachineName` для выбора пользовательского индекса (`GetLinenumberAnnotationText/LinenumberAnnotation.cs:225-250`). Поэтому 218 796 нельзя доказательно трактовать как число ручных запусков; это внешний агрегат, семантику которого нужно подтвердить по источнику telemetry.
|
||||||
|
|
||||||
|
## Факты инвентаризации
|
||||||
|
|
||||||
|
| Показатель | Значение |
|
||||||
|
|---|---:|
|
||||||
|
| Файлов | 271 |
|
||||||
|
| C# исходников вне bin/obj/lib | 120 |
|
||||||
|
| Проектов `.csproj` | 25 |
|
||||||
|
| DLL в исходном комплекте | 32 |
|
||||||
|
| AutoCAD-команд, включая архивные совпадения | 49 |
|
||||||
|
| Ribbon/even-handler/database/write evidence строк | 4 402+ |
|
||||||
|
| Target framework актуальных проектов | `.NET Framework 4.7` |
|
||||||
|
| Platform target | `x64` |
|
||||||
|
| Решение | `P_Rec_Annot.sln` |
|
||||||
|
|
||||||
|
### Подтверждённые точки входа
|
||||||
|
|
||||||
|
* `OrthoLoader` реализует загрузку библиотек: читает `Settings.xml`, строит путь от расположения текущей DLL и вызывает `Editor.Command("._netload", ...)` для каждой сборки (`OrthoLoader/Loader.cs:24-29`, `48-82`, `105-118`).
|
||||||
|
* `Ribbon` реализует `IExtensionApplication`, подписывается на `ComponentManager.ItemInitialized`, создаёт вкладку `PluginsOrtho`, восемь панелей и кнопки с командами (`OrthoLoader/Ribbon.cs:16-29`, `151-190`, `193-377`).
|
||||||
|
* Кнопка аннотаций содержит `PXP-AAV`, `MTO-MA` и `BJ`; отдельные команды актуальны для line numbers, elevations, supports, layers и package update (`OrthoLoader/Ribbon.cs:31-145`).
|
||||||
|
* `PXP-IOD` — session command пакетного обновления (`UpdateOrthoDrawings/Commands.cs:519`); `PXP-OA` и `PXP-AAV` запускают автоматическую обработку, но автоматического event-trigger для самих аннотаций не доказано (`OrthoAutoAnnotate/Commands.cs:6444-6463`, `AutoAnnotateView/Commands.cs:546`).
|
||||||
|
|
||||||
|
## Назначение и миграция
|
||||||
|
|
||||||
|
Основной переносимый контракт — правила получения Plant 3D данных, построения текста и создания/обновления орто-аннотаций. Переносить следует после выделения Core и Plant 3D 2026 adapter. Не переносить как есть загрузчик `_netload`, hard-coded ссылки на AutoCAD 2019, архивные копии и не подтверждённую telemetry.
|
||||||
|
|
||||||
|
Официальная документация Plant 3D 2026 подтверждает, что штатные annotations предназначены для orthographic drawings и поддерживают annotation styles/templates: [About Annotations](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-DAD70DC1-32F2-45E4-8685-0C574EF31299.htm). Штатная настройка формата выполняется через Project Setup/Class Definitions: [Annotation Format for Orthographic Drawings](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-6D5E3975-53AA-4495-B727-BBB2B599B464.htm). Это подтверждает область пересечения, но не доказывает замену корпоративных правил P_Rec_Annot. Autodesk также документирует создание и обновление Ortho, но не эквивалент всего пакетного поведения: [Create an Orthographic View](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-09E67A9E-45F7-4392-BFB6-EF1ADAB1D46B.htm), [About Updating Orthographic Drawings](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-EEDF2AA7-B50B-484B-B47F-B48986A51C3D.htm).
|
||||||
|
|
||||||
|
**Нужна ли новая кнопка:** да, на первом этапе миграции нужна одна явная корпоративная кнопка/команда для воспроизводимого сценария `Annotate`, а не набор скрытых вызовов. Предварительно: вкладка «Промхимпроект», панель «Аннотации», команда `PHP_REC_ANNOT`; состав операций должен выбираться режимом или отдельными безопасными командами после golden-теста.
|
||||||
|
|
||||||
|
## Ответы на ключевые вопросы
|
||||||
|
|
||||||
|
* **Автоматические вызовы:** обнаружены загрузочные и UI-события Ribbon, WinForms-события и временные PointMonitor; подписок `CommandWillStart/ObjectModified/Idle`, запускающих аннотацию, не подтверждено. Риск повторной подписки остаётся у `CurrentProjectOpenedEvent`.
|
||||||
|
* **DWG:** код массово использует AutoCAD transactions, `OpenMode.ForWrite`, `AppendEntity`, `BlockReference`, `MLeader`, attributes и удаление старых annotation blocks; изменения проекта через Plant DataLinks читаются, прямой SQL/SQLite writer в исходниках не найден.
|
||||||
|
* **DCF/Project.xml:** прямое изменение не доказано; `PnPDatabase`/`DataLinksManager` и `PnPDrawings/PnPDatalinks` создают косвенный риск через Plant API.
|
||||||
|
* **Повторный запуск:** есть явные удаления ранее размещённых blocks в `AutoAnnotateView/Commands.cs:476-500` и `AutoLinenumberConnections/Commands.cs:535-558`, но глобальная идемпотентность всего комплекта не доказана.
|
||||||
|
* **Undo:** операции заключены в AutoCAD transactions; гарантия единого undo для пакетного сценария не доказана, нужна runtime-проверка.
|
||||||
|
* **Build:** не выполнялся по ограничению задания.
|
||||||
|
|
||||||
|
## Файлы отчёта
|
||||||
|
|
||||||
|
Основные выводы находятся в Markdown-файлах этого каталога. `evidence/` содержит только агрегированные CSV/текстовые метаданные, без копий исходников и бинарников. Инструмент повторного read-only анализа: `tools/plugin-usage/Build-PRecAnnotAudit.ps1`.
|
||||||
|
|
||||||
|
## Ограничения
|
||||||
|
|
||||||
|
1. Исходный каталог содержит release DLL, DWG, DOCX, PDF и ZIP, но они не добавляются в Git и не открывались/запускались.
|
||||||
|
2. Без Plant 3D 2019 runtime нельзя подтвердить фактические визуальные результаты, число созданных объектов, undo и семантику внешнего usage-счётчика.
|
||||||
|
3. Сравнение 2026 ограничено официально опубликованными возможностями; полноценная замена требует runtime-сопоставления корпоративных annotation blocks и правил.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Annotation algorithm
|
||||||
|
|
||||||
|
По исходникам функция `Annot` — создание/обновление орто-аннотаций и вспомогательных graphic blocks, а не универсальное 3D/P&ID/Iso annotator. Plant 3D 2026 официально также ограничивает понятие annotations orthographic drawings ([About Annotations](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-DAD70DC1-32F2-45E4-8685-0C574EF31299.htm)); поэтому область совпадает, но корпоративная логика не считается заменённой.
|
||||||
|
|
||||||
|
Подтверждённые операции: viewport/block selection, поиск DataLinks/PnP rows, чтение line groups и connected parts, transaction writes, block/attribute/MLeader/dimension operations. `AutoAnnotateView/Commands.cs:476-500` сначала удаляет ранее размещённые annotations, затем вызывает `InsertAnnotations()` и пишет count; `AutoLinenumberConnections/Commands.cs:535-558` аналогично удаляет blocks стыков. Это признаки частичной идемпотентности, но не доказательство для всего набора.
|
||||||
|
|
||||||
|
Нужно сохранять в golden test: тип блока, attribute tags/text, layer, scale, rotation, coordinates, XData/DataLinks, number of created/updated/skipped entities. Сырые DWG не включены.
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Architecture
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
L[OrthoLoader.dll] --> S[Settings.xml]
|
||||||
|
L --> N[_netload each DLL]
|
||||||
|
N --> R[OrthoLoader.Ribbon]
|
||||||
|
R --> C[AutoCAD command]
|
||||||
|
C --> P[PlantApplication.CurrentProject]
|
||||||
|
P --> D[DataLinksManager/PnPDatabase]
|
||||||
|
D --> A[Ortho/model DB objects]
|
||||||
|
A --> T[Blocks, attributes, MLeader, dimensions, layers]
|
||||||
|
```
|
||||||
|
|
||||||
|
`P_Rec_Annot` — legacy монорешение с отдельными DLL-проектами, общими `Files`/`FilesRelease` и runtime-зависимостями между DLL. Основные функциональные модули: `AnnotateLineNumbers`, `AutoAnnotateView`, `AutoLinenumberConnections`, `AutoElevation`, `InsertElevation`, `OrthoAutoAnnotate`, `UpdateOrthoDrawings`, `UpdateOrthoViewBlocks`, `CheckOrthoView`, `P3DNewMa`, `PHPAnnotations`, `OrthoLoader`.
|
||||||
|
|
||||||
|
Целевая архитектура: `P_Rec_Annot.Core` (DTO, правила текста/позиционирования, duplicate detection), `P_Rec_Annot.Plant3D2026` (команды, DataLinks, transactions, selection), `P_Rec_Annot.UI`, `P_Rec_Annot.Telemetry`, тесты. Telemetry должна быть на уровне явного command scope, не внутри циклов объектов.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Commands and UI
|
||||||
|
|
||||||
|
Актуальные команды, найденные в неархивных проектах: `PXP-LN`, `PXP-ELN`, `PXP-ALC`, `PXP-ULN`, `PXP-ESN`, `PXP-RMP`; `PXP-AAV`; `PXP-AE`; `PXP-IE`; `PXP-OSI`, `PXP-DJ`, `PXP-RA`, `PXP-OA`; `PXP-COV`; `mto-ma`, `CAC1`; `PXP-MA`, `CAC`, `BJ`; `PXP-AC`; `PXP-IOD`; `PXP-UOB`. Полные file/line записи — `evidence/commands.csv`; архивные одноимённые команды там сохранены отдельно.
|
||||||
|
|
||||||
|
Ribbon создаётся программно в `OrthoLoader.Ribbon`, вкладка `PluginsOrtho`, панели: package update, layers, lines/supports, pipe numbering, elevations, annotations, sizes, checks (`Ribbon.cs:18-29`). Кнопки строятся из массивов command id/text/description/icon (`Ribbon.cs:31-145`, `193-377`). UI включает WinForms формы выбора чертежей/аннотаций/операций и palette `P3DNewMa`; автоматическая кнопка `PXP-AAV` заявлена для арматуры, НКР и позиций КИП (`Ribbon.cs:109-129`).
|
||||||
|
|
||||||
|
Кнопки создаются после Ribbon initialization и при открытии проекта. `CurrentProjectOpenedEvent` подключается в `ComponentManager_ItemInitialized` (`Ribbon.cs:159-172`), а кнопки включаются/выключаются в `OpenProjectHandler` (`176-189`). Повторная загрузка и отсутствие отписки в `Terminate()` требуют runtime-проверки.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Plant 3D 2019 → 2026
|
||||||
|
|
||||||
|
| Feature | 2019 implementation | 2026 official capability | Action |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Ortho annotations | custom blocks/DataLinks | штатные orthographic annotations/styles documented | сравнить корпоративные blocks; не списывать плагин |
|
||||||
|
| Annotation formats | custom XML/settings + code | Project Setup/Class Definitions supports annotation styles | перенести правила в configuration where equivalent |
|
||||||
|
| Batch update | `PXP-IOD` session command | official update/create workflows documented, full batch equivalence not proven | KEEP_AFTER_ISOLATION + runtime |
|
||||||
|
| Locate 3D object | `PXP-OSI` custom traversal | official Locate in 3D Model workflow documented | verify native replacement |
|
||||||
|
| Layers/viewport | `PXP-UOB` custom writes | 2026 docs/API comparison required | adapter + golden test |
|
||||||
|
| Line-number connection annotations | `PXP-ALC` custom DataLinks/blocks | no full equivalence established | REIMPLEMENT_SAME_BEHAVIOR |
|
||||||
|
|
||||||
|
Официальные ссылки: [About Annotations](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-DAD70DC1-32F2-45E4-8685-0C574EF31299.htm), [Annotation Format](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-6D5E3975-53AA-4495-B727-BBB2B599B464.htm), [Create Ortho](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-09E67A9E-45F7-4392-BFB6-EF1ADAB1D46B.htm), [Locate 3D counterpart](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-E49E4523-05AD-4F33-8535-EAC721B620EB.htm). Утверждение о полноценной замене запрещено до runtime-сопоставления.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Configuration and paths
|
||||||
|
|
||||||
|
`Settings.xml` перечисляет DLL для загрузки. `annotation_settings.xml` и `users_indexes_list.xml` находятся в сетевом project support tree; README описывает `_System\Plant 3D_2019\Applications` и `_Data\Plant 3D_2019\AddAnnotationText` (`README.md:68-80`). `Template.dwg` и icons используются как deployment resources.
|
||||||
|
|
||||||
|
Абсолютные Autodesk 2019 HintPath и сетевые/локальные пути агрегированы в `evidence/external-paths.csv` с маскированием значений. Секретов в опубликованные evidence не включать; значения путей/реквизитов проектов не публиковать повторно.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Dependencies
|
||||||
|
|
||||||
|
Проекты — legacy `.NET Framework 4.7`, `x64`, `OutputType=Library`. Autodesk references: `acCoreMgd`, `acDbMgd`, `acMgd`, `PnPProjectManagerMgd`, `PnPDataLinks`, `PnPDataObjects`, `PnP3dObjectsMgd`, `PnP3dPartsRepository`, `PnP3dOrtho*`, `PnPDwg2d*`, AutoCAD Interop. В HintPath присутствует `C:\Program Files\Autodesk\AutoCAD 2019\...`; подробности в `evidence/project-references.csv`.
|
||||||
|
|
||||||
|
Сторонние/внутренние DLL: deployment assemblies в `FilesRelease`, `UpdateOrthoDrawings/Libraries`, `lib/Excel.dll`, `lib/ICSharpCode.SharpZipLib.dll`. Office automation в актуальном исходном комплекте не доказана. Риск 2026 — API/binary binding, x64, assembly load order и внутренние Ortho assemblies.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Drawing modifications
|
||||||
|
|
||||||
|
Исходник содержит многочисленные `StartTransaction`, `OpenMode.ForWrite`, `UpgradeOpen`, `AppendEntity`, `Erase`, `SetXData`, `BlockReference`, `AttributeReference`, `MLeader`, `MText`, `DBText`, `Table` и `Viewport`. Полный агрегированный список — `evidence/drawing-write-operations.csv`.
|
||||||
|
|
||||||
|
Из этого следует подтверждённая возможность записи DWG. Прямой записи DCF или `Project.xml` статическим поиском не доказано; DataLinks/PnP operations могут менять связанные данные как побочный эффект и требуют runtime/golden проверок. Для каждой операции transaction обычно используется, но единый undo scope пакетного действия не гарантирован.
|
||||||
|
|
||||||
|
Риск частичной записи: исключение после части transaction/между несколькими открытыми drawings, особенно в batch update. Следующий шаг — disposable test project, сравнение before/after и проверка восстановления/rollback.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Error handling
|
||||||
|
|
||||||
|
Загрузчик использует MessageBox и `finally` для восстановления `FILEDIA`/`CMDECHO` (`OrthoLoader/Loader.cs:62-100`). Команды содержат многочисленные `try/catch`, включая пустые catch при получении drawing id (`OrthoAutoAnnotate/Commands.cs:360-366`, `6474-6480`). Это повышает риск silent failure и неполного результата.
|
||||||
|
|
||||||
|
Классы риска: WRONG_ANNOTATION, DUPLICATE_ANNOTATION, UI_FREEZE в batch, RESOURCE_LEAK при открытии нескольких drawings, SILENT_FAILURE из пустых catch, частичная запись DWG/связей. Нужны structured error/result, cancellation, progress и тесты исключений.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Event handlers and automatic calls
|
||||||
|
|
||||||
|
Найдены `ComponentManager.ItemInitialized`, `PlantApplication.CurrentProjectOpenedEvent`, `AssemblyResolve`, WinForms UI events и временные `Editor.PointMonitor`. `Ribbon.cs:153-172` показывает subscribe/unsubscribe для Ribbon item, но `Ribbon.Terminate()` пуст (`Ribbon.cs:147-149`); project-open handler явно не отписывается. В `AnnotateLineNumbers/Commands.cs:1017-1044` PointMonitor отписывается в рамках операции.
|
||||||
|
|
||||||
|
Статически не подтверждены обработчики `CommandWillStart`, `ObjectModified`, `ObjectAppended`, `Idle`, которые автоматически аннотируют каждый объект. Поэтому нельзя объяснить 218 796 как event storm по этому исходнику. Риск повторной подписки на project-open event и UI re-entry сохраняется.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
SourceRoot=C:\dev\autodesk\link\P_Rec_Annot\v1.0.4\repo
|
||||||
|
FileCount=271
|
||||||
|
ProjectCount=25
|
||||||
|
SourceCodeFileCount=120
|
||||||
|
ReadOnlyAnalysis=TRUE
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
"File","Line","Command","Flags","Class","Method","Purpose","Selection","PlantProject","ReadsDrawing","WritesDrawing","Telemetry"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","705","PXP-ESN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","845","PXP-ELN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1655","PXP-RMP",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1709","PXP-LN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2439","PXP-ULN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"AutoAnnotateView\Commands.cs","546","PXP-AAV",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"AutoElevation\Commands.cs","404","PXP-AE",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","882","PXP-ALC",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"CheckOrthoView\Commands.cs","156","PXP-COV",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"ExtentsIntersect\Commands.cs","17","PXP-GIT",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"InsertElevation\Commands.cs","1040","PXP-IE",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","336","PXP-OSI","CommandFlags.Session","see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","795","PXP-DJ",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1308","PXP-RA",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6444","PXP-OA",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"P3DNewMa\Commands.cs","17","mto-ma",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"P3DNewMa\NewMaControl.cs","176","CAC1",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1047","mto-ma1",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","164","PXP-MA","CommandFlags.Redraw | CommandFlags.UsePickSet","see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","287","CAC",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1701","CreateAnnotationCommand",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"PHPAnnotations\PHPBlockJig.cs","209","BJ",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"SwapAttributesMenuItem\Commands.cs","40","PXP-AC","CommandFlags.UsePickSet","see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","519","PXP-IOD","CommandFlags.Session","see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","585","PXP-UOB",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Class1.cs","139","TestEntityJigger15",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","167","PXP-LN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","783","PointMonitorSelection",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","902","KA",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","162","PXP-LN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","679","PointMonitorSelection",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","798","KA",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","168","PXP-LN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","679","PointMonitorSelection",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","798","KA",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","230","attbackgrhide","CommandFlags.UsePickSet","see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","274","PXP-TEST",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","340","PXP-RMP",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","355","PXP-LN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","118","PXP-LN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","162","PXP-LN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","679","PointMonitorSelection",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","798","KA",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","168","PXP-LN",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","679","PointMonitorSelection",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","798","KA",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberMarker - копия.cs","488","BJ",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","1044","PXP-IE",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
"_archive\2019_PHPAnnotations\2019_PHPAnnotations\Class1.cs","20","MyCreateAnnotation",,"see source","see source","registered AutoCAD command","unknown","verify body","yes","unknown","not evidenced"
|
||||||
|
@@ -0,0 +1,37 @@
|
|||||||
|
"File","Line","KeyOrFile","Purpose","Risk"
|
||||||
|
"AnnotateLineNumbers\XMLFile.cs","31"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1058"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", System.IO.FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"AutoAnnotateView\XMLFile.cs","21"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"AutoAnnotateView\XMLFile.cs","61"," // Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"" +","configuration/deployment","path coupling"
|
||||||
|
"AutoElevation\Annotations.cs","613"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", System.IO.FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"AutoElevation\Commands.cs","171"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", System.IO.FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"AutoElevation\XMLFile.cs","21"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2013"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", System.IO.FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"AutoLinenumberConnections\XMLFile.cs","21"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","179"," string path_settings = path_Result + ""\\annotation_settings.xml"";","configuration/deployment","path coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","209"," string path_users_indexes = path_Result + ""\\users_indexes_list.xml"";","configuration/deployment","path coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","237"," error_message = ""В файле users_indexes_list.xml указан некорректный индекс.\n"" +","configuration/deployment","path coupling"
|
||||||
|
"GetPlantScriptFolderPath\Commands.cs","27"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"InsertElevation\Commands.cs","688"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", System.IO.FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"InsertElevation\Commands.cs","808"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", System.IO.FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"InsertElevation\XMLFile.cs","21"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","236"," static string sBlocksDWGSourceFileName = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"";","configuration/deployment","path coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","629"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"OrthoAutoAnnotate\XMLFile.cs","28"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"OrthoAutoAnnotate\XMLFile.cs","164"," Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"" +","configuration/deployment","path coupling"
|
||||||
|
"OrthoLoader\Loader.cs","111"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\Commands.cs","27"," // из чертежа-шаблона ""Template.dwg"" ","configuration/deployment","path coupling"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\Commands.cs","39"," // из чертежа-шаблона ""Template.dwg"" ","configuration/deployment","path coupling"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\Commands.cs","44"," // перегрузка workPath: путь до папки с файлом настроек Settings.xml и файлом-источником Template.dwg","configuration/deployment","path coupling"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\CopyObjects.cs","146"," dDatabaseSource.ReadDwgFile(workPath + ""\\Template.dwg"", FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\XMLFile.cs","21"," XDocument xDocument = XDocument.Load(workPath + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"P3DNewMa\XMLFile.cs","17"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"UpdateOrthoViewBlocks\XMLFile.cs","23"," System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"UpdateOrthoViewBlocks\XMLFile.cs","30"," // оставляем только один вариант настройки в [Settings.xml]","configuration/deployment","path coupling"
|
||||||
|
"UpdateOrthoViewBlocks\XMLFile.cs","31"," // сам файл [Settings.xml] в каждом проекте свой","configuration/deployment","path coupling"
|
||||||
|
"UpdateOrthoViewBlocks\XMLFile.cs","34"," // прямо в файл [Settings.xml] проекта","configuration/deployment","path coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","692"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", System.IO.FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","812"," // dDatabaseSource.ReadDwgFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Template.dwg"", System.IO.FileShare.Read, true, """");","configuration/deployment","path coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\XMLFile.cs","21"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"_archive\2019_UpdateOrthoDrawings\2019_UpdateOrthoDrawings\XMLFile.cs","17"," XDocument xDocument = XDocument.Load(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"");","configuration/deployment","path coupling"
|
||||||
|
"_archive\2019_UpdateOrthoDrawings\2019_UpdateOrthoDrawings\XMLFile.cs","61"," Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + ""\\Settings.xml"" +","configuration/deployment","path coupling"
|
||||||
|
@@ -0,0 +1,439 @@
|
|||||||
|
"File","Line","Database","Table","Operation","ReadOrWrite","Risk"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","83","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","85","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1170","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1172","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1175","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1202","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1205","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1205","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1235","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1631","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1632","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1634","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1635","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2404","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2405","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2592","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2599","Plant PnP/DCF","PnPDrawings","access","read/unknown","version/API coupling"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2601","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\Commands.cs","43","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\Commands.cs","45","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\Commands.cs","182","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\Commands.cs","183","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\Commands.cs","185","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\Commands.cs","186","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","341","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1304","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1305","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1323","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1326","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1344","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1444","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"AutoElevation\Annotations.cs","292","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoElevation\Annotations.cs","294","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoElevation\Commands.cs","41","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoElevation\Commands.cs","43","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoElevation\Commands.cs","343","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoElevation\Commands.cs","344","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"AutoElevation\Commands.cs","346","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoElevation\Commands.cs","347","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","101","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","103","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","291","Plant PnP/DCF","PnPDrawings","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","292","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","596","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","618","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","627","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","628","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","634","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","634","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","635","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","635","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","678","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","682","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1255","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1277","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1285","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1286","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1291","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1291","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1292","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1292","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1333","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1336","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2074","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2075","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2077","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2082","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2083","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2088","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2088","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2093","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2103","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2103","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2108","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2116","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2121","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2122","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2127","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2127","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2132","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2143","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2143","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2148","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2161","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2162","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2164","Plant PnP/DCF","P3dLineGroup","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2165","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2165","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2166","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2178","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2179","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2180","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2285","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2285","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2286","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2286","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2287","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2288","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2289","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2290","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2291","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2410","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2411","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2413","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2414","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\CheckOrthoView.cs","161","Plant PnP/DCF","PnPDrawings","access","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\CheckOrthoView.cs","162","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\CheckOrthoView.cs","188","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\CheckOrthoView.cs","189","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\Commands.cs","35","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\Commands.cs","37","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\Commands.cs","91","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\Commands.cs","92","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\Commands.cs","94","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\Commands.cs","95","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\Commands.cs","181","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"CheckOrthoView\Commands.cs","182","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","17","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","33","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","57","Plant PnP/DCF","DataLinksManager","read","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","66","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","66","Plant PnP/DCF","P3dLineGroup","access","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","67","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","68","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","68","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","69","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","74","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","82","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","98","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","362","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","366","Plant PnP/DCF","P3dLineGroup","access","read/unknown","version/API coupling"
|
||||||
|
"InsertElevation\Commands.cs","536","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"InsertElevation\Commands.cs","538","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"InsertElevation\Commands.cs","980","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"InsertElevation\Commands.cs","981","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"InsertElevation\Commands.cs","983","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"InsertElevation\Commands.cs","984","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","192","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","194","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1122","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1123","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1125","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1126","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1574","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1575","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1813","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1814","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1911","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1941","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1965","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1966","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1987","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2109","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2141","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2142","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2185","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2186","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2193","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2214","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2235","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2248","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2260","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2276","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2277","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2304","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2410","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2923","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2924","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2933","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2939","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2942","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2943","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2951","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2954","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","2955","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3280","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3288","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3297","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3305","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3579","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3586","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3595","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3632","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3633","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3858","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3891","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","3892","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","4060","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","4061","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","4681","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","4682","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","4984","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","4985","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5552","Plant PnP/DCF","PnPDrawings","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5553","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5561","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5563","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5570","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5575","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5576","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5581","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5582","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5602","Plant PnP/DCF","P3dPartConnection","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5613","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5614","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5616","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5634","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5657","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5658","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5693","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5694","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5702","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5703","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5706","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5916","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6058","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6070","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6082","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6094","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6106","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6120","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6135","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6149","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6191","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6211","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6215","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6392","Plant PnP/DCF","PnPDrawings","access","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6393","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\HighlightAndZoomPnPId.cs","161","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"OrthoAutoAnnotate\HighlightAndZoomPnPId.cs","170","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","36","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","37","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1076","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1099","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1446","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1478","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1479","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1587","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1588","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1620","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2230","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2231","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2304","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2305","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2310","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2345","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2346","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2398","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2399","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2451","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2452","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2457","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2509","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2510","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2565","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2566","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2611","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2612","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3549","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3550","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3551","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3552","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3825","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5714","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5833","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5834","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","47","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","75","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","90","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","91","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1108","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1109","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1119","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1122","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1499","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1597","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1623","Plant PnP/DCF","P3dLineGroupPartRelationship","access","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1623","Plant PnP/DCF","P3dLineGroup","access","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1644","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1706","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1709","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1745","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1748","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","156","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","159","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","217","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","218","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","241","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","242","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","326","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","334","Plant PnP/DCF","PnPDrawings","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","336","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","627","Plant PnP/DCF","PnPDrawings","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","628","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","1085","Plant PnP/DCF","PnPDrawings","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","1086","Plant PnP/DCF","PnPDrawings","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","225","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","291","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","292","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","433","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","434","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","516","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","81","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","143","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","144","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","384","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","386","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","387","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","387","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","388","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","388","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","389","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","80","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","138","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","139","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","536","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","538","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","539","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","539","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","540","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","540","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","541","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","80","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","144","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","145","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","534","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","536","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","537","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","537","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","538","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","538","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","539","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","68","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","211","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","212","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","702","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","703","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","708","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","709","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","711","Plant PnP/DCF","P3dLineGroup","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","712","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","712","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","713","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","725","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","726","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","727","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","65","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","94","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","95","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","323","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","80","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","138","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","139","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","536","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","538","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","539","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","539","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","540","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","540","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","541","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","80","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","144","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","145","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","534","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","536","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","537","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","537","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","538","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","538","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","539","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","11","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","20","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","27","Plant PnP/DCF","DataLinksManager","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","34","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","35","Plant PnP/DCF","P3dLineGroup","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","36","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","37","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","37","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","38","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","42","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","47","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","274","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","275","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","278","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","284","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","285","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","292","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","292","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","298","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","311","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","311","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","317","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","327","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","333","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","334","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","341","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","341","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","347","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","360","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","360","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","366","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","11","Plant PnP/DCF","PnPDatalinks","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","20","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","27","Plant PnP/DCF","DataLinksManager","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","34","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","35","Plant PnP/DCF","P3dLineGroup","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","36","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","37","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","37","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","38","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","42","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","47","Plant PnP/DCF","EngineeringItems","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","271","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","272","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","275","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","281","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","282","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","289","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","289","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","295","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","308","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","308","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","314","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","324","Plant PnP/DCF","PnPDatalinks","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","330","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","331","Plant PnP/DCF","P3dPartConnection","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","338","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","338","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","344","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","357","Plant PnP/DCF","P3dLineGroupPartRelationship","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","357","Plant PnP/DCF","P3dLineGroup","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","363","Plant PnP/DCF","EngineeringItems","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","540","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","542","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","984","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","985","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","987","Plant PnP/DCF","DataLinksManager","access","read/unknown","version/API coupling"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","988","Plant PnP/DCF","GetPnPDatabase","read","read/unknown","version/API coupling"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,119 @@
|
|||||||
|
"Publisher","Event","Subscriber","Line","Unsubscribe","CallsAnnotation","CanRepeat","Risk"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1016","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1017","unknown","possible","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1043","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1044","unknown","possible","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1436","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1441","unknown","possible","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1981","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1987","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1988","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","1999","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","2000","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","2639","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","AnnotateLineNumbers\Commands.cs","2644","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","CurrentProjectOpenedEvent","OrthoLoader\Ribbon.cs","170","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","SystemVariableChanged","P3DNewMa\NewMaControl.cs","96","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","SystemVariableChanged","P3DNewMa\NewMaControl.cs","97","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","SystemVariableChanged","P3DNewMa\NewMaControl.cs","104","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","418","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","427","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","428","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","464","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","465","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","854","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","855","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","881","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","882","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","2658","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","2663","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","2788","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","2892","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","2998","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","3103","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","3208","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","3312","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5188","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5189","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5213","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5214","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5337","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5338","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5362","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5363","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5485","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5486","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5510","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5511","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5644","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5645","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5669","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5670","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5950","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5951","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5975","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","5976","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","6110","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","6111","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","6135","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","P3DNewMa\NewMaControl.cs","6136","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","246","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","286","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","443","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","783","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","785","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","801","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","803","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","843","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","845","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","853","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","240","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","257","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","369","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","679","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","681","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","697","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","699","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","739","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","741","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","749","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","270","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","304","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","366","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","679","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","681","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","697","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","699","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","739","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","741","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","749","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","520","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","521","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","533","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","546","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","548","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","754","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","764","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","179","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","183","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","233","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","240","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","257","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","369","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","679","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","681","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","697","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","699","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","739","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","741","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","749","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","270","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","304","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","366","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","679","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","681","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","697","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","699","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","739","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","741","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
"AutoCAD/Plant/UI","PointMonitor","_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","749","unknown","unknown","yes/unknown","lifecycle/repeat check"
|
||||||
|
@@ -0,0 +1,165 @@
|
|||||||
|
"File","Line","ValueMasked","Purpose","Network","Writable","Risk2026"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2456","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2759","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","2769","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"AnnotateLineNumbers\LineNumberList.cs","543","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\LineNumberList.cs","641","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\LineNumberList.cs","1006","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\LineNumberList.cs","1042","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\OrthoDrawings.cs","749","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\OrthoDrawings.cs","862","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\OrthoDrawings.cs","931","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\Utils.cs","283","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\Utils.cs","378","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\Utils.cs","661","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\Utils.cs","677","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AnnotateLineNumbers\XMLFile.cs","31","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\Commands.cs","244","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\Commands.cs","779","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"AutoAnnotateView\Commands.cs","789","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","519","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","537","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","551","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1058","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1326","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1344","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1351","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1380","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1387","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1422","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1428","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","1435","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\XMLFile.cs","21","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoAnnotateView\XMLFile.cs","61","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoElevation\Annotations.cs","613","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoElevation\Commands.cs","171","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoElevation\Commands.cs","600","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"AutoElevation\Commands.cs","610","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"AutoElevation\XMLFile.cs","21","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","826","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2013","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2432","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2442","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"AutoLinenumberConnections\XMLFile.cs","21","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"CheckOrthoView\Commands.cs","257","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"CheckOrthoView\Commands.cs","267","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","167","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","169","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","179","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","209","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"GetPlantScriptFolderPath\Commands.cs","27","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"InsertElevation\Commands.cs","688","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"InsertElevation\Commands.cs","808","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"InsertElevation\Commands.cs","1364","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"InsertElevation\Commands.cs","1374","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"InsertElevation\XMLFile.cs","21","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","236","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","629","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","4432","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","5312","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6744","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","6754","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"OrthoAutoAnnotate\XMLFile.cs","28","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoAutoAnnotate\XMLFile.cs","164","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Loader.cs","111","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","36","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","43","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","58","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","59","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","60","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","88","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","89","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","90","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","91","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","92","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","93","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","94","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","105","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","106","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","125","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","126","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","127","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","128","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","136","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","144","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","380","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"OrthoLoader\Ribbon.cs","390","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\CopyObjects.cs","146","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\XMLFile.cs","21","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1098","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1347","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1391","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1449","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1481","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1510","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1583","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1590","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1593","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","1632","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2730","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2834","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","2938","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3044","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3149","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3254","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3358","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3824","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","3970","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","4011","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","4051","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5255","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5404","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5550","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5552","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5709","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5819","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5836","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5839","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","5869","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","6017","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\NewMaControl.cs","6177","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"P3DNewMa\XMLFile.cs","17","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","909","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","910","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","911","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","912","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","921","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","923","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","924","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","978","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1258","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1327","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1358","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1380","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1415","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1442","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1498","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1764","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1784","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","1794","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"SwapAttributesMenuItem\Commands.cs","178","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"SwapAttributesMenuItem\Commands.cs","188","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","543","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","1004","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","1008","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","1023","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","1136","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","1146","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"UpdateOrthoDrawings\OperationProgress.cs","41","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","680","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","690","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"UpdateOrthoViewBlocks\XMLFile.cs","23","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberList - копия.cs","346","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberList - копия.cs","421","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberList - копия.cs","487","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberList - копия.cs","633","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberList - копия.cs","637","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","84","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","84","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","692","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","812","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","1368","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","1378","<path redacted>","hard-coded path","no","unknown","review"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\XMLFile.cs","21","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_UpdateOrthoDrawings\2019_UpdateOrthoDrawings\XMLFile.cs","17","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
"_archive\2019_UpdateOrthoDrawings\2019_UpdateOrthoDrawings\XMLFile.cs","61","<path redacted>","hard-coded path","yes","unknown","review"
|
||||||
|
@@ -0,0 +1,272 @@
|
|||||||
|
"RelativePath","Extension","SizeBytes","LastWriteTime","Sha256","Classification"
|
||||||
|
".editorconfig",".editorconfig","1154","2024-12-13T10:41:34.0000000+03:00","91579407CC1BF063A08E286BDEB02EE2836978AB0F247B9D66E6D73063D226AF","data/other"
|
||||||
|
".gitattributes",".gitattributes","1663","2024-12-13T10:41:34.0000000+03:00","AD78EDB5DFD7802DC618E3586DA0DCEFD2A4F311A64A359CC16398DCD06025C9","data/other"
|
||||||
|
".gitignore",".gitignore","6691","2024-12-13T10:41:34.0000000+03:00","8C9C0295BD5EC252C29DD594776F306E60362DBFA357342E219EB6D357B09B16","data/other"
|
||||||
|
"CHANGELOG.md",".md","7368","2024-12-13T10:41:34.0000000+03:00","030F5E89D0570D34E6047F592A2C389CC74DED906B12ACAD5745875BF7623F06","data/other"
|
||||||
|
"P_Rec_Annot.sln",".sln","15727","2024-12-13T10:41:34.0000000+03:00","8C6B34F53ABA8B3628BECD3678B6AA7B4BB295F6C261BF7AAA9FC1BEE0C646F7","project/config"
|
||||||
|
"README.md",".md","7110","2024-12-13T10:41:34.0000000+03:00","8CA7925F1911537BFB0BCEAC6D5CFC0B5B8B4A3A6E15A810F89C4DB8B095BD09","data/other"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj",".csproj","6945","2024-12-13T10:41:34.0000000+03:00","6755BE78B5EB1CF3A88D008A46C9CE9DE504F637CDEE77981CBAF6CBC7BDB378","project/config"
|
||||||
|
"AnnotateLineNumbers\ArxImports.cs",".cs","2291","2024-12-13T10:41:34.0000000+03:00","D8723EE15525950B9020AAA6E1296919BEB22D5BF825D729D68FE82EDEBA28EB","source"
|
||||||
|
"AnnotateLineNumbers\CheckResults.cs",".cs","22873","2024-12-13T10:41:34.0000000+03:00","7C84D69FFD865ACC026195F774409170CB6B9F4602FD921A4F809EFED763CC1F","source"
|
||||||
|
"AnnotateLineNumbers\CheckResults.Designer.cs",".cs","6820","2024-12-13T10:41:34.0000000+03:00","EB925164B219545379974C1C58A629043BDC44A1C0711004C21F551AA6429DA4","source"
|
||||||
|
"AnnotateLineNumbers\CheckResults.resx",".resx","12829","2024-12-13T10:41:34.0000000+03:00","3FB0758FBDBE178B1794E446CA50637192F21A55498E91F66E57F5C6B2356B36","ui/resource"
|
||||||
|
"AnnotateLineNumbers\Commands.cs",".cs","173778","2024-12-13T10:41:34.0000000+03:00","91BA6E1F095E6F846459A721AD84EEFA44495117724465721D4E77851456FD59","source"
|
||||||
|
"AnnotateLineNumbers\LineNumberList.cs",".cs","78210","2024-12-13T10:41:34.0000000+03:00","88773296C0AF4AF4A55564B02E309DB3E0632816F38A5EE7D16B5044093949B9","source"
|
||||||
|
"AnnotateLineNumbers\LineNumberMarker.cs",".cs","25092","2024-12-13T10:41:34.0000000+03:00","8FA0E1AC7DBA024AB9493D13DDB6638A409B6A4DFA5F1C6849A843B5658FC71B","source"
|
||||||
|
"AnnotateLineNumbers\LN.jpg",".jpg","887","2024-12-13T10:41:34.0000000+03:00","EF21F64D179E1B6271824821DB7CA7CA8006FC2D3241D01EA2018811B7B177B1","ui/resource"
|
||||||
|
"AnnotateLineNumbers\OrthoDrawings.cs",".cs","56672","2024-12-13T10:41:34.0000000+03:00","C79795533271B339E2467F7720EF4C1E8DD76C5AF740B26043456174934FA7F2","source"
|
||||||
|
"AnnotateLineNumbers\SelectDrawings.cs",".cs","3029","2024-12-13T10:41:34.0000000+03:00","0A652A3A980EA8E497CD305CFFB01E58C3AFD098341DC85EA2F2872B8669E859","source"
|
||||||
|
"AnnotateLineNumbers\SelectDrawings.Designer.cs",".cs","6521","2024-12-13T10:41:34.0000000+03:00","E82E5125D41505476B3162C180E5A111BD5A2F3326D56A32C1823EF0A7BE38B9","source"
|
||||||
|
"AnnotateLineNumbers\SelectDrawings.resx",".resx","12505","2024-12-13T10:41:34.0000000+03:00","B970C32FA1863FF2F9052C44BFA526176DE74B12E154B0831FB78C012BD55830","ui/resource"
|
||||||
|
"AnnotateLineNumbers\Utils.cs",".cs","50306","2024-12-13T10:41:34.0000000+03:00","1BD79E8008C7142803C511630E34D4057D563F0360EC24E2F8FD45FCDBD06858","source"
|
||||||
|
"AnnotateLineNumbers\XMLFile.cs",".cs","10103","2024-12-13T10:41:34.0000000+03:00","AAA9F13E021E2987247B6A899B4AAC0CF589C06DD02E8FA8E6504DF618AFC837","source"
|
||||||
|
"AnnotateLineNumbers\Properties\AssemblyInfo.cs",".cs","1501","2024-12-13T10:41:34.0000000+03:00","29293C12D3EE3ED9B68B9E81FD0709368C8E1AF5A201798453191E06106EB643","source"
|
||||||
|
"AnnotateLineNumbers\Properties\Resources.Designer.cs",".cs","3617","2024-12-13T10:41:34.0000000+03:00","7D5142ADDCDB23818C3943043E01B16CA7D840DC89E60F08B0EDB10BCDE1E629","source"
|
||||||
|
"AnnotateLineNumbers\Properties\Resources.resx",".resx","6443","2024-12-13T10:41:34.0000000+03:00","B5445CBFFA4AFA742BFDEB8FAB1706E3CDE5EEBEB56ECF073B68957E0CB94247","ui/resource"
|
||||||
|
"AnnotateLineNumbers\Resources\drawing.png",".png","298","2024-12-13T10:41:34.0000000+03:00","7A6AC1F97278F8E79D9DAE52DB7D9833C516F6E5FCF554508A01323736542154","ui/resource"
|
||||||
|
"AnnotateLineNumbers\Resources\folder.png",".png","210","2024-12-13T10:41:34.0000000+03:00","87E56D1EDDEA45CE0588CF848406F981BAAE7713717B9FFAAB40881546836863","ui/resource"
|
||||||
|
"AutoAnnotateView\ArxImports.cs",".cs","1211","2024-12-13T10:41:34.0000000+03:00","6251A1C19599444EC4617965B47B39C1C7AE909CF294D6D4754560E83CC22A72","source"
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj",".csproj","5351","2024-12-13T10:41:34.0000000+03:00","6AAD00298D36AB118F8A611AE9E27175F0D15B6E93420ACBF4BA54BE0D910A21","project/config"
|
||||||
|
"AutoAnnotateView\Commands.cs",".cs","49015","2024-12-13T10:41:34.0000000+03:00","4B22A43CE772309AFCAF41D59BACC4734C7F34D7D6EC76BA6F914FD78628F98A","source"
|
||||||
|
"AutoAnnotateView\SelectAnnotationsToUpdate.cs",".cs","1582","2024-12-13T10:41:34.0000000+03:00","3B387F93287BE2AB84D9003E6AE78944192A5F8C896135AA21573C73F342C649","source"
|
||||||
|
"AutoAnnotateView\SelectAnnotationsToUpdate.Designer.cs",".cs","7368","2024-12-13T10:41:34.0000000+03:00","9E15FCE6D0025EC857246FD473437B6017084CC671390BFFB0A75F9DA6A0B1A9","source"
|
||||||
|
"AutoAnnotateView\SelectAnnotationsToUpdate.resx",".resx","5817","2024-12-13T10:41:34.0000000+03:00","4363CD7D5B8671C72442CE1A1BFC10D64EBD24B2D718B54BD4FCD025E4967298","ui/resource"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs",".cs","97633","2024-12-13T10:41:34.0000000+03:00","874EAD5EC8F92D626F55143534B9E572C810AC0EEAFC1A0CD0C53492E04ED0A6","source"
|
||||||
|
"AutoAnnotateView\XMLFile.cs",".cs","4374","2024-12-13T10:41:34.0000000+03:00","2F0DD0AACD69B24E0BEA693F02C6837723C61C18B7BECF79AC21D8DF6DDFFC7E","source"
|
||||||
|
"AutoAnnotateView\Properties\AssemblyInfo.cs",".cs","1495","2024-12-13T10:41:34.0000000+03:00","0E7808712B45F7E7EC5ADADEBD21243E89544844627477BA8FAECB4127794499","source"
|
||||||
|
"AutoElevation\Annotations.cs",".cs","45868","2024-12-13T10:41:34.0000000+03:00","C8558FBBDEEA72322816601CC97B16326F72269BD085F23268F6813FEB4B7E32","source"
|
||||||
|
"AutoElevation\ArxImports.cs",".cs","1198","2024-12-13T10:41:34.0000000+03:00","4E135D772B855E3F5B9A80FCDE7F18C1E6A4B2B03056E4A1452C9E8C7B0A3BC5","source"
|
||||||
|
"AutoElevation\AutoElevation.csproj",".csproj","5609","2024-12-13T10:41:34.0000000+03:00","086F17ECED970E2E028283343C037F41C9949FFDEAA9C406952A62AB9E902AF7","project/config"
|
||||||
|
"AutoElevation\Commands.cs",".cs","35132","2024-12-13T10:41:34.0000000+03:00","206CFE54EC5D0CAC890D0DB9B8F0A0B9C2AF67F508E2F1058C8BC09B974A5EB3","source"
|
||||||
|
"AutoElevation\XMLFile.cs",".cs","3785","2024-12-13T10:41:34.0000000+03:00","088194497E833A39F3BCB0E2D7F2BB7C2B4FC90006D068390D6EDE76CF67318E","source"
|
||||||
|
"AutoElevation\Properties\AssemblyInfo.cs",".cs","1489","2024-12-13T10:41:34.0000000+03:00","6002ED0209919EF12328DB3B7437605B800382B0ACD31D483EF5FC5DCB4AF5A6","source"
|
||||||
|
"AutoLinenumberConnections\ArxImports.cs",".cs","1926","2024-12-13T10:41:34.0000000+03:00","EE1AD62A04861EBC65C16590F70F208FBF688BC6AB8FD696A7A45356748CDC78","source"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj",".csproj","5211","2024-12-13T10:41:34.0000000+03:00","3B9427F7E3DED8E28E1BBE8C74B2DE1AC78BE757D18FFF5A2107E4790B88817B","project/config"
|
||||||
|
"AutoLinenumberConnections\Commands.cs",".cs","180443","2024-12-13T10:41:34.0000000+03:00","837D7E138A80C0106E8275571453B9BFB9243504AD6A405E6C1286DB534E6895","source"
|
||||||
|
"AutoLinenumberConnections\XMLFile.cs",".cs","4266","2024-12-13T10:41:34.0000000+03:00","21B71FE3BF0CC7462F994EDFD70A92FD9D0E109FD6C4B1C2921FF74F2A9781EC","source"
|
||||||
|
"AutoLinenumberConnections\Properties\AssemblyInfo.cs",".cs","1513","2024-12-13T10:41:34.0000000+03:00","2A02E1DA20CC09DDEC54ACC995FF95B41C1F76F427FBA1D3A675F29954FF3F5B","source"
|
||||||
|
"CheckOrthoView\ArxImports.cs",".cs","1199","2024-12-13T10:41:34.0000000+03:00","0962B1F8A18BA3099F806F7C7BCDB2E534D7D3D5C76EDCF6321FC8F7DBE6B566","source"
|
||||||
|
"CheckOrthoView\CheckOrthoView.cs",".cs","15817","2024-12-13T10:41:34.0000000+03:00","DF2EFE5C9C2283610C228D278AB03ED6A7BC55A114A2AEEC21FF30141DA5FB0A","source"
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj",".csproj","4311","2024-12-13T10:41:34.0000000+03:00","3CC579EC4060DE558C73F752917F094D761FA5DF4A208D5E4A0D757BB6E628AC","project/config"
|
||||||
|
"CheckOrthoView\Commands.cs",".cs","14992","2024-12-13T10:41:34.0000000+03:00","70CCFDF61E2D46FD062C649E75900DA592D524AE116DF4EE7F81CF675B7ECDEF","source"
|
||||||
|
"CheckOrthoView\Properties\AssemblyInfo.cs",".cs","1491","2024-12-13T10:41:34.0000000+03:00","5A1FB57CBD150869B0DFE6D41F3681A39FA3681F16F6354A4C351BB0D1D594A5","source"
|
||||||
|
"EnablerLoader\EnablerLoader.cs",".cs","3170","2024-12-13T10:41:34.0000000+03:00","01649BACBAD733D6A655EAE87DC7B3781F62B8B8079409C5AD56A010A657F248","source"
|
||||||
|
"EnablerLoader\EnablerLoader.csproj",".csproj","3115","2024-12-13T10:41:34.0000000+03:00","99A5FC20BD13E491A50361CF6F89BD1593DDDBAC81C90F582EC42EE797915F3A","project/config"
|
||||||
|
"EnablerLoader\Properties\AssemblyInfo.cs",".cs","1489","2024-12-13T10:41:34.0000000+03:00","8B646438A0D870826168DC48F480B54D519DF9D3EA3E5B9152E3D42BEFCE9E71","source"
|
||||||
|
"ExtentsIntersect\Commands.cs",".cs","7245","2024-12-13T10:41:34.0000000+03:00","29EDC0C1FC1DDA546EC1B9E5A1D7E044F413C5628A447EDF80347BBD4CE9FE1A","source"
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj",".csproj","3300","2024-12-13T10:41:34.0000000+03:00","6B0B3241EE38C0019FFB61976125BB606A9E43A090366875E4CF006D0528D84D","project/config"
|
||||||
|
"ExtentsIntersect\Properties\AssemblyInfo.cs",".cs","1495","2024-12-13T10:41:34.0000000+03:00","445B83D172EBA8BF83E465E42E948C266B45C51549D262BA967065C59D068C57","source"
|
||||||
|
"Files\.gitkeep",".gitkeep","0","2024-12-13T10:41:34.0000000+03:00","E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855","data/other"
|
||||||
|
"FilesRelease\AnnotateLineNumbers.dll",".dll","126976","2024-12-13T10:41:34.0000000+03:00","799BC277ED98BD870F01824180B5A945B24F016DFD9956A8CCC630AFE80FDFA4","autodesk/binary"
|
||||||
|
"FilesRelease\AutoAnnotateView.dll",".dll","40960","2024-12-13T10:41:34.0000000+03:00","E625DD3F01DC1B9C578D87FA03C6A5E10607601032CA78B22B8488C02E3D7B77","autodesk/binary"
|
||||||
|
"FilesRelease\AutoElevation.dll",".dll","28160","2024-12-13T10:41:34.0000000+03:00","3980E98D98D507A46212C8E711E11E8569DEB550B76947948BAF85BFB0A44311","autodesk/binary"
|
||||||
|
"FilesRelease\AutoLinenumberConnections.dll",".dll","41472","2024-12-13T10:41:34.0000000+03:00","0F6B2A759F2A63B9152B480B6968BDA20F42AD1D922F67CA6E6BFD31A0715F35","autodesk/binary"
|
||||||
|
"FilesRelease\CheckOrthoView.dll",".dll","14848","2024-12-13T10:41:34.0000000+03:00","89DB5E537C2BAEC292CDD8A0A43819119850119D54958E8CC3C43E2136AB24A0","autodesk/binary"
|
||||||
|
"FilesRelease\EnablerLoader.dll",".dll","6144","2024-12-13T10:41:34.0000000+03:00","745D625C27F92842F2EFF3C515DB48BB9FC0FE59B6E4559ACD696BCC93FF4C51","autodesk/binary"
|
||||||
|
"FilesRelease\ExtentsIntersect.dll",".dll","6656","2024-12-13T10:41:34.0000000+03:00","59D2776E083D4BE2FBFBE4F43009EAA9CE0E81A1752815B45C510F80654169D9","autodesk/binary"
|
||||||
|
"FilesRelease\GetComponentGeometry.dll",".dll","10240","2024-12-13T10:41:34.0000000+03:00","9EA8C48FEC4D36D32CC6AC88B78C434662C16D4484F86EFAA46ECC309E9F9142","autodesk/binary"
|
||||||
|
"FilesRelease\GetComponentGeometry.xml",".xml","1239","2024-12-13T10:41:34.0000000+03:00","70169C3A3AAAFE5A2282E01D5B9B7C99F2F4FF9B7514553434302674ABE46C98","data/other"
|
||||||
|
"FilesRelease\GetLinenumberAnnotationText.dll",".dll","23040","2024-12-13T10:41:34.0000000+03:00","047E721DBE380061D9ABDD92BC5475440E3B7ADB2BD0F544D538BA24B121D30E","autodesk/binary"
|
||||||
|
"FilesRelease\GetPlantScriptFolderPath.dll",".dll","4608","2024-12-13T10:41:34.0000000+03:00","5080A167A1DAF6C19BE08F6CAB678D490736B5E07E121A918A2915F0D9D8BF65","autodesk/binary"
|
||||||
|
"FilesRelease\GetScriptParameters.dll",".dll","6656","2024-12-13T10:41:34.0000000+03:00","7FF7B0D26BE8D89FF4A5A4FA1C6EC17BDA1506BCCB78AFE0E650137CD7BA5E87","autodesk/binary"
|
||||||
|
"FilesRelease\InsertElevation.dll",".dll","24576","2024-12-13T10:41:34.0000000+03:00","9C1690F2D1096603568A979EED162E5C93095634A8205916F7E989FDBE263411","autodesk/binary"
|
||||||
|
"FilesRelease\LoadedAssemblies.dll",".dll","4608","2024-12-13T10:41:34.0000000+03:00","277EB83C587A984DC2F558B8A7C86AA98E195A77AFA6FADD7DB83F2B801C0E4E","autodesk/binary"
|
||||||
|
"FilesRelease\OrthoAutoAnnotate.dll",".dll","104448","2024-12-13T10:41:34.0000000+03:00","70019D38BFEBA60978DEB18C10E4419A2308DEC71D73EB91F1F70CA59ED7503A","autodesk/binary"
|
||||||
|
"FilesRelease\OrthoLoader.dll",".dll","19968","2024-12-13T10:41:34.0000000+03:00","DB56886F2B217487F3EB97A22B6300F8FD4EDAF65DDFC2055E539073ED99D96B","autodesk/binary"
|
||||||
|
"FilesRelease\P3DCopyMissingObjectsToOrthoDrawing.dll",".dll","14336","2024-12-13T10:41:34.0000000+03:00","6C879AFC7F35EC25E5E2FFF9FF0EE6EFEB155670DBFD5D0CDE9A0F629C5727B2","autodesk/binary"
|
||||||
|
"FilesRelease\P3DNewMa.dll",".dll","115712","2024-12-13T10:41:34.0000000+03:00","C15E9626ABA24FB22DF4ABC849970B92F0B79552A77FB2E796CC3EEE87C5F0A6","autodesk/binary"
|
||||||
|
"FilesRelease\P3DSetLayerForViewport.dll",".dll","4608","2024-12-13T10:41:34.0000000+03:00","A28E58FDE4EBAA26450CA646C5A85F98C1A04AA42C0BFC5413D718243ACBF42B","autodesk/binary"
|
||||||
|
"FilesRelease\PHPAnnotations.dll",".dll","69120","2024-12-13T10:41:34.0000000+03:00","816A693F1B775C5506043DD0461055F248D3897E96AC8285DAE29C5B71FFCA73","autodesk/binary"
|
||||||
|
"FilesRelease\Settings.xml",".xml","105735","2024-12-13T10:41:34.0000000+03:00","C1D4D6D38C691826390755C68E2FA2ED9A46B48CC547FBB02186796D96021FFC","data/other"
|
||||||
|
"FilesRelease\SwapAttributesMenuItem.dll",".dll","11264","2024-12-13T10:41:34.0000000+03:00","674C865E34F9C877561E03E2077F7F2C6852C3C8B6A0503ACAA7619F3E80A460","autodesk/binary"
|
||||||
|
"FilesRelease\Template.dwg",".dwg","149935","2024-12-13T10:41:34.0000000+03:00","22CAAD35CE9C55891CF91042ED9B2C23BA4D5A0745AA40D69F41C1F609DAADB3","document/binary"
|
||||||
|
"FilesRelease\UpdateOrthoDrawings.dll",".dll","45568","2024-12-13T10:41:34.0000000+03:00","69FD3ED5996C8DABF111A1FC69F99DBA7C401C5FF2A74C7F855E6912AA03B84F","autodesk/binary"
|
||||||
|
"FilesRelease\UpdateOrthoViewBlocks.dll",".dll","15360","2024-12-13T10:41:34.0000000+03:00","5022D4D66D79E7E7D82F9FCB647DF8E1FE658A4694EB7794E363D5EA5517F5A9","autodesk/binary"
|
||||||
|
"FilesRelease\Справка по работе с палитрой.docx",".docx","850952","2024-12-13T10:41:34.0000000+03:00","870F2181A2BA417FB4EEE92D1A3D2CE560EDBA21CC579FE3F4E7CF9F4B9F2008","document/binary"
|
||||||
|
"FilesRelease\Справка по работе с палитрой.pdf",".pdf","742814","2024-12-13T10:41:34.0000000+03:00","0A7053E3613804B819458082A7F74EDC8FAD0DC4F117AEF8389C1E2D054E6CAB","document/binary"
|
||||||
|
"FilesRelease\ico\button_BJ.png",".png","1235","2024-12-13T10:41:34.0000000+03:00","414F0A23E917D41A82C697B0E9CDDDF9BFCACD1627310BD5717AEA172418AA51","ui/resource"
|
||||||
|
"FilesRelease\ico\button_CAC.png",".png","1943","2024-12-13T10:41:34.0000000+03:00","FA2B8877F8B41C70BA62C737C40374394D6840A53DFE2D0B0F83463C4817C138","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-AAV.png",".png","1905","2024-12-13T10:41:34.0000000+03:00","6AB171963B553B434B5AA4BFBE91993B1782606AAF9B486FA23BB27BC1F0E4AA","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-AC.png",".png","1751","2024-12-13T10:41:34.0000000+03:00","60A6BD62EF3E50BDDCD00D9C281F2399E6C9D42E0C2DAA1742273C0DC48FE9C3","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-AE.png",".png","2001","2024-12-13T10:41:34.0000000+03:00","F1DCF0E908F5AF38CCD13ABA58B824E5B186430414499C0F623C1D5EEAD8DAD7","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-ALC.png",".png","1740","2024-12-13T10:41:34.0000000+03:00","19DB2449B66B95965155E6E3BC313BD52000FE38C95B0FAD90EF07DF53EA9CC9","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-COV.png",".png","2007","2024-12-13T10:41:34.0000000+03:00","529BDD045961C244FBD0DE177B899AF9E7CE0F4506B3463C56D2704B3BF207B5","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-DJ.png",".png","1470","2024-12-13T10:41:34.0000000+03:00","127957752DC2B6573CD2FD9A2791914BA22802E07E9B7E23CD3AE1FFF9E4FFC4","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-ELN.png",".png","1927","2024-12-13T10:41:34.0000000+03:00","DF32E6A465D5C196A17F3F96473315590DF2D71995F63D2D241D7599B62C99BB","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-ESN.png",".png","1636","2024-12-13T10:41:34.0000000+03:00","0F089184CFD428DA3620F9C0AD2DCBFC21B31ED34FA301E8D5D45923783C0CC7","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-IE.png",".png","1885","2024-12-13T10:41:34.0000000+03:00","F1C6373BFAF82E1908AF371D5F21133D27E0B84AFC706A703530855A2046FE43","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-IOD.png",".png","1942","2024-12-13T10:41:34.0000000+03:00","494E90C899A0BB5BB365B0E1452E92A68359610C5A38A37D09F520A39BDB3899","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-LN.png",".png","2024","2024-12-13T10:41:34.0000000+03:00","F3305ED6D266E29FA475D4C8A7DF38D2D2A1776A4CE379B876B6CFA278B2FE5D","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-MA.png",".png","1907","2024-12-13T10:41:34.0000000+03:00","9386249121644DCF4B9C70491F561E8B6E5BAAE87EBB2C76A84E46B10A60C8C3","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-OA.png",".png","1999","2024-12-13T10:41:34.0000000+03:00","EAA2AD7EE5C6B7F3716AF1D7690C76AE59229AE9B6BA02009F5009CD9307F4E8","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-OSI.png",".png","1508","2024-12-13T10:41:34.0000000+03:00","422D10B6EBDD76085CF9C5985391CCA060464B200D6792D604658AAE47F12CEE","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-RA.png",".png","1826","2024-12-13T10:41:34.0000000+03:00","1DB3F39C6CCA4EABE79D81DE6DCF9900649CDC9064F2EBF5E45F9AD849B8317F","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-RMP.png",".png","1759","2024-12-13T10:41:34.0000000+03:00","156026EC6DEB7BDBE720047409E9A25615D650D8634C2F0BAF49A71E27135258","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-ULN.png",".png","1928","2024-12-13T10:41:34.0000000+03:00","B37EBB460691EAA7BC3A91DF05C27FE7CC1F0E9F9D69BDA7703956EAA7AA785C","ui/resource"
|
||||||
|
"FilesRelease\ico\button_PXP-UOB.png",".png","1569","2024-12-13T10:41:34.0000000+03:00","3BC16B9923CCD34CF10F403CD65732B217E255E89539174841E7F30D9DFD2DCD","ui/resource"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.cs",".cs","18173","2024-12-13T10:41:34.0000000+03:00","A86E56F225F704386ACB3E13AEB16B646EB29202FBFEB5A25D23ED17B9E658B8","source"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj",".csproj","4919","2024-12-13T10:41:34.0000000+03:00","77207EFAE162733A1ED1CF2592719D62E145547FCB0E000EAAC8A40834D611FF","project/config"
|
||||||
|
"GetComponentGeometry\Properties\AssemblyInfo.cs",".cs","1503","2024-12-13T10:41:34.0000000+03:00","99A54031E3977882A24ECFBFD5D993853F74119FDE6E897F4D20A1D9B47DC7F4","source"
|
||||||
|
"GetLinenumberAnnotationText\F2_Xml.cs",".cs","5429","2024-12-13T10:41:34.0000000+03:00","C33DE1D612E7BC59A9D6B025CCA8182C08E125D8F75499457D904A75CC9E56DA","source"
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj",".csproj","4412","2024-12-13T10:41:34.0000000+03:00","0FECA68B7453D60838C28DADF27B94DAF5B4C691085C41268B5144629C0F1F00","project/config"
|
||||||
|
"GetLinenumberAnnotationText\Index_Xml.cs",".cs","2156","2024-12-13T10:41:34.0000000+03:00","B5F7E79E3E636BA52D7BB77E56FD5C72E9DE249836311A29D649C811078000CF","source"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs",".cs","41350","2024-12-13T10:41:34.0000000+03:00","B440F0FADEC59F2FDD43FCBDAABC5D629508BC56466EEA273967033B4190F76C","source"
|
||||||
|
"GetLinenumberAnnotationText\Processing_Xml.cs",".cs","5031","2024-12-13T10:41:34.0000000+03:00","06FD4D781F09A299046489335272948E2307D0DAD2751950B4D80229A111379C","source"
|
||||||
|
"GetLinenumberAnnotationText\Properties\AssemblyInfo.cs",".cs","2124","2024-12-13T10:41:34.0000000+03:00","FDF01977657A695602DB09679D8E38D4F26DFFE5602AF2092DCF8B519F4CC700","source"
|
||||||
|
"GetLinenumberAnnotationText\Properties\Resources.Designer.cs",".cs","3465","2024-12-13T10:41:34.0000000+03:00","273713640025B94734F36313273823890B9FBA6303259EE53EF8A235D9491054","source"
|
||||||
|
"GetLinenumberAnnotationText\Properties\Resources.resx",".resx","5817","2024-12-13T10:41:34.0000000+03:00","4363CD7D5B8671C72442CE1A1BFC10D64EBD24B2D718B54BD4FCD025E4967298","ui/resource"
|
||||||
|
"GetPlantScriptFolderPath\Commands.cs",".cs","1072","2024-12-13T10:41:34.0000000+03:00","5A24605C7EEC3F14EDAC7310BC414B6DCB6F1E8CB4CD7F9DF8BB091FDDDCFC92","source"
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj",".csproj","3011","2024-12-13T10:41:34.0000000+03:00","96877CED79F6BE7A1B3BF776AEBBAAE237C6A09580A371509C2D76BB3BCB02E1","project/config"
|
||||||
|
"GetPlantScriptFolderPath\Properties\AssemblyInfo.cs",".cs","1511","2024-12-13T10:41:34.0000000+03:00","0399DF6ED28EED87D3CCA6C980B84249595F2C2CDDB3341D507674A82BD62677","source"
|
||||||
|
"GetScriptParameters\GetScriptParameters.cs",".cs","4074","2024-12-13T10:41:34.0000000+03:00","899B6DDECC1461D0AFEB4A5D15B91EE72240358FB8D27EF362DB4D4419C10A86","source"
|
||||||
|
"GetScriptParameters\GetScriptParameters.csproj",".csproj","2599","2024-12-13T10:41:34.0000000+03:00","49401A4BD4620A1FFD736EE7BD341F3AD8A1B1460F9421A037FF77C5311E9285","project/config"
|
||||||
|
"GetScriptParameters\Properties\AssemblyInfo.cs",".cs","1501","2024-12-13T10:41:34.0000000+03:00","680FF1614A7FB07B3F98CB26F9133A899AB7DF635623BD66AD71ADAC54A47FEC","source"
|
||||||
|
"InsertElevation\ArxImports.cs",".cs","1200","2024-12-13T10:41:34.0000000+03:00","4EBFB98999589A71765D29AAF5B61078836E6060046C26B3D69FA404C5A9ACF5","source"
|
||||||
|
"InsertElevation\Commands.cs",".cs","73527","2024-12-13T10:41:34.0000000+03:00","057A9A3123DEFE6358CE8B1D06852E048DB7A6C3D308563BEC4DEB506E210925","source"
|
||||||
|
"InsertElevation\InsertElevation.csproj",".csproj","4496","2024-12-13T10:41:34.0000000+03:00","E9D2C81E14D2349F527987BA3EC9B1F82E16796E13B51A6986DC7CDA2AD8FFBC","project/config"
|
||||||
|
"InsertElevation\XMLFile.cs",".cs","3781","2024-12-13T10:41:34.0000000+03:00","FEFD5410F45CB8E5D888A739F9D7B91126C4041FF12C7BC000D4A6B89781ED23","source"
|
||||||
|
"InsertElevation\Properties\AssemblyInfo.cs",".cs","1493","2024-12-13T10:41:34.0000000+03:00","5959F8AF302F040DA55277FB3C81F6715DE1AA966B8D837FD833D7AD36F85AFA","source"
|
||||||
|
"lib\Excel.dll",".dll","64000","2024-12-13T10:41:34.0000000+03:00","67E0A592F5AABF78E6602F3CEBDEEE9B8D668CF4F928A3E784A3685C9076172C","autodesk/binary"
|
||||||
|
"lib\ICSharpCode.SharpZipLib.dll",".dll","192512","2024-12-13T10:41:34.0000000+03:00","CFC2A838569A48D16A15269BB701DE87B81B3D2BC303BB7C4C3724CC3BBA0C50","autodesk/binary"
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.cs",".cs","1983","2024-12-13T10:41:34.0000000+03:00","ECC1D1925E2274731885E4B0A33553D88DF5CE26F715F53DECDC86417E07CBEA","source"
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.csproj",".csproj","2919","2024-12-13T10:41:34.0000000+03:00","6592FFEFB904C2A6390960073D6B1C5AC10A8323A7F44BF74365F6948F3BAF16","project/config"
|
||||||
|
"LoadedAssemblies\Properties\AssemblyInfo.cs",".cs","1495","2024-12-13T10:41:34.0000000+03:00","20584E02ED3005AE9C767C466B042D05AA1092CA74FB317830C5A0F2292D90EA","source"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs",".cs","543454","2024-12-13T10:41:34.0000000+03:00","7A1D6C65AFC619AB5EF39CB0E65D16E4EA8615712A789709937BB8C2CC9283C9","source"
|
||||||
|
"OrthoAutoAnnotate\DimensionsJig.cs",".cs","29130","2024-12-13T10:41:34.0000000+03:00","C1AA5D7A05F87E35AA414898A1A277678F8CDDB4F78BEDF2E286261003365119","source"
|
||||||
|
"OrthoAutoAnnotate\HighlightAndZoomPnPId.cs",".cs","10918","2024-12-13T10:41:34.0000000+03:00","533FACB562F598B7E8DEDC636F9E91F17858C9A577573A6CC3EF1AC1750743EC","source"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj",".csproj","4996","2024-12-13T10:41:34.0000000+03:00","BBC3E9A0B32BF79A53FBDAD3F0C2D4A0408EBED99C42941548F17A5EDD0BC623","project/config"
|
||||||
|
"OrthoAutoAnnotate\SulphurSupport.cs",".cs","2646","2024-12-13T10:41:34.0000000+03:00","BED1B60B154BAFC5388EAC8DABA1C72309A5FDB30344C0A8FEFE02F14FF0B380","source"
|
||||||
|
"OrthoAutoAnnotate\XMLFile.cs",".cs","11270","2024-12-13T10:41:34.0000000+03:00","CC0E527AB65B3ECBFA5D0CE8AF82A1968280F2EA0CA492B9C19EB5C3E5394072","source"
|
||||||
|
"OrthoAutoAnnotate\Properties\AssemblyInfo.cs",".cs","1344","2024-12-13T10:41:34.0000000+03:00","137C070DA2C2681CBEAD842E1D35BD2F355282BE1D1F4D2586B3117DB8F6460E","source"
|
||||||
|
"OrthoLoader\Loader.cs",".cs","6996","2024-12-13T10:41:34.0000000+03:00","84503CDA2BD1A0E520E78878AB19786A65AB14193D3FF979463B481EBA42B38F","source"
|
||||||
|
"OrthoLoader\OrthoLoader.csproj",".csproj","3924","2024-12-13T10:41:34.0000000+03:00","5E32F54CA6F6E6EF13EBF23396198F25063DAA2AFE5812DC6F57DAC8B8161E1E","project/config"
|
||||||
|
"OrthoLoader\Ribbon.cs",".cs","29366","2024-12-13T10:41:34.0000000+03:00","10F305AFF461B94F1D58E01E066459EE1D11E3AECC34A4997735A498564C8F61","source"
|
||||||
|
"OrthoLoader\ico\button_BJ.png",".png","1235","2024-12-13T10:41:34.0000000+03:00","414F0A23E917D41A82C697B0E9CDDDF9BFCACD1627310BD5717AEA172418AA51","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_CAC.png",".png","1943","2024-12-13T10:41:34.0000000+03:00","FA2B8877F8B41C70BA62C737C40374394D6840A53DFE2D0B0F83463C4817C138","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-AAV.png",".png","1905","2024-12-13T10:41:34.0000000+03:00","6AB171963B553B434B5AA4BFBE91993B1782606AAF9B486FA23BB27BC1F0E4AA","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-AC.png",".png","1751","2024-12-13T10:41:34.0000000+03:00","60A6BD62EF3E50BDDCD00D9C281F2399E6C9D42E0C2DAA1742273C0DC48FE9C3","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-AE.png",".png","2001","2024-12-13T10:41:34.0000000+03:00","F1DCF0E908F5AF38CCD13ABA58B824E5B186430414499C0F623C1D5EEAD8DAD7","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-ALC.png",".png","1740","2024-12-13T10:41:34.0000000+03:00","19DB2449B66B95965155E6E3BC313BD52000FE38C95B0FAD90EF07DF53EA9CC9","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-COV.png",".png","2007","2024-12-13T10:41:34.0000000+03:00","529BDD045961C244FBD0DE177B899AF9E7CE0F4506B3463C56D2704B3BF207B5","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-DJ.png",".png","1470","2024-12-13T10:41:34.0000000+03:00","127957752DC2B6573CD2FD9A2791914BA22802E07E9B7E23CD3AE1FFF9E4FFC4","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-ELN.png",".png","1927","2024-12-13T10:41:34.0000000+03:00","DF32E6A465D5C196A17F3F96473315590DF2D71995F63D2D241D7599B62C99BB","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-ESN.png",".png","1636","2024-12-13T10:41:34.0000000+03:00","0F089184CFD428DA3620F9C0AD2DCBFC21B31ED34FA301E8D5D45923783C0CC7","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-IE.png",".png","1885","2024-12-13T10:41:34.0000000+03:00","F1C6373BFAF82E1908AF371D5F21133D27E0B84AFC706A703530855A2046FE43","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-IOD.png",".png","1942","2024-12-13T10:41:34.0000000+03:00","494E90C899A0BB5BB365B0E1452E92A68359610C5A38A37D09F520A39BDB3899","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-LN.png",".png","2024","2024-12-13T10:41:34.0000000+03:00","F3305ED6D266E29FA475D4C8A7DF38D2D2A1776A4CE379B876B6CFA278B2FE5D","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-MA.png",".png","1907","2024-12-13T10:41:34.0000000+03:00","9386249121644DCF4B9C70491F561E8B6E5BAAE87EBB2C76A84E46B10A60C8C3","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-OA.png",".png","1999","2024-12-13T10:41:34.0000000+03:00","EAA2AD7EE5C6B7F3716AF1D7690C76AE59229AE9B6BA02009F5009CD9307F4E8","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-OSI.png",".png","1508","2024-12-13T10:41:34.0000000+03:00","422D10B6EBDD76085CF9C5985391CCA060464B200D6792D604658AAE47F12CEE","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-RA.png",".png","1826","2024-12-13T10:41:34.0000000+03:00","1DB3F39C6CCA4EABE79D81DE6DCF9900649CDC9064F2EBF5E45F9AD849B8317F","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-RMP.png",".png","1759","2024-12-13T10:41:34.0000000+03:00","156026EC6DEB7BDBE720047409E9A25615D650D8634C2F0BAF49A71E27135258","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-ULN.png",".png","1928","2024-12-13T10:41:34.0000000+03:00","B37EBB460691EAA7BC3A91DF05C27FE7CC1F0E9F9D69BDA7703956EAA7AA785C","ui/resource"
|
||||||
|
"OrthoLoader\ico\button_PXP-UOB.png",".png","1569","2024-12-13T10:41:34.0000000+03:00","3BC16B9923CCD34CF10F403CD65732B217E255E89539174841E7F30D9DFD2DCD","ui/resource"
|
||||||
|
"OrthoLoader\Properties\AssemblyInfo.cs",".cs","1483","2024-12-13T10:41:34.0000000+03:00","3BA048D1ADD87ECBD1EB1D60E6C737B3B81920755B77828C1084B239990B126D","source"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\Commands.cs",".cs","5914","2024-12-13T10:41:34.0000000+03:00","A3AB868B3DD5FAE9CF374B9409431D7785E9F3E1D7EEB909FF84E47D7219A715","source"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\CopyObjects.cs",".cs","23350","2024-12-13T10:41:34.0000000+03:00","D9D4DDEC93877CD65C008BB3C34320063DB601CF63836573042140538AA7291B","source"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj",".csproj","3895","2024-12-13T10:41:34.0000000+03:00","70E636B328BBF14650C945855898543F563098F9A7FBF47EB5D57318C1B21871","project/config"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\XMLFile.cs",".cs","2097","2024-12-13T10:41:34.0000000+03:00","5EEC3947B34240108C498361E625E40B32B4C8B2850184D5B558CFED2CF9400F","source"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\Properties\AssemblyInfo.cs",".cs","1527","2024-12-13T10:41:34.0000000+03:00","2273D6F54DB31EFA129884F66621A75CA4352D71D3C73C9CAF2AC5F0AFBD0CBA","source"
|
||||||
|
"P3DNewMa\.refsignored",".refsignored","0","2024-12-13T10:41:34.0000000+03:00","E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855","data/other"
|
||||||
|
"P3DNewMa\ARXImports.cs",".cs","1949","2024-12-13T10:41:34.0000000+03:00","F0176472FBA507CFDAF9FE15BA1C05C9722930BC44E6695F074299679A517B84","source"
|
||||||
|
"P3DNewMa\Commands.cs",".cs","532","2024-12-13T10:41:34.0000000+03:00","784ACB7240C55E667160D91563487A8877540689221D7EA7BBBE49E2C9B7A39F","source"
|
||||||
|
"P3DNewMa\EditorExtension.cs",".cs","515","2024-12-13T10:41:34.0000000+03:00","1C0586965D6F3F43E403FBFED2F5F4910EAA1CC26ADAE31F72EFE4BF2D69FD56","source"
|
||||||
|
"P3DNewMa\Extensions.cs",".cs","3075","2024-12-13T10:41:34.0000000+03:00","136921BBEFD42BAF87C168B993B76EB123B5270551A50A8A1A54C6671D761541","source"
|
||||||
|
"P3DNewMa\MewMaPalette.cs",".cs","2022","2024-12-13T10:41:34.0000000+03:00","44FF61D3C142DC1D424ABBC4085093474545CE799FAD358BC85C9A1D32F95918","source"
|
||||||
|
"P3DNewMa\NewMaControl.cs",".cs","374174","2024-12-13T10:41:34.0000000+03:00","2FD74A326834A23778BB528B148B4352015475F9955F137F347D948E49BBAAE8","source"
|
||||||
|
"P3DNewMa\NewMaControl.Designer.cs",".cs","22411","2024-12-13T10:41:34.0000000+03:00","B159C05CC0BC79DF83665BE9E47EECCE10EAD1CD0A83DF3FD44EDCAE392FF94F","source"
|
||||||
|
"P3DNewMa\NewMaControl.resx",".resx","21835","2024-12-13T10:41:34.0000000+03:00","CF838E8CB3A2F89B76EA20D62545ACECE9ABBD47E48454F71B7D544AD6110C85","ui/resource"
|
||||||
|
"P3DNewMa\P3DNewMa.csproj",".csproj","5472","2024-12-13T10:41:34.0000000+03:00","A2A6F225A7B376DE556E1561FA03BC8AED04ECC4A39FE107040EAD9742B6475B","project/config"
|
||||||
|
"P3DNewMa\XMLFile.cs",".cs","3172","2024-12-13T10:41:34.0000000+03:00","0F51989F6C1D522CBB621B71A72DC1AEA95CC6CF8567C570DE8C38D7B5E7F0ED","source"
|
||||||
|
"P3DNewMa\Properties\AssemblyInfo.cs",".cs","1474","2024-12-13T10:41:34.0000000+03:00","2F82DF350FD4AEB3CCDCF04F34D838374A2820F1F9C6A726450C33FDF8007AB7","source"
|
||||||
|
"P3DSetLayerForViewport\Commands.cs",".cs","1096","2024-12-13T10:41:34.0000000+03:00","A0E692C03F9CA1B7517146EE7E94E34A98E69B54FE28BD45BF554083583810A5","source"
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj",".csproj","3412","2024-12-13T10:41:34.0000000+03:00","330DE9D5089E7CEB960172815C06A902ACDD78222FDD7454533187B8554E23A9","project/config"
|
||||||
|
"P3DSetLayerForViewport\Properties\AssemblyInfo.cs",".cs","1507","2024-12-13T10:41:34.0000000+03:00","E31F7720110696842ECF302DA5EFE0A9AF070FD4A43FCCD6BACFF582351C9E2A","source"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs",".cs","95089","2024-12-13T10:41:34.0000000+03:00","2A897CC8D0DED5820AE442409F8CCCDC019B46EF2466A6B45F57C3E7A927D6ED","source"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj",".csproj","4665","2024-12-13T10:41:34.0000000+03:00","ED276F12610076E2C372112E94050FA1DEDE62F57C072834209028AF6D6DEFF1","project/config"
|
||||||
|
"PHPAnnotations\PHPAnnotationsForm.cs",".cs","36321","2024-12-13T10:41:34.0000000+03:00","40613C0A98E67EC441643848BD54FBFC1D4E2B157E6C2C1FF8DD1B30E9D4C926","source"
|
||||||
|
"PHPAnnotations\PHPAnnotationsForm.Designer.cs",".cs","31207","2024-12-13T10:41:34.0000000+03:00","164894CD2A2A138583488931149BA69A0D72AE34BED59FD375DAD723978D8FFF","source"
|
||||||
|
"PHPAnnotations\PHPAnnotationsForm.resx",".resx","5817","2024-12-13T10:41:34.0000000+03:00","4363CD7D5B8671C72442CE1A1BFC10D64EBD24B2D718B54BD4FCD025E4967298","ui/resource"
|
||||||
|
"PHPAnnotations\PHPBlockJig.cs",".cs","112795","2024-12-13T10:41:34.0000000+03:00","2E960188918EE74BD1D45E15D3C42430A63BB026CAB6FFA72A90180CC4077DA3","source"
|
||||||
|
"PHPAnnotations\Properties\AssemblyInfo.cs",".cs","1491","2024-12-13T10:41:34.0000000+03:00","32D45C44A55881BED443865DE3B30C66AF6485B42ACB7728450CA3ED377A35FD","source"
|
||||||
|
"SwapAttributesMenuItem\Commands.cs",".cs","15246","2024-12-13T10:41:34.0000000+03:00","67F465BE64805F8312E8A993464CCB575CE7090FF3AE194F59F78EB431C4C1F6","source"
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj",".csproj","3459","2024-12-13T10:41:34.0000000+03:00","3ECE76B8449AE9C26AE33001390ABFAF270AD899F69E17B7E717252A803B84C3","project/config"
|
||||||
|
"SwapAttributesMenuItem\Properties\AssemblyInfo.cs",".cs","1507","2024-12-13T10:41:34.0000000+03:00","5124A7D8538EF1AF115AC79430C0B52E2A0C029E5CAF9A3228202148A78D9DF2","source"
|
||||||
|
"UpdateOrthoDrawings\Back.jpg",".jpg","852","2024-12-13T10:41:34.0000000+03:00","E586854785E04F60E0C38205EB0C9C32737F1AF1D3C4CAE9BE6053FBC27011C8","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\Bottom.jpg",".jpg","872","2024-12-13T10:41:34.0000000+03:00","3703170ABBA78E89B3B1E5D80A2DB7A54B855554672FB74EE38E9D81850CC76A","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs",".cs","67491","2024-12-13T10:41:34.0000000+03:00","39F19BD5C8A41A3A61E305919EFBEF2C76B895649D4E24B426149F4AEAD18DF4","source"
|
||||||
|
"UpdateOrthoDrawings\CSV.cs",".cs","2144","2024-12-13T10:41:34.0000000+03:00","EB8624430DB53F9151DFAC99895ECF30D3550D1EE2ACC4428E509BDF6851303D","source"
|
||||||
|
"UpdateOrthoDrawings\Drawing.jpg",".jpg","890","2024-12-13T10:41:34.0000000+03:00","8050397CC041E17984D9989F5DF836A2F14D67FCE5907265F4FCB526EBDECE4D","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\Folder.jpg",".jpg","852","2024-12-13T10:41:34.0000000+03:00","F8413955CEA5F7D0EE562490BA289D6FC36FB645977A2DA719E0E0D010639C39","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\Front.jpg",".jpg","849","2024-12-13T10:41:34.0000000+03:00","A8EB3DBB3802A6F7F769E7670F3B7647E83190A4237BF1301A88CF579E85FDBF","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\Left.jpg",".jpg","872","2024-12-13T10:41:34.0000000+03:00","53E677ACA5E020276A9E04FD17B5EF467CF80E334ACA3DBA7DECBC900713FD93","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\OperationProgress.cs",".cs","2253","2024-12-13T10:41:34.0000000+03:00","56253C2521E2E025DACC59264B7F6D10E0AC0CDADDB8C26F7E96042FD388322F","source"
|
||||||
|
"UpdateOrthoDrawings\OperationProgress.designer.cs",".cs","4969","2024-12-13T10:41:34.0000000+03:00","F5759895842BF2D1D6C5E2B37ECD0B6BEBD914D65D7DD1AB82C08AEF73719056","source"
|
||||||
|
"UpdateOrthoDrawings\OperationProgress.resx",".resx","5817","2024-12-13T10:41:34.0000000+03:00","4363CD7D5B8671C72442CE1A1BFC10D64EBD24B2D718B54BD4FCD025E4967298","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\Ortho.jpg",".jpg","909","2024-12-13T10:41:34.0000000+03:00","9BC9BB2644C41DA07A6EA26A0E3AA808A9B362CADAFC11AD25D4BE7B22A2598E","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_DWG.ico",".ico","1150","2024-12-13T10:41:34.0000000+03:00","0799E5EC07964EBA52692F37FFB1C9DDFE19AFE6A16305246B7703E14CA3F009","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIEBAC.ico",".ico","1150","2024-12-13T10:41:34.0000000+03:00","009659E2831F480E97981A0FAA3B52A3E9BA5D46005F324F4EECE95F66CD462A","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIEBOT.ico",".ico","1150","2024-12-13T10:41:34.0000000+03:00","9263E25E56BAB1EEAAC23E239D476A5D5C21D4DB7932AF0123FBFB9F857168E9","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIEFRO.ico",".ico","1150","2024-12-13T10:41:34.0000000+03:00","83AFB03C33F2E7789451BEDF45A2C42A5179B039AAEF43D78783F001ACFB43AE","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIELEF.ico",".ico","1150","2024-12-13T10:41:34.0000000+03:00","BAAD02C63DA2563B7AD34E4FF1BD8AA5C3B35D0C5703C5F7DB7ECF9490970C1F","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIERIG.ico",".ico","1150","2024-12-13T10:41:34.0000000+03:00","FE4914F3ABEFBE2749A446438FAB8C50AAECDE98767DBFA917271917559FBB40","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIETOP.ico",".ico","1150","2024-12-13T10:41:34.0000000+03:00","625CCD960C3FD80A1ADC61B47F589652A359E9446FC1722B583ACDE2F60DD544","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\Right.jpg",".jpg","866","2024-12-13T10:41:34.0000000+03:00","F064FC75EA6D46D9B3D24FADC3253AC1ECF2AB595BC03866BD411C116D19D227","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\SelectAdditionalOperations.cs",".cs","1563","2024-12-13T10:41:34.0000000+03:00","F0C1B064779AA5AC7061D64C39A80D5BDBF7E52BCAEF458FA012141535F607C7","source"
|
||||||
|
"UpdateOrthoDrawings\SelectAdditionalOperations.designer.cs",".cs","8525","2024-12-13T10:41:34.0000000+03:00","884C92DFB0E9CAC5EE5CED340AF908E2BBF9D8B42CA4D7AAE835DCC754FD5F40","source"
|
||||||
|
"UpdateOrthoDrawings\SelectAdditionalOperations.resx",".resx","12505","2024-12-13T10:41:34.0000000+03:00","CF3A92172710A6DF9381EE336C1023AD17B72A33A2D124790F64E95059359409","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\SelectDrawings.cs",".cs","4128","2024-12-13T10:41:34.0000000+03:00","0AE10FC1752C25415B3213C394CACA464DF5F0C6C3FEE8DDA54DB43B411D965F","source"
|
||||||
|
"UpdateOrthoDrawings\SelectDrawings.designer.cs",".cs","7414","2024-12-13T10:41:34.0000000+03:00","CDBDA90059F071995CE8EB0F831EFFA50EFF87A23C366C223494EDAEF7B49AAF","source"
|
||||||
|
"UpdateOrthoDrawings\SelectDrawings.resx",".resx","12505","2024-12-13T10:41:34.0000000+03:00","58D46EA851C7363136B7D690DA11307C0319D1ABEA44659D584B27BAC0533D31","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\Up.jpg",".jpg","866","2024-12-13T10:41:34.0000000+03:00","ED7621550E663306DEDEFE54B09CF3C62D895A3D0FFC8A527A16660BD7254750","ui/resource"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj",".csproj","7597","2024-12-13T10:41:34.0000000+03:00","5F54220442CEE919A35022B8152C90C502F0FF9998BB9AD0A8788422989F5B47","project/config"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnP3dOrthoDrawingsUI.dll",".dll","362968","2024-12-13T10:41:34.0000000+03:00","A8A88996DD1F2FD89520785C7006923B36B005A3F38D845F3AA6DE85E0CB6C63","autodesk/binary"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnP3dOrthoProjectPart.dll",".dll","39384","2024-12-13T10:41:34.0000000+03:00","CD908D9332FF3AEDB5694DEF4331F217AE653C19A122B87C4D121ECFD3D8E157","autodesk/binary"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnP3dOrthoUtilMgd.dll",".dll","72152","2024-12-13T10:41:34.0000000+03:00","42C4103445EB5757DD21CBEF25255348F207F4F4C54FF7DD14F0C7F763CD95BE","autodesk/binary"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dAnno.dll",".dll","280536","2024-12-13T10:41:34.0000000+03:00","D662C2B24CE1CDF444A0C34926D29DEB5193D587D97DB3B9EB68E6E762D95B03","autodesk/binary"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dDbx.dll",".dll","244696","2024-12-13T10:41:34.0000000+03:00","375D8CCBDCE6CBB72B28AC23DFAE9201CC014F8D98ACEDF0A4AD512F038DB028","autodesk/binary"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dDef.dll",".dll","98264","2024-12-13T10:41:34.0000000+03:00","AD0A27CF6B3EDD7BFECC78FE622B180D397D74E5A359AB4A9630130CBF2B42B8","autodesk/binary"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dGen.dll",".dll","127960","2024-12-13T10:41:34.0000000+03:00","FC749B8E17760D9BDEFB65A54E263B8D1352C1892073C4DD60E69CC8302F5ABB","autodesk/binary"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dUtil.dll",".dll","143832","2024-12-13T10:41:34.0000000+03:00","43B1317D4F23BCC2D41C05695C04044A283E2B967E998E4B5644FD2B6FDBC937","autodesk/binary"
|
||||||
|
"UpdateOrthoDrawings\Properties\AssemblyInfo.cs",".cs","1501","2024-12-13T10:41:34.0000000+03:00","BC650E3D163407D7215CEA893BB8520B665BBCC3E321A32606357E84C45B8755","source"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs",".cs","38266","2024-12-13T10:41:34.0000000+03:00","D517CB29E8D5776FFBCFA5996FF23B4561F7EFDA1770CEF7598EF2111A81EAC1","source"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj",".csproj","5221","2024-12-13T10:41:34.0000000+03:00","CA2A88302437BE2FA8FFF9B96CD961DBC44A70715EC6F79FE9654F749FD72E6E","project/config"
|
||||||
|
"UpdateOrthoViewBlocks\XMLFile.cs",".cs","4244","2024-12-13T10:41:34.0000000+03:00","DCF9353EB9686C4D31CA5944F1CEA2EB6DF9B1C43EDF2946EAA10195662492A6","source"
|
||||||
|
"UpdateOrthoViewBlocks\Properties\AssemblyInfo.cs",".cs","1505","2024-12-13T10:41:34.0000000+03:00","66AE8EFD9E1D614FBDE58D2C0173F1775F1CACA16EDE5DE0A9459A72F1371A6C","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\drawing.png",".png","298","2024-12-13T10:41:34.0000000+03:00","7A6AC1F97278F8E79D9DAE52DB7D9833C516F6E5FCF554508A01323736542154","ui/resource"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\folder.png",".png","210","2024-12-13T10:41:34.0000000+03:00","87E56D1EDDEA45CE0588CF848406F981BAAE7713717B9FFAAB40881546836863","ui/resource"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Class1.cs",".cs","8299","2024-12-13T10:41:34.0000000+03:00","C4AA842DA6991DE2AD4D0A3573E844D21291A1E12570818859455F70DD7CB7EF","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs",".cs","67834","2024-12-13T10:41:34.0000000+03:00","969B85134832574C61A5026DECFB27D891FBC5CB4E7EB711B9309FFE0A1D8E6B","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs",".cs","63203","2024-12-13T10:41:34.0000000+03:00","F0D9865776CD53C604FE9E36FE6578A6196D5FC1C8FCBB0E6F2456136BB7F258","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs",".cs","64114","2024-12-13T10:41:34.0000000+03:00","96B19B37501ACCC8E0B6A93A3C7492C5971C8074F1A47EA74EC6052CA7EB9F1C","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs",".cs","53835","2024-12-13T10:41:34.0000000+03:00","73CF65197CD51A57B52392EB817C7B9E5B08180138218786FD5D191BB2312664","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs",".cs","19693","2024-12-13T10:41:34.0000000+03:00","E7E0AD9331F74063D499F6B89619AF790DCE8774BD16BCCCC7F7B1CA8554AF52","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs",".cs","63203","2024-12-13T10:41:34.0000000+03:00","F0D9865776CD53C604FE9E36FE6578A6196D5FC1C8FCBB0E6F2456136BB7F258","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs",".cs","64114","2024-12-13T10:41:34.0000000+03:00","96B19B37501ACCC8E0B6A93A3C7492C5971C8074F1A47EA74EC6052CA7EB9F1C","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberList - копия.cs",".cs","41978","2024-12-13T10:41:34.0000000+03:00","827C2FD40E56A86E25FAB78320EE30336F87D4178388C04055638AA68BFE831D","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberMarker - копия (2).cs",".cs","13778","2024-12-13T10:41:34.0000000+03:00","73E123A42D2C4C72DE73F5632F8BEF4328212D5ABC6A819AD91AA4AD57312F72","source"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberMarker - копия.cs",".cs","22961","2024-12-13T10:41:34.0000000+03:00","F3FA711BCBE61D3EBAF2E1EC5E01AA3C205FFA63930F4B17DB8259B978ED7A75","source"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText.sln",".sln","1184","2024-12-13T10:41:34.0000000+03:00","EE337ED7C38FA3FB31C2ACCB8933A2330FD50845A8A910817495250F3B9A9A2A","project/config"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\Источник.txt",".txt","634","2024-12-13T10:41:34.0000000+03:00","5F3F9FFAAAA4FE9534F5A1A16C7C42132D7CD6D335DA38C33F0206525388B607","data/other"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj",".csproj","2950","2024-12-13T10:41:34.0000000+03:00","DCFEC303EE6E7D30FC8D72CCC7CE72CF8DB1805DDBDFF2124DCEDC76B08C60B9","project/config"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs",".cs","21786","2024-12-13T10:41:34.0000000+03:00","48F7356657E95073A4E95CE96A24537B3C06EC06AD769A44913499CE4B641BA7","source"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\Properties\AssemblyInfo.cs",".cs","1484","2024-12-13T10:41:34.0000000+03:00","2B39009C8957250249193361237ABD33ACCED1521072F9B620DBDBCDDA3C3003","source"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText.sln",".sln","1184","2024-12-13T10:41:34.0000000+03:00","EE337ED7C38FA3FB31C2ACCB8933A2330FD50845A8A910817495250F3B9A9A2A","project/config"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\Источник.txt",".txt","634","2024-12-13T10:41:34.0000000+03:00","5F3F9FFAAAA4FE9534F5A1A16C7C42132D7CD6D335DA38C33F0206525388B607","data/other"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj",".csproj","2950","2024-12-13T10:41:34.0000000+03:00","DCFEC303EE6E7D30FC8D72CCC7CE72CF8DB1805DDBDFF2124DCEDC76B08C60B9","project/config"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs",".cs","21164","2024-12-13T10:41:34.0000000+03:00","A1CABEF6F902127B2754B40688113851496835A4044F186BE63037D371AF8EB0","source"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\Properties\AssemblyInfo.cs",".cs","1484","2024-12-13T10:41:34.0000000+03:00","2B39009C8957250249193361237ABD33ACCED1521072F9B620DBDBCDDA3C3003","source"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\Описание.txt",".txt","118","2024-12-13T10:41:34.0000000+03:00","31CD2F60B359A436BF3547BF861E1145813351944D38AF23953A55EFC29AD604","data/other"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation.sln",".sln","1148","2024-12-13T10:41:34.0000000+03:00","620BE31B6E7111F38DC85469C1023F06D575B35CC4C474E043A98C28A0A038A1","project/config"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\Источник.txt",".txt","581","2024-12-13T10:41:34.0000000+03:00","086DF20E3A352FBCC8FEDE6A555AF5B1DD91278E60062DFC64A4F218DC6C793E","data/other"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\ArxImports.cs",".cs","1200","2024-12-13T10:41:34.0000000+03:00","4EBFB98999589A71765D29AAF5B61078836E6060046C26B3D69FA404C5A9ACF5","source"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs",".cs","73682","2024-12-13T10:41:34.0000000+03:00","89801F75BA5A90ACC385BBFF006B39A9AEAB74EE3CFBC0A1383D7FD140578E5F","source"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj",".csproj","4435","2024-12-13T10:41:34.0000000+03:00","352C66A2482BF7683A7D09E0602A5DE7033F1150597DF22875629AF1299E1E8C","project/config"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\XMLFile.cs",".cs","3781","2024-12-13T10:41:34.0000000+03:00","FEFD5410F45CB8E5D888A739F9D7B91126C4041FF12C7BC000D4A6B89781ED23","source"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Properties\AssemblyInfo.cs",".cs","1460","2024-12-13T10:41:34.0000000+03:00","3955628FF4B5AFE33562777E0274A89EBAFF130713129E637EA899A5E8E68D8B","source"
|
||||||
|
"_archive\2019_PHPAnnotations\2019_PHPAnnotations\Class1.cs",".cs","3133","2024-12-13T10:41:34.0000000+03:00","CEC5435EF13ABD59E194C9CD81C3A2A9D58CF97B74D65E3FCD918690D1417E44","source"
|
||||||
|
"_archive\2019_PHPAnnotations\2019_PHPAnnotations\Class2.cs",".cs","159","2024-12-13T10:41:34.0000000+03:00","8DF997EC4D1589E64E447EB82729040B46C9B45D239BEFB16BFDC7DD71EFD1DB","source"
|
||||||
|
"_archive\2019_UpdateOrthoDrawings\2019_UpdateOrthoDrawings\XMLFile.cs",".cs","4732","2024-12-13T10:41:34.0000000+03:00","8DA91EDC6DFB4C16BF1A238FBF7887E9B6210849BA128935467352435AA8A1FC","source"
|
||||||
|
"_archive\GetLinenumberAnnotationText\test\ATest_p-clat.zip",".zip","15181842","2024-12-13T10:41:34.0000000+03:00","43D7159D0C20B6C1BA82FB68DB186D1A33D824CF9C01D9991E17D17D0F2C0AD1","document/binary"
|
||||||
|
"_archive\GetLinenumberAnnotationText\test\Тесты на аннотации.docx",".docx","173939","2024-12-13T10:41:34.0000000+03:00","DE7811BDE239CEBD2B24E9D47CCD5214FC92A7E40109E321E78693B9029D49AE","document/binary"
|
||||||
|
"_archive\GetLinenumberAnnotationText\test\Тесты на ошибки.docx",".docx","213774","2024-12-13T10:41:34.0000000+03:00","D8212979B1D23F6012040C580E2916063FB995780824EBFBAF8F70DFB9A486A5","document/binary"
|
||||||
|
@@ -0,0 +1,272 @@
|
|||||||
|
"RelativePath","SizeBytes","Sha256"
|
||||||
|
".editorconfig","1154","91579407CC1BF063A08E286BDEB02EE2836978AB0F247B9D66E6D73063D226AF"
|
||||||
|
".gitattributes","1663","AD78EDB5DFD7802DC618E3586DA0DCEFD2A4F311A64A359CC16398DCD06025C9"
|
||||||
|
".gitignore","6691","8C9C0295BD5EC252C29DD594776F306E60362DBFA357342E219EB6D357B09B16"
|
||||||
|
"CHANGELOG.md","7368","030F5E89D0570D34E6047F592A2C389CC74DED906B12ACAD5745875BF7623F06"
|
||||||
|
"P_Rec_Annot.sln","15727","8C6B34F53ABA8B3628BECD3678B6AA7B4BB295F6C261BF7AAA9FC1BEE0C646F7"
|
||||||
|
"README.md","7110","8CA7925F1911537BFB0BCEAC6D5CFC0B5B8B4A3A6E15A810F89C4DB8B095BD09"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","6945","6755BE78B5EB1CF3A88D008A46C9CE9DE504F637CDEE77981CBAF6CBC7BDB378"
|
||||||
|
"AnnotateLineNumbers\ArxImports.cs","2291","D8723EE15525950B9020AAA6E1296919BEB22D5BF825D729D68FE82EDEBA28EB"
|
||||||
|
"AnnotateLineNumbers\CheckResults.cs","22873","7C84D69FFD865ACC026195F774409170CB6B9F4602FD921A4F809EFED763CC1F"
|
||||||
|
"AnnotateLineNumbers\CheckResults.Designer.cs","6820","EB925164B219545379974C1C58A629043BDC44A1C0711004C21F551AA6429DA4"
|
||||||
|
"AnnotateLineNumbers\CheckResults.resx","12829","3FB0758FBDBE178B1794E446CA50637192F21A55498E91F66E57F5C6B2356B36"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","173778","91BA6E1F095E6F846459A721AD84EEFA44495117724465721D4E77851456FD59"
|
||||||
|
"AnnotateLineNumbers\LineNumberList.cs","78210","88773296C0AF4AF4A55564B02E309DB3E0632816F38A5EE7D16B5044093949B9"
|
||||||
|
"AnnotateLineNumbers\LineNumberMarker.cs","25092","8FA0E1AC7DBA024AB9493D13DDB6638A409B6A4DFA5F1C6849A843B5658FC71B"
|
||||||
|
"AnnotateLineNumbers\LN.jpg","887","EF21F64D179E1B6271824821DB7CA7CA8006FC2D3241D01EA2018811B7B177B1"
|
||||||
|
"AnnotateLineNumbers\OrthoDrawings.cs","56672","C79795533271B339E2467F7720EF4C1E8DD76C5AF740B26043456174934FA7F2"
|
||||||
|
"AnnotateLineNumbers\SelectDrawings.cs","3029","0A652A3A980EA8E497CD305CFFB01E58C3AFD098341DC85EA2F2872B8669E859"
|
||||||
|
"AnnotateLineNumbers\SelectDrawings.Designer.cs","6521","E82E5125D41505476B3162C180E5A111BD5A2F3326D56A32C1823EF0A7BE38B9"
|
||||||
|
"AnnotateLineNumbers\SelectDrawings.resx","12505","B970C32FA1863FF2F9052C44BFA526176DE74B12E154B0831FB78C012BD55830"
|
||||||
|
"AnnotateLineNumbers\Utils.cs","50306","1BD79E8008C7142803C511630E34D4057D563F0360EC24E2F8FD45FCDBD06858"
|
||||||
|
"AnnotateLineNumbers\XMLFile.cs","10103","AAA9F13E021E2987247B6A899B4AAC0CF589C06DD02E8FA8E6504DF618AFC837"
|
||||||
|
"AnnotateLineNumbers\Properties\AssemblyInfo.cs","1501","29293C12D3EE3ED9B68B9E81FD0709368C8E1AF5A201798453191E06106EB643"
|
||||||
|
"AnnotateLineNumbers\Properties\Resources.Designer.cs","3617","7D5142ADDCDB23818C3943043E01B16CA7D840DC89E60F08B0EDB10BCDE1E629"
|
||||||
|
"AnnotateLineNumbers\Properties\Resources.resx","6443","B5445CBFFA4AFA742BFDEB8FAB1706E3CDE5EEBEB56ECF073B68957E0CB94247"
|
||||||
|
"AnnotateLineNumbers\Resources\drawing.png","298","7A6AC1F97278F8E79D9DAE52DB7D9833C516F6E5FCF554508A01323736542154"
|
||||||
|
"AnnotateLineNumbers\Resources\folder.png","210","87E56D1EDDEA45CE0588CF848406F981BAAE7713717B9FFAAB40881546836863"
|
||||||
|
"AutoAnnotateView\ArxImports.cs","1211","6251A1C19599444EC4617965B47B39C1C7AE909CF294D6D4754560E83CC22A72"
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","5351","6AAD00298D36AB118F8A611AE9E27175F0D15B6E93420ACBF4BA54BE0D910A21"
|
||||||
|
"AutoAnnotateView\Commands.cs","49015","4B22A43CE772309AFCAF41D59BACC4734C7F34D7D6EC76BA6F914FD78628F98A"
|
||||||
|
"AutoAnnotateView\SelectAnnotationsToUpdate.cs","1582","3B387F93287BE2AB84D9003E6AE78944192A5F8C896135AA21573C73F342C649"
|
||||||
|
"AutoAnnotateView\SelectAnnotationsToUpdate.Designer.cs","7368","9E15FCE6D0025EC857246FD473437B6017084CC671390BFFB0A75F9DA6A0B1A9"
|
||||||
|
"AutoAnnotateView\SelectAnnotationsToUpdate.resx","5817","4363CD7D5B8671C72442CE1A1BFC10D64EBD24B2D718B54BD4FCD025E4967298"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","97633","874EAD5EC8F92D626F55143534B9E572C810AC0EEAFC1A0CD0C53492E04ED0A6"
|
||||||
|
"AutoAnnotateView\XMLFile.cs","4374","2F0DD0AACD69B24E0BEA693F02C6837723C61C18B7BECF79AC21D8DF6DDFFC7E"
|
||||||
|
"AutoAnnotateView\Properties\AssemblyInfo.cs","1495","0E7808712B45F7E7EC5ADADEBD21243E89544844627477BA8FAECB4127794499"
|
||||||
|
"AutoElevation\Annotations.cs","45868","C8558FBBDEEA72322816601CC97B16326F72269BD085F23268F6813FEB4B7E32"
|
||||||
|
"AutoElevation\ArxImports.cs","1198","4E135D772B855E3F5B9A80FCDE7F18C1E6A4B2B03056E4A1452C9E8C7B0A3BC5"
|
||||||
|
"AutoElevation\AutoElevation.csproj","5609","086F17ECED970E2E028283343C037F41C9949FFDEAA9C406952A62AB9E902AF7"
|
||||||
|
"AutoElevation\Commands.cs","35132","206CFE54EC5D0CAC890D0DB9B8F0A0B9C2AF67F508E2F1058C8BC09B974A5EB3"
|
||||||
|
"AutoElevation\XMLFile.cs","3785","088194497E833A39F3BCB0E2D7F2BB7C2B4FC90006D068390D6EDE76CF67318E"
|
||||||
|
"AutoElevation\Properties\AssemblyInfo.cs","1489","6002ED0209919EF12328DB3B7437605B800382B0ACD31D483EF5FC5DCB4AF5A6"
|
||||||
|
"AutoLinenumberConnections\ArxImports.cs","1926","EE1AD62A04861EBC65C16590F70F208FBF688BC6AB8FD696A7A45356748CDC78"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","5211","3B9427F7E3DED8E28E1BBE8C74B2DE1AC78BE757D18FFF5A2107E4790B88817B"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","180443","837D7E138A80C0106E8275571453B9BFB9243504AD6A405E6C1286DB534E6895"
|
||||||
|
"AutoLinenumberConnections\XMLFile.cs","4266","21B71FE3BF0CC7462F994EDFD70A92FD9D0E109FD6C4B1C2921FF74F2A9781EC"
|
||||||
|
"AutoLinenumberConnections\Properties\AssemblyInfo.cs","1513","2A02E1DA20CC09DDEC54ACC995FF95B41C1F76F427FBA1D3A675F29954FF3F5B"
|
||||||
|
"CheckOrthoView\ArxImports.cs","1199","0962B1F8A18BA3099F806F7C7BCDB2E534D7D3D5C76EDCF6321FC8F7DBE6B566"
|
||||||
|
"CheckOrthoView\CheckOrthoView.cs","15817","DF2EFE5C9C2283610C228D278AB03ED6A7BC55A114A2AEEC21FF30141DA5FB0A"
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","4311","3CC579EC4060DE558C73F752917F094D761FA5DF4A208D5E4A0D757BB6E628AC"
|
||||||
|
"CheckOrthoView\Commands.cs","14992","70CCFDF61E2D46FD062C649E75900DA592D524AE116DF4EE7F81CF675B7ECDEF"
|
||||||
|
"CheckOrthoView\Properties\AssemblyInfo.cs","1491","5A1FB57CBD150869B0DFE6D41F3681A39FA3681F16F6354A4C351BB0D1D594A5"
|
||||||
|
"EnablerLoader\EnablerLoader.cs","3170","01649BACBAD733D6A655EAE87DC7B3781F62B8B8079409C5AD56A010A657F248"
|
||||||
|
"EnablerLoader\EnablerLoader.csproj","3115","99A5FC20BD13E491A50361CF6F89BD1593DDDBAC81C90F582EC42EE797915F3A"
|
||||||
|
"EnablerLoader\Properties\AssemblyInfo.cs","1489","8B646438A0D870826168DC48F480B54D519DF9D3EA3E5B9152E3D42BEFCE9E71"
|
||||||
|
"ExtentsIntersect\Commands.cs","7245","29EDC0C1FC1DDA546EC1B9E5A1D7E044F413C5628A447EDF80347BBD4CE9FE1A"
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","3300","6B0B3241EE38C0019FFB61976125BB606A9E43A090366875E4CF006D0528D84D"
|
||||||
|
"ExtentsIntersect\Properties\AssemblyInfo.cs","1495","445B83D172EBA8BF83E465E42E948C266B45C51549D262BA967065C59D068C57"
|
||||||
|
"Files\.gitkeep","0","E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
|
||||||
|
"FilesRelease\AnnotateLineNumbers.dll","126976","799BC277ED98BD870F01824180B5A945B24F016DFD9956A8CCC630AFE80FDFA4"
|
||||||
|
"FilesRelease\AutoAnnotateView.dll","40960","E625DD3F01DC1B9C578D87FA03C6A5E10607601032CA78B22B8488C02E3D7B77"
|
||||||
|
"FilesRelease\AutoElevation.dll","28160","3980E98D98D507A46212C8E711E11E8569DEB550B76947948BAF85BFB0A44311"
|
||||||
|
"FilesRelease\AutoLinenumberConnections.dll","41472","0F6B2A759F2A63B9152B480B6968BDA20F42AD1D922F67CA6E6BFD31A0715F35"
|
||||||
|
"FilesRelease\CheckOrthoView.dll","14848","89DB5E537C2BAEC292CDD8A0A43819119850119D54958E8CC3C43E2136AB24A0"
|
||||||
|
"FilesRelease\EnablerLoader.dll","6144","745D625C27F92842F2EFF3C515DB48BB9FC0FE59B6E4559ACD696BCC93FF4C51"
|
||||||
|
"FilesRelease\ExtentsIntersect.dll","6656","59D2776E083D4BE2FBFBE4F43009EAA9CE0E81A1752815B45C510F80654169D9"
|
||||||
|
"FilesRelease\GetComponentGeometry.dll","10240","9EA8C48FEC4D36D32CC6AC88B78C434662C16D4484F86EFAA46ECC309E9F9142"
|
||||||
|
"FilesRelease\GetComponentGeometry.xml","1239","70169C3A3AAAFE5A2282E01D5B9B7C99F2F4FF9B7514553434302674ABE46C98"
|
||||||
|
"FilesRelease\GetLinenumberAnnotationText.dll","23040","047E721DBE380061D9ABDD92BC5475440E3B7ADB2BD0F544D538BA24B121D30E"
|
||||||
|
"FilesRelease\GetPlantScriptFolderPath.dll","4608","5080A167A1DAF6C19BE08F6CAB678D490736B5E07E121A918A2915F0D9D8BF65"
|
||||||
|
"FilesRelease\GetScriptParameters.dll","6656","7FF7B0D26BE8D89FF4A5A4FA1C6EC17BDA1506BCCB78AFE0E650137CD7BA5E87"
|
||||||
|
"FilesRelease\InsertElevation.dll","24576","9C1690F2D1096603568A979EED162E5C93095634A8205916F7E989FDBE263411"
|
||||||
|
"FilesRelease\LoadedAssemblies.dll","4608","277EB83C587A984DC2F558B8A7C86AA98E195A77AFA6FADD7DB83F2B801C0E4E"
|
||||||
|
"FilesRelease\OrthoAutoAnnotate.dll","104448","70019D38BFEBA60978DEB18C10E4419A2308DEC71D73EB91F1F70CA59ED7503A"
|
||||||
|
"FilesRelease\OrthoLoader.dll","19968","DB56886F2B217487F3EB97A22B6300F8FD4EDAF65DDFC2055E539073ED99D96B"
|
||||||
|
"FilesRelease\P3DCopyMissingObjectsToOrthoDrawing.dll","14336","6C879AFC7F35EC25E5E2FFF9FF0EE6EFEB155670DBFD5D0CDE9A0F629C5727B2"
|
||||||
|
"FilesRelease\P3DNewMa.dll","115712","C15E9626ABA24FB22DF4ABC849970B92F0B79552A77FB2E796CC3EEE87C5F0A6"
|
||||||
|
"FilesRelease\P3DSetLayerForViewport.dll","4608","A28E58FDE4EBAA26450CA646C5A85F98C1A04AA42C0BFC5413D718243ACBF42B"
|
||||||
|
"FilesRelease\PHPAnnotations.dll","69120","816A693F1B775C5506043DD0461055F248D3897E96AC8285DAE29C5B71FFCA73"
|
||||||
|
"FilesRelease\Settings.xml","105735","C1D4D6D38C691826390755C68E2FA2ED9A46B48CC547FBB02186796D96021FFC"
|
||||||
|
"FilesRelease\SwapAttributesMenuItem.dll","11264","674C865E34F9C877561E03E2077F7F2C6852C3C8B6A0503ACAA7619F3E80A460"
|
||||||
|
"FilesRelease\Template.dwg","149935","22CAAD35CE9C55891CF91042ED9B2C23BA4D5A0745AA40D69F41C1F609DAADB3"
|
||||||
|
"FilesRelease\UpdateOrthoDrawings.dll","45568","69FD3ED5996C8DABF111A1FC69F99DBA7C401C5FF2A74C7F855E6912AA03B84F"
|
||||||
|
"FilesRelease\UpdateOrthoViewBlocks.dll","15360","5022D4D66D79E7E7D82F9FCB647DF8E1FE658A4694EB7794E363D5EA5517F5A9"
|
||||||
|
"FilesRelease\Справка по работе с палитрой.docx","850952","870F2181A2BA417FB4EEE92D1A3D2CE560EDBA21CC579FE3F4E7CF9F4B9F2008"
|
||||||
|
"FilesRelease\Справка по работе с палитрой.pdf","742814","0A7053E3613804B819458082A7F74EDC8FAD0DC4F117AEF8389C1E2D054E6CAB"
|
||||||
|
"FilesRelease\ico\button_BJ.png","1235","414F0A23E917D41A82C697B0E9CDDDF9BFCACD1627310BD5717AEA172418AA51"
|
||||||
|
"FilesRelease\ico\button_CAC.png","1943","FA2B8877F8B41C70BA62C737C40374394D6840A53DFE2D0B0F83463C4817C138"
|
||||||
|
"FilesRelease\ico\button_PXP-AAV.png","1905","6AB171963B553B434B5AA4BFBE91993B1782606AAF9B486FA23BB27BC1F0E4AA"
|
||||||
|
"FilesRelease\ico\button_PXP-AC.png","1751","60A6BD62EF3E50BDDCD00D9C281F2399E6C9D42E0C2DAA1742273C0DC48FE9C3"
|
||||||
|
"FilesRelease\ico\button_PXP-AE.png","2001","F1DCF0E908F5AF38CCD13ABA58B824E5B186430414499C0F623C1D5EEAD8DAD7"
|
||||||
|
"FilesRelease\ico\button_PXP-ALC.png","1740","19DB2449B66B95965155E6E3BC313BD52000FE38C95B0FAD90EF07DF53EA9CC9"
|
||||||
|
"FilesRelease\ico\button_PXP-COV.png","2007","529BDD045961C244FBD0DE177B899AF9E7CE0F4506B3463C56D2704B3BF207B5"
|
||||||
|
"FilesRelease\ico\button_PXP-DJ.png","1470","127957752DC2B6573CD2FD9A2791914BA22802E07E9B7E23CD3AE1FFF9E4FFC4"
|
||||||
|
"FilesRelease\ico\button_PXP-ELN.png","1927","DF32E6A465D5C196A17F3F96473315590DF2D71995F63D2D241D7599B62C99BB"
|
||||||
|
"FilesRelease\ico\button_PXP-ESN.png","1636","0F089184CFD428DA3620F9C0AD2DCBFC21B31ED34FA301E8D5D45923783C0CC7"
|
||||||
|
"FilesRelease\ico\button_PXP-IE.png","1885","F1C6373BFAF82E1908AF371D5F21133D27E0B84AFC706A703530855A2046FE43"
|
||||||
|
"FilesRelease\ico\button_PXP-IOD.png","1942","494E90C899A0BB5BB365B0E1452E92A68359610C5A38A37D09F520A39BDB3899"
|
||||||
|
"FilesRelease\ico\button_PXP-LN.png","2024","F3305ED6D266E29FA475D4C8A7DF38D2D2A1776A4CE379B876B6CFA278B2FE5D"
|
||||||
|
"FilesRelease\ico\button_PXP-MA.png","1907","9386249121644DCF4B9C70491F561E8B6E5BAAE87EBB2C76A84E46B10A60C8C3"
|
||||||
|
"FilesRelease\ico\button_PXP-OA.png","1999","EAA2AD7EE5C6B7F3716AF1D7690C76AE59229AE9B6BA02009F5009CD9307F4E8"
|
||||||
|
"FilesRelease\ico\button_PXP-OSI.png","1508","422D10B6EBDD76085CF9C5985391CCA060464B200D6792D604658AAE47F12CEE"
|
||||||
|
"FilesRelease\ico\button_PXP-RA.png","1826","1DB3F39C6CCA4EABE79D81DE6DCF9900649CDC9064F2EBF5E45F9AD849B8317F"
|
||||||
|
"FilesRelease\ico\button_PXP-RMP.png","1759","156026EC6DEB7BDBE720047409E9A25615D650D8634C2F0BAF49A71E27135258"
|
||||||
|
"FilesRelease\ico\button_PXP-ULN.png","1928","B37EBB460691EAA7BC3A91DF05C27FE7CC1F0E9F9D69BDA7703956EAA7AA785C"
|
||||||
|
"FilesRelease\ico\button_PXP-UOB.png","1569","3BC16B9923CCD34CF10F403CD65732B217E255E89539174841E7F30D9DFD2DCD"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.cs","18173","A86E56F225F704386ACB3E13AEB16B646EB29202FBFEB5A25D23ED17B9E658B8"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","4919","77207EFAE162733A1ED1CF2592719D62E145547FCB0E000EAAC8A40834D611FF"
|
||||||
|
"GetComponentGeometry\Properties\AssemblyInfo.cs","1503","99A54031E3977882A24ECFBFD5D993853F74119FDE6E897F4D20A1D9B47DC7F4"
|
||||||
|
"GetLinenumberAnnotationText\F2_Xml.cs","5429","C33DE1D612E7BC59A9D6B025CCA8182C08E125D8F75499457D904A75CC9E56DA"
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","4412","0FECA68B7453D60838C28DADF27B94DAF5B4C691085C41268B5144629C0F1F00"
|
||||||
|
"GetLinenumberAnnotationText\Index_Xml.cs","2156","B5F7E79E3E636BA52D7BB77E56FD5C72E9DE249836311A29D649C811078000CF"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","41350","B440F0FADEC59F2FDD43FCBDAABC5D629508BC56466EEA273967033B4190F76C"
|
||||||
|
"GetLinenumberAnnotationText\Processing_Xml.cs","5031","06FD4D781F09A299046489335272948E2307D0DAD2751950B4D80229A111379C"
|
||||||
|
"GetLinenumberAnnotationText\Properties\AssemblyInfo.cs","2124","FDF01977657A695602DB09679D8E38D4F26DFFE5602AF2092DCF8B519F4CC700"
|
||||||
|
"GetLinenumberAnnotationText\Properties\Resources.Designer.cs","3465","273713640025B94734F36313273823890B9FBA6303259EE53EF8A235D9491054"
|
||||||
|
"GetLinenumberAnnotationText\Properties\Resources.resx","5817","4363CD7D5B8671C72442CE1A1BFC10D64EBD24B2D718B54BD4FCD025E4967298"
|
||||||
|
"GetPlantScriptFolderPath\Commands.cs","1072","5A24605C7EEC3F14EDAC7310BC414B6DCB6F1E8CB4CD7F9DF8BB091FDDDCFC92"
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj","3011","96877CED79F6BE7A1B3BF776AEBBAAE237C6A09580A371509C2D76BB3BCB02E1"
|
||||||
|
"GetPlantScriptFolderPath\Properties\AssemblyInfo.cs","1511","0399DF6ED28EED87D3CCA6C980B84249595F2C2CDDB3341D507674A82BD62677"
|
||||||
|
"GetScriptParameters\GetScriptParameters.cs","4074","899B6DDECC1461D0AFEB4A5D15B91EE72240358FB8D27EF362DB4D4419C10A86"
|
||||||
|
"GetScriptParameters\GetScriptParameters.csproj","2599","49401A4BD4620A1FFD736EE7BD341F3AD8A1B1460F9421A037FF77C5311E9285"
|
||||||
|
"GetScriptParameters\Properties\AssemblyInfo.cs","1501","680FF1614A7FB07B3F98CB26F9133A899AB7DF635623BD66AD71ADAC54A47FEC"
|
||||||
|
"InsertElevation\ArxImports.cs","1200","4EBFB98999589A71765D29AAF5B61078836E6060046C26B3D69FA404C5A9ACF5"
|
||||||
|
"InsertElevation\Commands.cs","73527","057A9A3123DEFE6358CE8B1D06852E048DB7A6C3D308563BEC4DEB506E210925"
|
||||||
|
"InsertElevation\InsertElevation.csproj","4496","E9D2C81E14D2349F527987BA3EC9B1F82E16796E13B51A6986DC7CDA2AD8FFBC"
|
||||||
|
"InsertElevation\XMLFile.cs","3781","FEFD5410F45CB8E5D888A739F9D7B91126C4041FF12C7BC000D4A6B89781ED23"
|
||||||
|
"InsertElevation\Properties\AssemblyInfo.cs","1493","5959F8AF302F040DA55277FB3C81F6715DE1AA966B8D837FD833D7AD36F85AFA"
|
||||||
|
"lib\Excel.dll","64000","67E0A592F5AABF78E6602F3CEBDEEE9B8D668CF4F928A3E784A3685C9076172C"
|
||||||
|
"lib\ICSharpCode.SharpZipLib.dll","192512","CFC2A838569A48D16A15269BB701DE87B81B3D2BC303BB7C4C3724CC3BBA0C50"
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.cs","1983","ECC1D1925E2274731885E4B0A33553D88DF5CE26F715F53DECDC86417E07CBEA"
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.csproj","2919","6592FFEFB904C2A6390960073D6B1C5AC10A8323A7F44BF74365F6948F3BAF16"
|
||||||
|
"LoadedAssemblies\Properties\AssemblyInfo.cs","1495","20584E02ED3005AE9C767C466B042D05AA1092CA74FB317830C5A0F2292D90EA"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","543454","7A1D6C65AFC619AB5EF39CB0E65D16E4EA8615712A789709937BB8C2CC9283C9"
|
||||||
|
"OrthoAutoAnnotate\DimensionsJig.cs","29130","C1AA5D7A05F87E35AA414898A1A277678F8CDDB4F78BEDF2E286261003365119"
|
||||||
|
"OrthoAutoAnnotate\HighlightAndZoomPnPId.cs","10918","533FACB562F598B7E8DEDC636F9E91F17858C9A577573A6CC3EF1AC1750743EC"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","4996","BBC3E9A0B32BF79A53FBDAD3F0C2D4A0408EBED99C42941548F17A5EDD0BC623"
|
||||||
|
"OrthoAutoAnnotate\SulphurSupport.cs","2646","BED1B60B154BAFC5388EAC8DABA1C72309A5FDB30344C0A8FEFE02F14FF0B380"
|
||||||
|
"OrthoAutoAnnotate\XMLFile.cs","11270","CC0E527AB65B3ECBFA5D0CE8AF82A1968280F2EA0CA492B9C19EB5C3E5394072"
|
||||||
|
"OrthoAutoAnnotate\Properties\AssemblyInfo.cs","1344","137C070DA2C2681CBEAD842E1D35BD2F355282BE1D1F4D2586B3117DB8F6460E"
|
||||||
|
"OrthoLoader\Loader.cs","6996","84503CDA2BD1A0E520E78878AB19786A65AB14193D3FF979463B481EBA42B38F"
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","3924","5E32F54CA6F6E6EF13EBF23396198F25063DAA2AFE5812DC6F57DAC8B8161E1E"
|
||||||
|
"OrthoLoader\Ribbon.cs","29366","10F305AFF461B94F1D58E01E066459EE1D11E3AECC34A4997735A498564C8F61"
|
||||||
|
"OrthoLoader\ico\button_BJ.png","1235","414F0A23E917D41A82C697B0E9CDDDF9BFCACD1627310BD5717AEA172418AA51"
|
||||||
|
"OrthoLoader\ico\button_CAC.png","1943","FA2B8877F8B41C70BA62C737C40374394D6840A53DFE2D0B0F83463C4817C138"
|
||||||
|
"OrthoLoader\ico\button_PXP-AAV.png","1905","6AB171963B553B434B5AA4BFBE91993B1782606AAF9B486FA23BB27BC1F0E4AA"
|
||||||
|
"OrthoLoader\ico\button_PXP-AC.png","1751","60A6BD62EF3E50BDDCD00D9C281F2399E6C9D42E0C2DAA1742273C0DC48FE9C3"
|
||||||
|
"OrthoLoader\ico\button_PXP-AE.png","2001","F1DCF0E908F5AF38CCD13ABA58B824E5B186430414499C0F623C1D5EEAD8DAD7"
|
||||||
|
"OrthoLoader\ico\button_PXP-ALC.png","1740","19DB2449B66B95965155E6E3BC313BD52000FE38C95B0FAD90EF07DF53EA9CC9"
|
||||||
|
"OrthoLoader\ico\button_PXP-COV.png","2007","529BDD045961C244FBD0DE177B899AF9E7CE0F4506B3463C56D2704B3BF207B5"
|
||||||
|
"OrthoLoader\ico\button_PXP-DJ.png","1470","127957752DC2B6573CD2FD9A2791914BA22802E07E9B7E23CD3AE1FFF9E4FFC4"
|
||||||
|
"OrthoLoader\ico\button_PXP-ELN.png","1927","DF32E6A465D5C196A17F3F96473315590DF2D71995F63D2D241D7599B62C99BB"
|
||||||
|
"OrthoLoader\ico\button_PXP-ESN.png","1636","0F089184CFD428DA3620F9C0AD2DCBFC21B31ED34FA301E8D5D45923783C0CC7"
|
||||||
|
"OrthoLoader\ico\button_PXP-IE.png","1885","F1C6373BFAF82E1908AF371D5F21133D27E0B84AFC706A703530855A2046FE43"
|
||||||
|
"OrthoLoader\ico\button_PXP-IOD.png","1942","494E90C899A0BB5BB365B0E1452E92A68359610C5A38A37D09F520A39BDB3899"
|
||||||
|
"OrthoLoader\ico\button_PXP-LN.png","2024","F3305ED6D266E29FA475D4C8A7DF38D2D2A1776A4CE379B876B6CFA278B2FE5D"
|
||||||
|
"OrthoLoader\ico\button_PXP-MA.png","1907","9386249121644DCF4B9C70491F561E8B6E5BAAE87EBB2C76A84E46B10A60C8C3"
|
||||||
|
"OrthoLoader\ico\button_PXP-OA.png","1999","EAA2AD7EE5C6B7F3716AF1D7690C76AE59229AE9B6BA02009F5009CD9307F4E8"
|
||||||
|
"OrthoLoader\ico\button_PXP-OSI.png","1508","422D10B6EBDD76085CF9C5985391CCA060464B200D6792D604658AAE47F12CEE"
|
||||||
|
"OrthoLoader\ico\button_PXP-RA.png","1826","1DB3F39C6CCA4EABE79D81DE6DCF9900649CDC9064F2EBF5E45F9AD849B8317F"
|
||||||
|
"OrthoLoader\ico\button_PXP-RMP.png","1759","156026EC6DEB7BDBE720047409E9A25615D650D8634C2F0BAF49A71E27135258"
|
||||||
|
"OrthoLoader\ico\button_PXP-ULN.png","1928","B37EBB460691EAA7BC3A91DF05C27FE7CC1F0E9F9D69BDA7703956EAA7AA785C"
|
||||||
|
"OrthoLoader\ico\button_PXP-UOB.png","1569","3BC16B9923CCD34CF10F403CD65732B217E255E89539174841E7F30D9DFD2DCD"
|
||||||
|
"OrthoLoader\Properties\AssemblyInfo.cs","1483","3BA048D1ADD87ECBD1EB1D60E6C737B3B81920755B77828C1084B239990B126D"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\Commands.cs","5914","A3AB868B3DD5FAE9CF374B9409431D7785E9F3E1D7EEB909FF84E47D7219A715"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\CopyObjects.cs","23350","D9D4DDEC93877CD65C008BB3C34320063DB601CF63836573042140538AA7291B"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","3895","70E636B328BBF14650C945855898543F563098F9A7FBF47EB5D57318C1B21871"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\XMLFile.cs","2097","5EEC3947B34240108C498361E625E40B32B4C8B2850184D5B558CFED2CF9400F"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\Properties\AssemblyInfo.cs","1527","2273D6F54DB31EFA129884F66621A75CA4352D71D3C73C9CAF2AC5F0AFBD0CBA"
|
||||||
|
"P3DNewMa\.refsignored","0","E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
|
||||||
|
"P3DNewMa\ARXImports.cs","1949","F0176472FBA507CFDAF9FE15BA1C05C9722930BC44E6695F074299679A517B84"
|
||||||
|
"P3DNewMa\Commands.cs","532","784ACB7240C55E667160D91563487A8877540689221D7EA7BBBE49E2C9B7A39F"
|
||||||
|
"P3DNewMa\EditorExtension.cs","515","1C0586965D6F3F43E403FBFED2F5F4910EAA1CC26ADAE31F72EFE4BF2D69FD56"
|
||||||
|
"P3DNewMa\Extensions.cs","3075","136921BBEFD42BAF87C168B993B76EB123B5270551A50A8A1A54C6671D761541"
|
||||||
|
"P3DNewMa\MewMaPalette.cs","2022","44FF61D3C142DC1D424ABBC4085093474545CE799FAD358BC85C9A1D32F95918"
|
||||||
|
"P3DNewMa\NewMaControl.cs","374174","2FD74A326834A23778BB528B148B4352015475F9955F137F347D948E49BBAAE8"
|
||||||
|
"P3DNewMa\NewMaControl.Designer.cs","22411","B159C05CC0BC79DF83665BE9E47EECCE10EAD1CD0A83DF3FD44EDCAE392FF94F"
|
||||||
|
"P3DNewMa\NewMaControl.resx","21835","CF838E8CB3A2F89B76EA20D62545ACECE9ABBD47E48454F71B7D544AD6110C85"
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","5472","A2A6F225A7B376DE556E1561FA03BC8AED04ECC4A39FE107040EAD9742B6475B"
|
||||||
|
"P3DNewMa\XMLFile.cs","3172","0F51989F6C1D522CBB621B71A72DC1AEA95CC6CF8567C570DE8C38D7B5E7F0ED"
|
||||||
|
"P3DNewMa\Properties\AssemblyInfo.cs","1474","2F82DF350FD4AEB3CCDCF04F34D838374A2820F1F9C6A726450C33FDF8007AB7"
|
||||||
|
"P3DSetLayerForViewport\Commands.cs","1096","A0E692C03F9CA1B7517146EE7E94E34A98E69B54FE28BD45BF554083583810A5"
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","3412","330DE9D5089E7CEB960172815C06A902ACDD78222FDD7454533187B8554E23A9"
|
||||||
|
"P3DSetLayerForViewport\Properties\AssemblyInfo.cs","1507","E31F7720110696842ECF302DA5EFE0A9AF070FD4A43FCCD6BACFF582351C9E2A"
|
||||||
|
"PHPAnnotations\PHPAnnotations.cs","95089","2A897CC8D0DED5820AE442409F8CCCDC019B46EF2466A6B45F57C3E7A927D6ED"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","4665","ED276F12610076E2C372112E94050FA1DEDE62F57C072834209028AF6D6DEFF1"
|
||||||
|
"PHPAnnotations\PHPAnnotationsForm.cs","36321","40613C0A98E67EC441643848BD54FBFC1D4E2B157E6C2C1FF8DD1B30E9D4C926"
|
||||||
|
"PHPAnnotations\PHPAnnotationsForm.Designer.cs","31207","164894CD2A2A138583488931149BA69A0D72AE34BED59FD375DAD723978D8FFF"
|
||||||
|
"PHPAnnotations\PHPAnnotationsForm.resx","5817","4363CD7D5B8671C72442CE1A1BFC10D64EBD24B2D718B54BD4FCD025E4967298"
|
||||||
|
"PHPAnnotations\PHPBlockJig.cs","112795","2E960188918EE74BD1D45E15D3C42430A63BB026CAB6FFA72A90180CC4077DA3"
|
||||||
|
"PHPAnnotations\Properties\AssemblyInfo.cs","1491","32D45C44A55881BED443865DE3B30C66AF6485B42ACB7728450CA3ED377A35FD"
|
||||||
|
"SwapAttributesMenuItem\Commands.cs","15246","67F465BE64805F8312E8A993464CCB575CE7090FF3AE194F59F78EB431C4C1F6"
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","3459","3ECE76B8449AE9C26AE33001390ABFAF270AD899F69E17B7E717252A803B84C3"
|
||||||
|
"SwapAttributesMenuItem\Properties\AssemblyInfo.cs","1507","5124A7D8538EF1AF115AC79430C0B52E2A0C029E5CAF9A3228202148A78D9DF2"
|
||||||
|
"UpdateOrthoDrawings\Back.jpg","852","E586854785E04F60E0C38205EB0C9C32737F1AF1D3C4CAE9BE6053FBC27011C8"
|
||||||
|
"UpdateOrthoDrawings\Bottom.jpg","872","3703170ABBA78E89B3B1E5D80A2DB7A54B855554672FB74EE38E9D81850CC76A"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","67491","39F19BD5C8A41A3A61E305919EFBEF2C76B895649D4E24B426149F4AEAD18DF4"
|
||||||
|
"UpdateOrthoDrawings\CSV.cs","2144","EB8624430DB53F9151DFAC99895ECF30D3550D1EE2ACC4428E509BDF6851303D"
|
||||||
|
"UpdateOrthoDrawings\Drawing.jpg","890","8050397CC041E17984D9989F5DF836A2F14D67FCE5907265F4FCB526EBDECE4D"
|
||||||
|
"UpdateOrthoDrawings\Folder.jpg","852","F8413955CEA5F7D0EE562490BA289D6FC36FB645977A2DA719E0E0D010639C39"
|
||||||
|
"UpdateOrthoDrawings\Front.jpg","849","A8EB3DBB3802A6F7F769E7670F3B7647E83190A4237BF1301A88CF579E85FDBF"
|
||||||
|
"UpdateOrthoDrawings\Left.jpg","872","53E677ACA5E020276A9E04FD17B5EF467CF80E334ACA3DBA7DECBC900713FD93"
|
||||||
|
"UpdateOrthoDrawings\OperationProgress.cs","2253","56253C2521E2E025DACC59264B7F6D10E0AC0CDADDB8C26F7E96042FD388322F"
|
||||||
|
"UpdateOrthoDrawings\OperationProgress.designer.cs","4969","F5759895842BF2D1D6C5E2B37ECD0B6BEBD914D65D7DD1AB82C08AEF73719056"
|
||||||
|
"UpdateOrthoDrawings\OperationProgress.resx","5817","4363CD7D5B8671C72442CE1A1BFC10D64EBD24B2D718B54BD4FCD025E4967298"
|
||||||
|
"UpdateOrthoDrawings\Ortho.jpg","909","9BC9BB2644C41DA07A6EA26A0E3AA808A9B362CADAFC11AD25D4BE7B22A2598E"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_DWG.ico","1150","0799E5EC07964EBA52692F37FFB1C9DDFE19AFE6A16305246B7703E14CA3F009"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIEBAC.ico","1150","009659E2831F480E97981A0FAA3B52A3E9BA5D46005F324F4EECE95F66CD462A"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIEBOT.ico","1150","9263E25E56BAB1EEAAC23E239D476A5D5C21D4DB7932AF0123FBFB9F857168E9"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIEFRO.ico","1150","83AFB03C33F2E7789451BEDF45A2C42A5179B039AAEF43D78783F001ACFB43AE"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIELEF.ico","1150","BAAD02C63DA2563B7AD34E4FF1BD8AA5C3B35D0C5703C5F7DB7ECF9490970C1F"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIERIG.ico","1150","FE4914F3ABEFBE2749A446438FAB8C50AAECDE98767DBFA917271917559FBB40"
|
||||||
|
"UpdateOrthoDrawings\RCDATA_16_VIETOP.ico","1150","625CCD960C3FD80A1ADC61B47F589652A359E9446FC1722B583ACDE2F60DD544"
|
||||||
|
"UpdateOrthoDrawings\Right.jpg","866","F064FC75EA6D46D9B3D24FADC3253AC1ECF2AB595BC03866BD411C116D19D227"
|
||||||
|
"UpdateOrthoDrawings\SelectAdditionalOperations.cs","1563","F0C1B064779AA5AC7061D64C39A80D5BDBF7E52BCAEF458FA012141535F607C7"
|
||||||
|
"UpdateOrthoDrawings\SelectAdditionalOperations.designer.cs","8525","884C92DFB0E9CAC5EE5CED340AF908E2BBF9D8B42CA4D7AAE835DCC754FD5F40"
|
||||||
|
"UpdateOrthoDrawings\SelectAdditionalOperations.resx","12505","CF3A92172710A6DF9381EE336C1023AD17B72A33A2D124790F64E95059359409"
|
||||||
|
"UpdateOrthoDrawings\SelectDrawings.cs","4128","0AE10FC1752C25415B3213C394CACA464DF5F0C6C3FEE8DDA54DB43B411D965F"
|
||||||
|
"UpdateOrthoDrawings\SelectDrawings.designer.cs","7414","CDBDA90059F071995CE8EB0F831EFFA50EFF87A23C366C223494EDAEF7B49AAF"
|
||||||
|
"UpdateOrthoDrawings\SelectDrawings.resx","12505","58D46EA851C7363136B7D690DA11307C0319D1ABEA44659D584B27BAC0533D31"
|
||||||
|
"UpdateOrthoDrawings\Up.jpg","866","ED7621550E663306DEDEFE54B09CF3C62D895A3D0FFC8A527A16660BD7254750"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","7597","5F54220442CEE919A35022B8152C90C502F0FF9998BB9AD0A8788422989F5B47"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnP3dOrthoDrawingsUI.dll","362968","A8A88996DD1F2FD89520785C7006923B36B005A3F38D845F3AA6DE85E0CB6C63"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnP3dOrthoProjectPart.dll","39384","CD908D9332FF3AEDB5694DEF4331F217AE653C19A122B87C4D121ECFD3D8E157"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnP3dOrthoUtilMgd.dll","72152","42C4103445EB5757DD21CBEF25255348F207F4F4C54FF7DD14F0C7F763CD95BE"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dAnno.dll","280536","D662C2B24CE1CDF444A0C34926D29DEB5193D587D97DB3B9EB68E6E762D95B03"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dDbx.dll","244696","375D8CCBDCE6CBB72B28AC23DFAE9201CC014F8D98ACEDF0A4AD512F038DB028"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dDef.dll","98264","AD0A27CF6B3EDD7BFECC78FE622B180D397D74E5A359AB4A9630130CBF2B42B8"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dGen.dll","127960","FC749B8E17760D9BDEFB65A54E263B8D1352C1892073C4DD60E69CC8302F5ABB"
|
||||||
|
"UpdateOrthoDrawings\Libraries\PnPDwg2dUtil.dll","143832","43B1317D4F23BCC2D41C05695C04044A283E2B967E998E4B5644FD2B6FDBC937"
|
||||||
|
"UpdateOrthoDrawings\Properties\AssemblyInfo.cs","1501","BC650E3D163407D7215CEA893BB8520B665BBCC3E321A32606357E84C45B8755"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","38266","D517CB29E8D5776FFBCFA5996FF23B4561F7EFDA1770CEF7598EF2111A81EAC1"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","5221","CA2A88302437BE2FA8FFF9B96CD961DBC44A70715EC6F79FE9654F749FD72E6E"
|
||||||
|
"UpdateOrthoViewBlocks\XMLFile.cs","4244","DCF9353EB9686C4D31CA5944F1CEA2EB6DF9B1C43EDF2946EAA10195662492A6"
|
||||||
|
"UpdateOrthoViewBlocks\Properties\AssemblyInfo.cs","1505","66AE8EFD9E1D614FBDE58D2C0173F1775F1CACA16EDE5DE0A9459A72F1371A6C"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\drawing.png","298","7A6AC1F97278F8E79D9DAE52DB7D9833C516F6E5FCF554508A01323736542154"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\folder.png","210","87E56D1EDDEA45CE0588CF848406F981BAAE7713717B9FFAAB40881546836863"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Class1.cs","8299","C4AA842DA6991DE2AD4D0A3573E844D21291A1E12570818859455F70DD7CB7EF"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","67834","969B85134832574C61A5026DECFB27D891FBC5CB4E7EB711B9309FFE0A1D8E6B"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","63203","F0D9865776CD53C604FE9E36FE6578A6196D5FC1C8FCBB0E6F2456136BB7F258"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","64114","96B19B37501ACCC8E0B6A93A3C7492C5971C8074F1A47EA74EC6052CA7EB9F1C"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","53835","73CF65197CD51A57B52392EB817C7B9E5B08180138218786FD5D191BB2312664"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","19693","E7E0AD9331F74063D499F6B89619AF790DCE8774BD16BCCCC7F7B1CA8554AF52"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","63203","F0D9865776CD53C604FE9E36FE6578A6196D5FC1C8FCBB0E6F2456136BB7F258"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","64114","96B19B37501ACCC8E0B6A93A3C7492C5971C8074F1A47EA74EC6052CA7EB9F1C"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberList - копия.cs","41978","827C2FD40E56A86E25FAB78320EE30336F87D4178388C04055638AA68BFE831D"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberMarker - копия (2).cs","13778","73E123A42D2C4C72DE73F5632F8BEF4328212D5ABC6A819AD91AA4AD57312F72"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\LineNumberMarker - копия.cs","22961","F3FA711BCBE61D3EBAF2E1EC5E01AA3C205FFA63930F4B17DB8259B978ED7A75"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText.sln","1184","EE337ED7C38FA3FB31C2ACCB8933A2330FD50845A8A910817495250F3B9A9A2A"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\Источник.txt","634","5F3F9FFAAAA4FE9534F5A1A16C7C42132D7CD6D335DA38C33F0206525388B607"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","2950","DCFEC303EE6E7D30FC8D72CCC7CE72CF8DB1805DDBDFF2124DCEDC76B08C60B9"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","21786","48F7356657E95073A4E95CE96A24537B3C06EC06AD769A44913499CE4B641BA7"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\Properties\AssemblyInfo.cs","1484","2B39009C8957250249193361237ABD33ACCED1521072F9B620DBDBCDDA3C3003"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText.sln","1184","EE337ED7C38FA3FB31C2ACCB8933A2330FD50845A8A910817495250F3B9A9A2A"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\Источник.txt","634","5F3F9FFAAAA4FE9534F5A1A16C7C42132D7CD6D335DA38C33F0206525388B607"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","2950","DCFEC303EE6E7D30FC8D72CCC7CE72CF8DB1805DDBDFF2124DCEDC76B08C60B9"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","21164","A1CABEF6F902127B2754B40688113851496835A4044F186BE63037D371AF8EB0"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\Properties\AssemblyInfo.cs","1484","2B39009C8957250249193361237ABD33ACCED1521072F9B620DBDBCDDA3C3003"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\Описание.txt","118","31CD2F60B359A436BF3547BF861E1145813351944D38AF23953A55EFC29AD604"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation.sln","1148","620BE31B6E7111F38DC85469C1023F06D575B35CC4C474E043A98C28A0A038A1"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\Источник.txt","581","086DF20E3A352FBCC8FEDE6A555AF5B1DD91278E60062DFC64A4F218DC6C793E"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\ArxImports.cs","1200","4EBFB98999589A71765D29AAF5B61078836E6060046C26B3D69FA404C5A9ACF5"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","73682","89801F75BA5A90ACC385BBFF006B39A9AEAB74EE3CFBC0A1383D7FD140578E5F"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","4435","352C66A2482BF7683A7D09E0602A5DE7033F1150597DF22875629AF1299E1E8C"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\XMLFile.cs","3781","FEFD5410F45CB8E5D888A739F9D7B91126C4041FF12C7BC000D4A6B89781ED23"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Properties\AssemblyInfo.cs","1460","3955628FF4B5AFE33562777E0274A89EBAFF130713129E637EA899A5E8E68D8B"
|
||||||
|
"_archive\2019_PHPAnnotations\2019_PHPAnnotations\Class1.cs","3133","CEC5435EF13ABD59E194C9CD81C3A2A9D58CF97B74D65E3FCD918690D1417E44"
|
||||||
|
"_archive\2019_PHPAnnotations\2019_PHPAnnotations\Class2.cs","159","8DF997EC4D1589E64E447EB82729040B46C9B45D239BEFB16BFDC7DD71EFD1DB"
|
||||||
|
"_archive\2019_UpdateOrthoDrawings\2019_UpdateOrthoDrawings\XMLFile.cs","4732","8DA91EDC6DFB4C16BF1A238FBF7887E9B6210849BA128935467352435AA8A1FC"
|
||||||
|
"_archive\GetLinenumberAnnotationText\test\ATest_p-clat.zip","15181842","43D7159D0C20B6C1BA82FB68DB186D1A33D824CF9C01D9991E17D17D0F2C0AD1"
|
||||||
|
"_archive\GetLinenumberAnnotationText\test\Тесты на аннотации.docx","173939","DE7811BDE239CEBD2B24E9D47CCD5214FC92A7E40109E321E78693B9029D49AE"
|
||||||
|
"_archive\GetLinenumberAnnotationText\test\Тесты на ошибки.docx","213774","D8212979B1D23F6012040C580E2916063FB995780824EBFBAF8F70DFB9A486A5"
|
||||||
|
@@ -0,0 +1,400 @@
|
|||||||
|
"Project","Reference","HintPath","Private","Category","Specific2019","Risk2026"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","Autodesk.AutoCAD.Interop, Version=17.0.54.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b, processorArchitecture=MSIL","C:\Program Files\Autodesk\AutoCAD 2019\Autodesk.AutoCAD.Interop.dll","","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","Autodesk.AutoCAD.Interop.Common, Version=17.0.54.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b, processorArchitecture=MSIL","C:\Program Files\Autodesk\AutoCAD 2019\Autodesk.AutoCAD.Interop.Common.dll","","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","EnablerLoader","..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","GetLinenumberAnnotationText","..\Files\GetLinenumberAnnotationText.dll","False","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","P3DSetLayerForViewport","..\Files\P3DSetLayerForViewport.dll","False","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System.Drawing","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","","","","framework/other","False",""
|
||||||
|
"AnnotateLineNumbers\AnnotateLineNumbers.csproj","","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","CheckOrthoView","..\Files\CheckOrthoView.dll","False","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","EnablerLoader","..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","ExtentsIntersect","..\Files\ExtentsIntersect.dll","False","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","P3DSetLayerForViewport","..\Files\P3DSetLayerForViewport.dll","False","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System.Drawing","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","","","","framework/other","False",""
|
||||||
|
"AutoAnnotateView\AutoAnnotateView.csproj","","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","CheckOrthoView","..\Files\CheckOrthoView.dll","False","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","EnablerLoader","..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","GetComponentGeometry","..\Files\GetComponentGeometry.dll","False","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","P3DSetLayerForViewport","..\Files\P3DSetLayerForViewport.dll","False","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","PnP3dObjectsMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnP3dObjectsMgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","PnP3dPartsRepository","C:\Program Files\Autodesk\AutoCAD 2019\PnP3dPartsRepository.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","PnPDwg2dUtil","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPDwg2dUtil.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoElevation\AutoElevation.csproj","System","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"AutoElevation\AutoElevation.csproj","","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","CheckOrthoView","..\Files\CheckOrthoView.dll","False","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","EnablerLoader","..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","ExtentsIntersect","..\Files\ExtentsIntersect.dll","False","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","GetLinenumberAnnotationText","..\Files\GetLinenumberAnnotationText.dll","False","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","P3DSetLayerForViewport","..\Files\P3DSetLayerForViewport.dll","False","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","PnP3dObjectsMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnP3dObjectsMgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","System","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"AutoLinenumberConnections\AutoLinenumberConnections.csproj","","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","EnablerLoader","..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","System","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"CheckOrthoView\CheckOrthoView.csproj","","","","framework/other","False",""
|
||||||
|
"EnablerLoader\EnablerLoader.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"EnablerLoader\EnablerLoader.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"EnablerLoader\EnablerLoader.csproj","LoadedAssemblies","..\Files\LoadedAssemblies.dll","False","framework/other","False",""
|
||||||
|
"EnablerLoader\EnablerLoader.csproj","System","","","framework/other","False",""
|
||||||
|
"EnablerLoader\EnablerLoader.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"EnablerLoader\EnablerLoader.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"EnablerLoader\EnablerLoader.csproj","","","","framework/other","False",""
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","System","","","framework/other","False",""
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"ExtentsIntersect\ExtentsIntersect.csproj","","","","framework/other","False",""
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","Autodesk.AutoCAD.Interop, Version=17.0.54.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b, processorArchitecture=MSIL","C:\Program Files\Autodesk\AutoCAD 2019\Autodesk.AutoCAD.Interop.dll","","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","Autodesk.AutoCAD.Interop.Common, Version=17.0.54.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b, processorArchitecture=MSIL","C:\Program Files\Autodesk\AutoCAD 2019\Autodesk.AutoCAD.Interop.Common.dll","","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","GetPlantScriptFolderPath","..\Files\GetPlantScriptFolderPath.dll","False","framework/other","False",""
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","GetScriptParameters","..\Files\GetScriptParameters.dll","False","framework/other","False",""
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","PnP3dObjectsMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnP3dObjectsMgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","PnP3dPartsRepository","C:\Program Files\Autodesk\AutoCAD 2019\PnP3dPartsRepository.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","System","","","framework/other","False",""
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"GetComponentGeometry\GetComponentGeometry.csproj","","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Drawing","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Net.Http","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","","","","framework/other","False",""
|
||||||
|
"GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","","","","framework/other","False",""
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj","System","","","framework/other","False",""
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj","System.XML","","","framework/other","False",""
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"GetPlantScriptFolderPath\GetPlantScriptFolderPath.csproj","","","","framework/other","False",""
|
||||||
|
"GetScriptParameters\GetScriptParameters.csproj","System","","","framework/other","False",""
|
||||||
|
"GetScriptParameters\GetScriptParameters.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"GetScriptParameters\GetScriptParameters.csproj","","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"InsertElevation\InsertElevation.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"InsertElevation\InsertElevation.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"InsertElevation\InsertElevation.csproj","EnablerLoader","..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"InsertElevation\InsertElevation.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"InsertElevation\InsertElevation.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"InsertElevation\InsertElevation.csproj","System","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"InsertElevation\InsertElevation.csproj","","","","framework/other","False",""
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.csproj","System","","","framework/other","False",""
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"LoadedAssemblies\LoadedAssemblies.csproj","","","","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","","","","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","CheckOrthoView","..\Files\CheckOrthoView.dll","False","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","EnablerLoader","..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","GetComponentGeometry","..\Files\GetComponentGeometry.dll","False","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","P3DSetLayerForViewport","..\Files\P3DSetLayerForViewport.dll","False","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","PnP3dObjectsMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnP3dObjectsMgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","PnP3dPartsRepository","C:\Program Files\Autodesk\AutoCAD 2019\PnP3dPartsRepository.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","PnPDwg2dUtil","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPDwg2dUtil.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","System","","","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","System.XML","","","framework/other","False",""
|
||||||
|
"OrthoAutoAnnotate\OrthoAutoAnnotate.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","AdWindows","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\AdWindows.dll","False","framework/other","True","hard-coded 2019 path"
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","PresentationCore","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","PresentationFramework","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","System","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","System.XML","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","WindowsBase","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","","","","framework/other","False",""
|
||||||
|
"OrthoLoader\OrthoLoader.csproj","","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","System","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\P3DCopyMissingObjectsToOrthoDrawing.csproj","","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","acdbmgd, Version=23.0.0.0, Culture=neutral, processorArchitecture=AMD64","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","EnablerLoader, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL","..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","GetLinenumberAnnotationText, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL","..\Files\GetLinenumberAnnotationText.dll","False","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","P3DSetLayerForViewport, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL","..\Files\P3DSetLayerForViewport.dll","False","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","PresentationCore","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","System","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","System.Drawing","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","","","","framework/other","False",""
|
||||||
|
"P3DNewMa\P3DNewMa.csproj","","","","framework/other","False",""
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","System","","","framework/other","False",""
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"P3DSetLayerForViewport\P3DSetLayerForViewport.csproj","","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","GetLinenumberAnnotationText","..\Files\GetLinenumberAnnotationText.dll","False","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","PnPCommonDbxMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPCommonDbxMgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","System","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","System.Drawing","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","","","","framework/other","False",""
|
||||||
|
"PHPAnnotations\PHPAnnotations.csproj","","","","framework/other","False",""
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","System","","","framework/other","False",""
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"SwapAttributesMenuItem\SwapAttributesMenuItem.csproj","","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","AutoAnnotateView","..\Files\AutoAnnotateView.dll","False","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","AutoLinenumberConnections","..\Files\AutoLinenumberConnections.dll","False","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","OrthoAutoAnnotate","..\Files\OrthoAutoAnnotate.dll","False","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","P3DSetLayerForViewport","..\Files\P3DSetLayerForViewport.dll","False","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnP3dOrthoDrawingsUI","Libraries\PnP3dOrthoDrawingsUI.dll","False","Autodesk API","False","verify 2026 API/reference"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnP3dOrthoProjectPart","Libraries\PnP3dOrthoProjectPart.dll","False","Autodesk API","False","verify 2026 API/reference"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnP3dOrthoUtilMgd","Libraries\PnP3dOrthoUtilMgd.dll","False","Autodesk API","False","verify 2026 API/reference"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnPDwg2dAnno","Libraries\PnPDwg2dAnno.dll","False","Autodesk API","False","verify 2026 API/reference"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnPDwg2dDbx","Libraries\PnPDwg2dDbx.dll","False","Autodesk API","False","verify 2026 API/reference"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnPDwg2dDef","Libraries\PnPDwg2dDef.dll","False","Autodesk API","False","verify 2026 API/reference"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnPDwg2dGen","Libraries\PnPDwg2dGen.dll","False","Autodesk API","False","verify 2026 API/reference"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnPDwg2dUtil","Libraries\PnPDwg2dUtil.dll","False","Autodesk API","False","verify 2026 API/reference"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","PresentationCore","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System.Drawing","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","UpdateOrthoViewBlocks","..\Files\UpdateOrthoViewBlocks.dll","False","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","WindowsBase","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","","","","framework/other","False",""
|
||||||
|
"UpdateOrthoDrawings\UpdateOrthoDrawings.csproj","","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","P3DCopyMissingObjectsToOrthoDrawing","..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","P3DSetLayerForViewport","..\Files\P3DSetLayerForViewport.dll","False","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","PnP3dOrthoDrawingsUI","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnP3dOrthoDrawingsUI.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","PnPDwg2dDbx","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPDwg2dDbx.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","PnPDwg2dDef","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPDwg2dDef.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","PnPDwg2dUtil","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPDwg2dUtil.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","System","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"UpdateOrthoViewBlocks\UpdateOrthoViewBlocks.csproj","","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","Excel","..\..\Files\Excel.dll","False","external","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","Excel","..\..\Files\Excel.dll","False","external","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\GetLinenumberAnnotationText.csproj","","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","accoremgd","C:\Program Files\Autodesk\AutoCAD 2019\accoremgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","acdbmgd","C:\Program Files\Autodesk\AutoCAD 2019\acdbmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","acmgd","C:\Program Files\Autodesk\AutoCAD 2019\acmgd.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","EnablerLoader, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL","..\..\..\Files\EnablerLoader.dll","False","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","P3DCopyMissingObjectsToOrthoDrawing, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL","..\..\..\Files\P3DCopyMissingObjectsToOrthoDrawing.dll","False","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","PnPDataLinks","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataLinks.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","PnPDataObjects","C:\Program Files\Autodesk\AutoCAD 2019\PnPDataObjects.dll","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","PnPProjectManagerMgd","C:\Program Files\Autodesk\AutoCAD 2019\PLNT3D\PnPProjectManagerMgd.DLL","False","Autodesk API","True","hard-coded 2019 path"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","System","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","System.Core","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","System.DirectoryServices","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","System.Windows.Forms","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","System.Xml.Linq","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","System.Data.DataSetExtensions","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","Microsoft.CSharp","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","System.Data","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","System.Xml","","","framework/other","False",""
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\InsertElevation.csproj","","","","framework/other","False",""
|
||||||
|
@@ -0,0 +1,30 @@
|
|||||||
|
"File","Line","Element","Context","Action"
|
||||||
|
"OrthoLoader\Ribbon.cs","154","ComponentManager"," Autodesk.Windows.ComponentManager.ItemInitialized += new System.EventHandler<Autodesk.Windows.RibbonItemEventArgs>(ComponentManager_ItemInitialized);","subscribe/create"
|
||||||
|
"OrthoLoader\Ribbon.cs","159","ComponentManager"," public static void ComponentManager_ItemInitialized(object sender, Autodesk.Windows.RibbonItemEventArgs e)","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","162","ComponentManager"," if (Autodesk.Windows.ComponentManager.Ribbon != null)","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","170","CurrentProjectOpenedEvent"," PlantApplication.CurrentProjectOpenedEvent += new PlantApplication.CurrentProjectOpenedEventHandler(OpenProjectHandler);","subscribe/create"
|
||||||
|
"OrthoLoader\Ribbon.cs","172","ComponentManager"," Autodesk.Windows.ComponentManager.ItemInitialized -= new EventHandler<RibbonItemEventArgs>(ComponentManager_ItemInitialized);","unsubscribe"
|
||||||
|
"OrthoLoader\Ribbon.cs","196","RibbonTab"," RibbonTab tab = ComponentManager.Ribbon.FindTab(tab_id);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","202","ComponentManager"," ComponentManager.Ribbon.Tabs.Add(tab);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","208","RibbonPanel"," RibbonPanel panel = null;","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","209","RibbonPanel"," foreach (RibbonPanel panel_tmp in tab.Panels)","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","234","RibbonButton"," RibbonButton button = Button_create(button_id_pack[j], button_text_pack[j], button_description_pack[j], button_icon_file_path_pack[j]);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","245","RibbonButton"," RibbonButton button = Button_create(button_id_layers[j], button_text_layers[j], button_description_layers[j], button_icon_file_path_layers[j]);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","256","RibbonButton"," RibbonButton button = Button_create(button_id_linesup[j], button_text_linesup[j], button_description_linesup[j], button_icon_file_path_linesup[j]);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","267","RibbonButton"," RibbonButton button = Button_create(button_id_pipenum[j], button_text_pipenum[j], button_description_pipenum[j], button_icon_file_path_pipenum[j]);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","278","RibbonButton"," RibbonButton button = Button_create(button_id_elevation[j], button_text_elevation[j], button_description_elevation[j], button_icon_file_path_elevation[j]);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","289","RibbonButton"," RibbonButton button = Button_create(button_id_annotations[j], button_text_annotations[j], button_description_annotations[j], button_icon_file_path_annotations[j]);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","300","RibbonButton"," RibbonButton button = Button_create(button_id_sizes[j], button_text_sizes[j], button_description_sizes[j], button_icon_file_path_sizes[j]);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","311","RibbonButton"," RibbonButton button = Button_create(button_id_check[j], button_text_check[j], button_description_check[j], button_icon_file_path_check[j]);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","324","RibbonTab"," public static RibbonTab Tab_create()","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","326","RibbonTab"," RibbonTab tab = new RibbonTab","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","334","RibbonPanel"," public static RibbonPanel Panel_create(int i)","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","337","RibbonPanel"," RibbonPanelSource panel_source = new RibbonPanelSource();","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","342","RibbonPanel"," RibbonPanel panel = new RibbonPanel()","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","350","RibbonButton"," public static RibbonButton Button_create(string button_id, string button_text, string button_description, string button_icon_file_path)","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","362","RibbonButton"," RibbonButton button = new RibbonButton()","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","414","RibbonTab"," RibbonTab tab = ComponentManager.Ribbon.FindTab(tab_id);","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","422","RibbonPanel"," RibbonPanel panel = null;","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","423","RibbonPanel"," foreach (RibbonPanel panel_tmp in tab.Panels)","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","491","RibbonButton"," RibbonButton button = panel.FindItem(btn_id) as RibbonButton;","use"
|
||||||
|
"OrthoLoader\Ribbon.cs","503","RibbonPanel"," } //foreach (RibbonPanel panel_tmp in tab.Panels)","use"
|
||||||
|
@@ -0,0 +1,57 @@
|
|||||||
|
"File","Line","Token","Trigger","PluginName","Count","Computer","User","Project","Aggregation"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1253","WriteAllText","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AnnotateLineNumbers\Commands.cs","1625","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"AutoAnnotateView\Commands.cs","177","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"AutoAnnotateView\Commands.cs","476","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\Commands.cs","489","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\Commands.cs","495","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\Commands.cs","499","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\Commands.cs","500","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","259","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","380","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","387","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","770","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","788","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","791","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","922","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","956","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoAnnotateView\ViewPorts.cs","959","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoElevation\Commands.cs","337","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","536","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","551","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","558","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1856","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1874","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","1877","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"AutoLinenumberConnections\Commands.cs","2404","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"CheckOrthoView\Commands.cs","85","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","6","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","18","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","226","Environment.MachineName","unknown","not evidenced","not evidenced","yes","not evidenced","not evidenced","not determined"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","567","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","577","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"GetLinenumberAnnotationText\LinenumberAnnotation.cs","588","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"InsertElevation\Commands.cs","974","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"OrthoAutoAnnotate\Commands.cs","1116","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"P3DCopyMissingObjectsToOrthoDrawing\Commands.cs","136","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","235","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","602","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","761","Counter","unknown","not evidenced","possible","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"UpdateOrthoDrawings\Commands.cs","969","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"UpdateOrthoViewBlocks\Commands.cs","285","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (2).cs","137","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (3).cs","132","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (4).cs","138","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия (5).cs","205","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands - копия.cs","88","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands1.cs","132","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"_archive\2019_AnnotateLineNumbers\2019_AnnotateLineNumbers\Commands2.cs","138","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","6","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","382","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","384","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","385","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","6","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","379","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","381","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"_archive\2019_GetLinenumberAnnotationText_ТАИФ\2019_GetLinenumberAnnotationText\LinenumberAnnotation.cs","382","Excel","unknown","not evidenced","not evidenced","not evidenced","not evidenced","not evidenced","not determined"
|
||||||
|
"_archive\2019_InsertElevation_ОЗХ\2019_InsertElevation\2019_InsertElevation\Commands.cs","978","Environment.UserName","unknown","not evidenced","not evidenced","not evidenced","possible","possible","not determined"
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user