예제 #1
0
	def __init__(self, data, bHdr):
		self.pos = bHdr.blockPos + 4
		self.key = data[bHdr.blockPos:self.pos]
		self.subName = data[self.pos:self.pos + 2]
		self.subKey, self.pos  = getShort(data, self.pos + 2)
		self.size, self.pos    = getInt(data, self.pos)
		self.version, self.pos = getInt(data, self.pos)
예제 #2
0
    def getChunks(self, data, level, containerReader, primitiveReader):
        chunks = []
        offset = 0

        if (level == 0):
            t, o = getShort(data, 0)
            l, o = getInt(data, o)
            if (t == 0x8B1F):
                t, o = getInt(data, o)
                if (t == 0x0B000000):
                    data = zlib.decompress(data, zlib.MAX_WBITS | 32)

        if (level == 0):
            progressbar = FreeCAD.Base.ProgressIndicator()
            progressbar.start("  reading '%s'..." % self.name, len(data))
        while offset < len(data):
            old = offset
            offset, chunk = self.getNextChunk(data, offset, level, len(chunks),
                                              containerReader, primitiveReader)
            if (level == 0):
                for i in range(offset - old):
                    progressbar.next()
            chunks.append(chunk)

        if (level == 0): progressbar.stop()

        return chunks
예제 #3
0
def calcPointNi3s(chunk):
    data = chunk.data
    cnt, o = getInt(data, 0)
    list = []
    try:
        while (o < len(data)):
            p = PointNi3s()

            l, o = getInt(data, o)
            p.points, o = getInts(data, o, l)
            p.flags, o = getShort(data, o)

            if ((p.flags & 0x01) != 0): p.f1, o = getInt(data, o)
            if ((p.flags & 0x08) != 0): p.fH, o = getShort(data, o)
            if ((p.flags & 0x10) != 0): p.f2, o = getInt(data, o)
            if ((p.flags & 0x20) != 0): p.fA, o = getInts(data, o, 2 * (l - 3))

            if (len(p.points) > 0):
                list.append(p)
    except Exception as e:
        FreeCAD.Console.PrintError(traceback.format_exc())
        FreeCAD.Console.PrintError('\n')
        FreeCAD.Console.PrintError("%s: o = %d\n" % (e, o))
        raise e
    return list
예제 #4
0
def readGsmBlockHeader(data, pos):
	bHdr = GsmBlockHeader()
	ofs  = pos + 4
	bHdr.key = data[pos:ofs].decode('utf8')
	bHdr.blockPos, ofs    = getInt(data, ofs)
	bHdr.blockLength, ofs = getInt(data, ofs)
	bHdr.flags, ofs       = getInt(data, ofs)
	return bHdr, pos + bHdr.length
예제 #5
0
def calcCoordinates(data):
    l, o = getInt(data, 0)
    cnt = len(data) / 16
    p = numpy.zeros((cnt, 3), numpy.float32)
    i = 0
    while (o < len(data)):
        w, o = getInt(data, o)
        f, o = getFloats(data, o, 3)
        p[i, ] = f
        i += 1
    return p
예제 #6
0
 def setLStr16(self, data):
     try:
         l, o = getInt(data, 0)
         self.data = data[o:o + l * 2].decode('utf-16-le')
         if (self.data[-1] == b'\0'): self.data = self.data[0:-1]
         self.format = "LStr16"
         self.unknown = False
     except:
         self.data = data
예제 #7
0
def getArrayPoint3f(values):
    v = []
    if len(values) >= 4:
        count, offset = getInt(values, 0)
        while (count > 0):
            floats, offset = getFloats(values, offset, 3)
            v.append(floats)
            count -= 1
    return v
예제 #8
0
def getNGonsInts(chunk):
    o = 0
    list = []
    data = chunk.data
    while (o < len(data)):
        cnt, o = getInt(data, o)
        points, o = getInts(data, o, cnt)
        list.append(points)
    return list
예제 #9
0
def getNGons5i(data):
    count, o = getInt(data, 0)
    ngons = []
    while count > 0:
        p, o = getInts(data, o, 3)
        o += 8
        ngons.append(p)
        count -= 1
    return ngons
예제 #10
0
def getNGons6i(data):
    cnt, o = getInt(data, 0)
    list = []
    while (o < len(data)):
        l, o = getInts(data, o, 6)
        i = 5
        while ((i > 3) and (l[i] < 0)):
            i -= 1
        if (i > 2): list.append(l[1:i])
    return list
예제 #11
0
def getNodeParent(node):
    parent = None
    if (node):
        chunk = node.getFirst(0x0960)
        if (chunk is not None):
            idx, offset = getInt(chunk.data, 0)
            parent = getNode(idx)
            if (parent is None):
                FreeCAD.Console.PrintError("parent index %X < %X!\n" %
                                           (idx, len(SCENE_LIST)))
    return parent
예제 #12
0
def readGsmHeader(data):
	header = GsmHeader()
	header.blockCount, pos = getInt(data, 0x24)
	return header, header.length