ClearCanvas DicomFile.DataSet - Как добавить новый тег? - PullRequest
3 голосов
/ 16 февраля 2011

я пытаюсь добавить новый тег в мой DicomFile.DataSet в ClearCanvas.

Я заметил, что есть метод "DicomFile.DataSet.RemoveAttribute", но нет метода "AddAtribute". Поэтому я изучал методы «LoadDicomFields» и «SaveDicomFields», но пока не могу заставить их работать. Я пытался передать в эти методы «DicomFieldAttribute», но безрезультатно.

Что мне здесь не хватает? Или что мне нужно сделать, чтобы добавить новый тег в DataSet.

DicomFieldAttribute c = new DicomFieldAttribute(tag);
List<DicomFieldAttribute> cs = new List<DicomFieldAttribute>();
cs.Add(c);
DicomFile.DataSet.LoadDicomFields(cs);
DicomFile.DataSet.SaveDicomFields(cs);
if(DicomFile.DataSet.Contains(tag))
{
   tag = 0; //BreakPoint never reached here
}

Или я тоже это попробовал ::

DicomFieldAttribute c = new DicomFieldAttribute(tag);
DicomFile.DataSet.LoadDicomFields(c);
DicomFile.DataSet.SaveDicomFields(c);
if(DicomFile.DataSet.Contains(tag))
{
   tag = 0; //BreakPoint never reached here
}

Я застрял на том, что казалось бы тривиальной задачей.

1 Ответ

2 голосов
/ 16 февраля 2011

Вы немного путаете использование атрибутов.DicomFiledAttribute - это атрибут .NET, который можно поместить в члены класса, чтобы класс автоматически заполнялся значениями из DicomAttributeCollection или чтобы класс автоматически заполнялся значениями из коллекции DicomAttribute.То есть, если у вас есть такой тестовый класс:


public class TestClass
{
    [DicomField(DicomTags.SopClassUid, DefaultValue = DicomFieldDefault.Default)]
    public DicomUid SopClassUid = null;

    [DicomField(DicomTags.SopInstanceUid, DefaultValue = DicomFieldDefault.Default)]
    public DicomUid SOPInstanceUID = null;

    [DicomField(DicomTags.StudyDate, DefaultValue = DicomFieldDefault.Default)]
    public DateTime StudyDate;
}

Вы можете заполнить экземпляр класса следующим образом:


DicomFile file = new DicomFile("filename.dcm");
file.Load();
TestClass testInstance = new TestClass();

file.DataSet.LoadDicomFields(testInstance);
// testInstance should now be populated with the values from file

Если вы хотите просто заполнить некоторые теги DICOM,в DicomAttributeCollection есть индексатор.Индексатор автоматически создаст экземпляр DicomAttribute, если он еще не существует, для тега, запрошенного через индексатор.Итак, чтобы заполнить значение, вы можете сделать что-то вроде этого:



DicomFile file = new DicomFile("filename.dcm");

file.DataSet[DicomTags.SopInstanceUid].SetStringValue("1.1.1");

Если вы хотите создать DicomAttribute самостоятельно, вы можете сделать что-то вроде этого:


DicomAttribute attrib = new DicomAttributeUI(DicomTags.SopInstanceUid);
attrib.SetStringValue("1.1.1");

DicomFile file = new DicomFile("filename.dcm");
file.DataSet[DicomTags.SopInstanceUid] = attrib;

...