Skip to content

Commit 7f1bd3a

Browse files
authored
Merge pull request #934 from DomCR/issue-891_CadDictionary-defaults
issue 891 default entries
2 parents 5f0f772 + 9b846da commit 7f1bd3a

15 files changed

+196
-64
lines changed

src/ACadSharp.Tests/IO/IOTestsBase.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public abstract class IOTestsBase
3939
static IOTestsBase()
4040
{
4141
loadSamples("", "dwg", DwgFilePaths);
42-
loadSamples("", "dxf", DxfAsciiFiles);
43-
loadSamples("", "dxf", DxfBinaryFiles);
42+
loadSamples("", "_ascii", "dxf", DxfAsciiFiles);
43+
loadSamples("", "_binary", "dxf", DxfBinaryFiles);
4444

4545
Versions = new TheoryData<ACadVersion>
4646
{
@@ -68,6 +68,11 @@ protected static void loadLocalSamples(string folder, string ext, TheoryData<Fil
6868
}
6969

7070
protected static void loadSamples(string folder, string ext, TheoryData<FileModel> files)
71+
{
72+
loadSamples(folder, string.Empty, ext, files);
73+
}
74+
75+
protected static void loadSamples(string folder, string prefix, string ext, TheoryData<FileModel> files)
7176
{
7277
string path = TestVariables.SamplesFolder;
7378

@@ -82,7 +87,7 @@ protected static void loadSamples(string folder, string ext, TheoryData<FileMode
8287
return;
8388
}
8489

85-
foreach (string file in Directory.GetFiles(path, $"*.{ext}"))
90+
foreach (string file in Directory.GetFiles(path, $"*{prefix}.{ext}"))
8691
{
8792
files.Add(new FileModel(file));
8893
}

src/ACadSharp.Tests/Objects/Collections/DictionaryVariableCollectionTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public void AddVariable()
1212
CadDocument document = new CadDocument();
1313
var c = this.getDocumentCollection(document);
1414

15-
c.AddVariable("hello", "value");
15+
c.AddOrUpdateVariable("hello", "value");
1616

1717
Assert.NotEmpty(c);
1818
Assert.True(c.TryGet("hello", out DictionaryVariable variable));
@@ -21,7 +21,7 @@ public void AddVariable()
2121

2222
Assert.Null(c.GetValue("goodbye"));
2323

24-
c.AddVariable("hello", "new_value");
24+
c.AddOrUpdateVariable("hello", "new_value");
2525
Assert.Equal("new_value", c.GetValue("hello"));
2626
}
2727

src/ACadSharp/ACadSharp.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<PropertyGroup>
1818
<GenerateDocumentationFile>true</GenerateDocumentationFile>
1919
<PackageReadmeFile>README.md</PackageReadmeFile>
20-
<Version>3.3.22</Version>
20+
<Version>3.3.23</Version>
2121
<PackageOutputPath>../nupkg</PackageOutputPath>
2222
<SignAssembly>True</SignAssembly>
2323
<AssemblyOriginatorKeyFile>../ACadSharp.snk</AssemblyOriginatorKeyFile>

src/ACadSharp/CadDocument.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ public void CreateDefaults()
262262
CadDictionary.CreateDefaultEntries(this.RootDictionary);
263263
}
264264

265-
this.UpdateCollections(true);
265+
this.UpdateCollections(true, true);
266266

267267
//Default variables
268268
this.AppIds.CreateDefaultEntries();
@@ -445,7 +445,7 @@ public bool TryGetCadObject<T>(ulong handle, out T cadObject)
445445
/// Updates the collections in the document and link them to it's dictionary.
446446
/// </summary>
447447
/// <param name="createDictionaries"></param>
448-
public void UpdateCollections(bool createDictionaries)
448+
public void UpdateCollections(bool createDictionaries, bool createDefaults)
449449
{
450450
if (createDictionaries && this.RootDictionary == null)
451451
{
@@ -469,16 +469,19 @@ public void UpdateCollections(bool createDictionaries)
469469
if (this.updateCollection(CadDictionary.AcadScaleList, createDictionaries, out CadDictionary scales))
470470
{
471471
this.Scales = new ScaleCollection(scales);
472+
if (createDefaults) { this.Scales.CreateDefaults(); }
472473
}
473474

474475
if (this.updateCollection(CadDictionary.AcadMLineStyle, createDictionaries, out CadDictionary mlineStyles))
475476
{
476477
this.MLineStyles = new MLineStyleCollection(mlineStyles);
478+
if (createDefaults) { this.MLineStyles.CreateDefaults(); }
477479
}
478480

479481
if (this.updateCollection(CadDictionary.AcadMLeaderStyle, createDictionaries, out CadDictionary mleaderStyles))
480482
{
481483
this.MLeaderStyles = new MLeaderStyleCollection(mleaderStyles);
484+
if (createDefaults) { this.MLeaderStyles.CreateDefaults(); }
482485
}
483486

484487
if (this.updateCollection(CadDictionary.AcadImageDict, createDictionaries, out CadDictionary imageDefinitions))
@@ -499,11 +502,13 @@ public void UpdateCollections(bool createDictionaries)
499502
if (this.updateCollection(CadDictionary.VariableDictionary, createDictionaries, out CadDictionary variables))
500503
{
501504
this.DictionaryVariables = new DictionaryVariableCollection(variables);
505+
if (createDefaults) { this.DictionaryVariables.CreateDefaults(); }
502506
}
503507

504508
if (this.updateCollection(CadDictionary.AcadMaterial, createDictionaries, out CadDictionary materials))
505509
{
506510
this.Materials = new MaterialCollection(materials);
511+
if (createDefaults) { this.Materials.CreateDefaults(); }
507512
}
508513
}
509514

src/ACadSharp/IO/CadDocumentBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ protected void buildDictionaries()
270270
dictionaryTemplate.Build(this);
271271
}
272272

273-
this.DocumentToBuild.UpdateCollections(true);
273+
this.DocumentToBuild.UpdateCollections(true, false);
274274
}
275275

276276
protected void createMissingHandles()

src/ACadSharp/Objects/CadDictionary.cs

Lines changed: 6 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -171,16 +171,14 @@ public static void CreateDefaultEntries(CadDictionary root)
171171
root.TryAdd(new CadDictionary(AcadColor));
172172
root.TryAdd(new CadDictionary(AcadGroup));
173173

174-
CadDictionary layouts = root.ensureCadDictionaryExist(AcadLayout);
174+
root.TryAdd(new CadDictionary(AcadLayout));
175175

176176
root.TryAdd(new CadDictionary(AcadMaterial));
177177
root.TryAdd(new CadDictionary(AcadSortEnts));
178178

179-
CadDictionary mLeaderStyles = root.ensureCadDictionaryExist(AcadMLeaderStyle);
180-
mLeaderStyles.TryAdd(MultiLeaderStyle.Default);
179+
root.TryAdd(new CadDictionary(AcadMLeaderStyle));
181180

182-
CadDictionary mLineStyles = root.ensureCadDictionaryExist(AcadMLineStyle);
183-
mLineStyles.TryAdd(MLineStyle.Default);
181+
root.TryAdd(new CadDictionary(AcadMLineStyle));
184182

185183
root.TryAdd(new CadDictionary(AcadTableStyle));
186184
root.TryAdd(new CadDictionary(AcadPlotSettings));
@@ -189,44 +187,17 @@ public static void CreateDefaultEntries(CadDictionary root)
189187

190188
// { AcadPlotStyleName, new CadDictionaryWithDefault() }, //Add default entry "Normal" PlaceHolder ??
191189

192-
CadDictionary variableDictionary = root.ensureCadDictionaryExist(VariableDictionary);
193-
root.TryAdd(variableDictionary);
194-
DictionaryVariable cmLeaderStyleEntry = new DictionaryVariable
195-
(
196-
DictionaryVariable.CurrentMultiLeaderStyle,
197-
MultiLeaderStyle.DefaultName
198-
);
199-
variableDictionary.TryAdd(cmLeaderStyleEntry);
190+
root.TryAdd(new CadDictionary(VariableDictionary));
200191

201192
//DictionaryVars Entry DIMASSOC and HIDETEXT ??
202193

203-
CadDictionary scales = root.ensureCadDictionaryExist(AcadScaleList);
204-
scales.TryAdd(new Scale { Name = "A0", PaperUnits = 1.0, DrawingUnits = 1.0, IsUnitScale = true });
205-
scales.TryAdd(new Scale { Name = "A1", PaperUnits = 1.0, DrawingUnits = 2.0, IsUnitScale = false });
206-
scales.TryAdd(new Scale { Name = "A2", PaperUnits = 1.0, DrawingUnits = 4.0, IsUnitScale = false });
207-
scales.TryAdd(new Scale { Name = "A3", PaperUnits = 1.0, DrawingUnits = 5.0, IsUnitScale = false });
208-
scales.TryAdd(new Scale { Name = "A4", PaperUnits = 1.0, DrawingUnits = 8.0, IsUnitScale = false });
209-
scales.TryAdd(new Scale { Name = "A5", PaperUnits = 1.0, DrawingUnits = 10.0, IsUnitScale = false });
210-
scales.TryAdd(new Scale { Name = "A6", PaperUnits = 1.0, DrawingUnits = 16.0, IsUnitScale = false });
211-
scales.TryAdd(new Scale { Name = "A7", PaperUnits = 1.0, DrawingUnits = 20.0, IsUnitScale = false });
212-
scales.TryAdd(new Scale { Name = "A8", PaperUnits = 1.0, DrawingUnits = 30.0, IsUnitScale = false });
213-
scales.TryAdd(new Scale { Name = "A9", PaperUnits = 1.0, DrawingUnits = 40.0, IsUnitScale = false });
214-
scales.TryAdd(new Scale { Name = "B0", PaperUnits = 1.0, DrawingUnits = 50.0, IsUnitScale = false });
215-
scales.TryAdd(new Scale { Name = "B1", PaperUnits = 1.0, DrawingUnits = 100.0, IsUnitScale = false });
216-
scales.TryAdd(new Scale { Name = "B2", PaperUnits = 2.0, DrawingUnits = 1.0, IsUnitScale = false });
217-
scales.TryAdd(new Scale { Name = "B3", PaperUnits = 4.0, DrawingUnits = 1.0, IsUnitScale = false });
218-
scales.TryAdd(new Scale { Name = "B4", PaperUnits = 8.0, DrawingUnits = 1.0, IsUnitScale = false });
219-
scales.TryAdd(new Scale { Name = "B5", PaperUnits = 10.0, DrawingUnits = 1.0, IsUnitScale = false });
220-
scales.TryAdd(new Scale { Name = "B6", PaperUnits = 100.0, DrawingUnits = 1.0, IsUnitScale = false });
194+
root.TryAdd(new CadDictionary(AcadScaleList));
221195

222196
root.TryAdd(new CadDictionary(AcadVisualStyle));
223197
root.TryAdd(new CadDictionary(AcadFieldList));
224198
root.TryAdd(new CadDictionary(AcadImageDict));
225199

226-
CadDictionary materials = root.ensureCadDictionaryExist(AcadMaterial);
227-
materials.TryAdd(new Material("Global"));
228-
materials.TryAdd(new Material("ByLayer"));
229-
materials.TryAdd(new Material("ByBlock"));
200+
root.TryAdd(new CadDictionary(AcadMaterial));
230201
}
231202

232203
/// <summary>
@@ -403,17 +374,6 @@ public bool TryGetEntry<T>(string name, out T value)
403374
return false;
404375
}
405376

406-
private CadDictionary ensureCadDictionaryExist(string name)
407-
{
408-
if (!this.TryGetEntry(name, out CadDictionary entry))
409-
{
410-
entry = new CadDictionary(name);
411-
this.Add(entry);
412-
}
413-
414-
return entry;
415-
}
416-
417377
private void onEntryNameChanged(object sender, OnNameChangedArgs e)
418378
{
419379
var entry = this._entries[e.OldName];

src/ACadSharp/Objects/Collections/DictionaryVariableCollection.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public DictionaryVariableCollection(CadDictionary dictionary) : base(dictionary)
2020
/// </summary>
2121
/// <param name="name">The name of the variable to add or update. Cannot be null.</param>
2222
/// <param name="value">The value to assign to the variable. Can be null.</param>
23-
public void AddVariable(string name, string value)
23+
public void AddOrUpdateVariable(string name, string value)
2424
{
2525
if (this.TryGet(name, out DictionaryVariable v))
2626
{
@@ -32,6 +32,37 @@ public void AddVariable(string name, string value)
3232
}
3333
}
3434

35+
/// <summary>
36+
/// Adds a new variable with the specified name and value to the collection if a variable with the same name does not
37+
/// already exist.
38+
/// </summary>
39+
/// <param name="name">The name of the variable to add. Cannot be null or empty.</param>
40+
/// <param name="value">The value to assign to the variable. Can be null or empty.</param>
41+
public void AddVariable(string name, string value)
42+
{
43+
if (!this.ContainsKey(name))
44+
{
45+
this.Add(new DictionaryVariable(name, value));
46+
}
47+
}
48+
49+
/// <summary>
50+
/// Creates and adds default variables to the collection.
51+
/// </summary>
52+
/// <remarks>Call this method to ensure that the collection contains the standard default variables.
53+
/// Calling this method multiple times has no effect on existing entries.</remarks>
54+
public void CreateDefaults()
55+
{
56+
this.AddVariable(DictionaryVariable.CurrentMultiLeaderStyle, MultiLeaderStyle.DefaultName);
57+
this.AddVariable(DictionaryVariable.CurrentAnnotationScale, Scale.DefaultName);
58+
this.AddVariable(DictionaryVariable.CurrentTableStyle, TableStyle.DefaultName);
59+
this.AddVariable(DictionaryVariable.WipeoutFrame, ((int)WipeoutFrameType.DisplayAndPlotted).ToString());
60+
61+
//View Section Style object not implemented
62+
this.AddVariable("CVIEWDETAILSTYLE", "Metric50");
63+
this.AddVariable("CVIEWSECTIONSTYLE", "Metric50");
64+
}
65+
3566
/// <summary>
3667
/// Retrieves the value associated with the specified variable name.
3768
/// </summary>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,26 @@
11
namespace ACadSharp.Objects.Collections
22
{
3+
/// <summary>
4+
/// Represents a collection of <see cref="MultiLeaderStyle"/> objects within a CAD dictionary.
5+
/// </summary>
6+
/// <remarks>This collection provides access to <see cref="MultiLeaderStyle"/>s stored in the underlying CAD dictionary. It
7+
/// enables enumeration, retrieval, and management of <see cref="MultiLeaderStyle"/> definitions used for annotative entities in a
8+
/// drawing.</remarks>
39
public class MLeaderStyleCollection : ObjectDictionaryCollection<MultiLeaderStyle>
410
{
11+
/// <inheritdoc/>
512
public MLeaderStyleCollection(CadDictionary dictionary) : base(dictionary)
613
{
714
}
15+
16+
/// <summary>
17+
/// Adds the default <see cref="MultiLeaderStyle"/> to the collection if it does not already exist.
18+
/// </summary>
19+
/// <remarks>Call this method to ensure that the collection contains a default style entry. If the default
20+
/// style is already present, this method has no effect.</remarks>
21+
public void CreateDefaults()
22+
{
23+
this._dictionary.TryAdd(MultiLeaderStyle.Default);
24+
}
825
}
926
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,26 @@
11
namespace ACadSharp.Objects.Collections
22
{
3+
/// <summary>
4+
/// Represents a collection of <see cref="MLineStyle"/> available in the associated CAD dictionary.
5+
/// </summary>
6+
/// <remarks>This collection provides access to the set of <see cref="MLineStyle"/> objects defined within a CAD dictionary.
7+
/// Use this class to enumerate, retrieve, or manage <see cref="MLineStyle"/> for drawing operations. Changes to the collection
8+
/// affect the styles available for multiline entries in the underlying dictionary.</remarks>
39
public class MLineStyleCollection : ObjectDictionaryCollection<MLineStyle>
410
{
11+
/// <inheritdoc/>
512
public MLineStyleCollection(CadDictionary dictionary) : base(dictionary)
613
{
714
}
15+
16+
/// <summary>
17+
/// Adds the default <see cref="MLineStyle"/> to the internal collection if it does not already exist.
18+
/// </summary>
19+
/// <remarks>Call this method to ensure that the collection contains the default multiline style. If the
20+
/// default style is already present, this method has no effect.</remarks>
21+
public void CreateDefaults()
22+
{
23+
this._dictionary.TryAdd(MLineStyle.Default);
24+
}
825
}
926
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
11
namespace ACadSharp.Objects.Collections
22
{
3+
/// <summary>
4+
/// Represents a collection of <see cref="Material"/> objects stored in a CAD dictionary.
5+
/// </summary>
6+
/// <remarks>Use this collection to access, add, or remove <see cref="Material"/> instances associated with a CAD document. The
7+
/// collection provides dictionary-style access to materials by name.</remarks>
38
public class MaterialCollection : ObjectDictionaryCollection<Material>
49
{
10+
/// <inheritdoc/>
511
public MaterialCollection(CadDictionary dictionary) : base(dictionary)
612
{
713
}
14+
15+
/// <summary>
16+
/// Adds the default materials "Global", "ByLayer", and "ByBlock" to the collection if they are not already present.
17+
/// </summary>
18+
/// <remarks>This method is typically called to ensure that the collection contains the standard default
19+
/// materials required for typical usage. If any of the default materials already exist in the collection, they are
20+
/// not added again.</remarks>
21+
public void CreateDefaults()
22+
{
23+
this._dictionary.TryAdd(new Material("Global"));
24+
this._dictionary.TryAdd(new Material("ByLayer"));
25+
this._dictionary.TryAdd(new Material("ByBlock"));
26+
}
827
}
928
}

0 commit comments

Comments
 (0)