Maraiah/maraiah/map/lins.rs

50 lines
1.0 KiB
Rust
Raw Normal View History

2019-04-01 00:39:47 -07:00
//! `Line` type.
2019-06-13 18:09:07 -07:00
use crate::{bin::OptU16, err::*};
2019-04-01 00:39:47 -07:00
/// Reads a `LINS` chunk.
pub fn read(b: &[u8]) -> ResultS<(Line, usize)>
{
2019-07-05 20:21:11 -07:00
read_data! {
endian: BIG, buf: b, size: 32, start: 0, data {
let pnt_beg = u16[0];
let pnt_end = u16[2];
let flags = u16[4] flag LineFlags;
let side_fr = OptU16[12];
let side_bk = OptU16[14];
let poly_fr = OptU16[16];
let poly_bk = OptU16[18];
}
}
2019-04-01 00:39:47 -07:00
2019-07-05 20:21:11 -07:00
Ok((Line{flags, pnt_beg, pnt_end, side_fr, side_bk, poly_fr, poly_bk}, 32))
2019-04-01 00:39:47 -07:00
}
/// A line segment.
#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))]
2019-06-21 18:34:10 -07:00
#[derive(Clone, Debug, Eq, PartialEq)]
2019-06-25 03:52:21 -07:00
pub struct Line {
2019-07-05 20:21:11 -07:00
pub flags: LineFlags,
pub pnt_beg: u16,
pub pnt_end: u16,
pub side_fr: OptU16,
pub side_bk: OptU16,
pub poly_fr: OptU16,
pub poly_bk: OptU16,
2019-04-01 00:39:47 -07:00
}
c_bitfield! {
2019-07-05 20:21:11 -07:00
/// Flags for `Line`.
#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))]
pub struct LineFlags: u16 {
TRANS_SIDE = 9,
ELEV_VAR = 10,
ELEVATION = 11,
LANDSCAPE = 12,
TRANSPARENT = 13,
SOLID = 14,
}
2019-04-01 00:39:47 -07:00
}
// EOF