【问题标题】:OpenDesign Specification for .dwg files.dwg 文件的 OpenDesign 规范
【发布时间】:2014-10-22 18:59:33
【问题描述】:

我已经为 .dwg 文件使用 OpenDesign 规范大约两周了。现在,我得到了除非实体对象和实体对象之外的所有信息。也许我无法理解这些信息是如何写的。具体来说,我需要知道如何区分非实体对象和实体对象。在 C# 上工作。 http://opendesign.com/files/guestdownloads/OpenDesign_Specification_for_.dwg_files.pdf 在第 98 页。

这就是我发现非实体对象格式的方法:

private bool ReadNonEntityObject(FileReader fileReader, DWGVersion version, long handle, long fileLoc)
    {
        long oldPos = fileReader.BufferPosition;

        BaseTypes bReader = new BaseTypes(fileReader);
        fileReader.SeekAbsolute(fileLoc);

        var size = bReader.GetModularShort();

        if (version.IsLaterOrEqual(DWGVersion.VersionEnum.R2010))
        {
            var HandleSize = bReader.GetModularChar(false);
        }

        var objectType = bReader.GetObjectType(version);
        Console.WriteLine(BitConverter.ToString(BitConverter.GetBytes(objectType), 0).Substring(0, 2));
        if (version.IsLaterOrEqual(DWGVersion.VersionEnum.R2000) && version.IsEarlier(DWGVersion.VersionEnum.R2010))
        {
            var ObjectSize = bReader.GetLongRaw();
        }

        var handl = bReader.GetHandle();

        if (handl != handle)
            throw new Exception("DWG file is corrupted or incorrect");

        var extendedSize = bReader.GetShort();
        int size1 = 0;
        bool isGraphic = fileReader.GetBits(1, true)[0];
        if (isGraphic)
            size1 = bReader.GetLongRaw();
        if (extendedSize != 0)
        {
            var appHandle = bReader.GetHandle();
            var endPos = fileReader.BufferPosition + extendedSize;

            string data = "";//DEBUG for testing

            while (fileReader.BufferPosition < endPos)
            {
                int byteCode = bReader.GetByteRaw();
                object val = null;
                switch (byteCode) //TODO add all byteCode
                {
                    case 0:
                        {
                            if (version.IsEarlier(DWGVersion.VersionEnum.R2007))
                            {
                                int N = bReader.GetByteRaw();
                                var codePage = bReader.GetShortRaw();
                                val = bReader.GetStringAscii(N);
                            }
                            if (version.IsLaterOrEqual(DWGVersion.VersionEnum.R2007))
                            {
                                //TODO
                            }
                        }
                        break;
                    case 1:
                        val = bReader.GetText();
                        break;
                    case 8:
                        {
                            break;
                        }
                    case 2:
                        val = bReader.GetCharAscii() == 0 ? '{' : '}';
                        break;
                    case 40:
                        bReader.Get3DDouble();
                        break;
                    case 145:
                        {
                            val = bReader.GetDouble();
                            break;
                        }
                    case 70:
                        val = bReader.GetShortRaw();
                        break;
                    case 71:
                        val = bReader.GetLongRaw();
                        break;
                    default:
                        val = "";
                        break;

                }
                data += val + " ";
                //Console.WriteLine(data);
            }
        }

        if (version.Equals(DWGVersion.VersionEnum.R13_R14))
        {
            var DataSize = bReader.GetLongRaw();
            var persistentNum = bReader.GetByteRaw();
        }
        if (version.IsLaterOrEqual(DWGVersion.VersionEnum.R2004))
        { 

        }

        fileReader.SeekAbsolute(oldPos);
        return true;
    }

【问题讨论】:

  • 你的问题到底是什么@Denish Kosov???????是跟编码有关吗??????

标签: c# specifications dwg


【解决方案1】:

非实体对象中没有 isGraphic 位。 仅限扩展数据。它是循环的,见第 254 页。

根据我的经验,大多数类型 - 是实体对象。 我有对象的基类和一些 heder reader。许多类型相互延伸。 使用 crc 检查,用于检查您的证明。

【讨论】:

    猜你喜欢
    • 2017-11-05
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2012-09-17
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多