Example #1
0
        private static InsertTransform <T> Flatten <T>(Insert insert, T x, netDxf.Units.DrawingUnits baseUnits, bool skipScale, bool skipPos) where T : netDxf.DxfObject
        {
            var blockRecordUnits = insert.Block.Record.Units;
            var unitFactorScale  = skipScale ? 1 : (float)netDxf.Units.UnitHelper.ConversionFactor(blockRecordUnits, baseUnits);
            var scale            = skipScale ? new System.Numerics.Vector2(1, 1) : insert.Scale.ToGeometryVector();
            var pos = skipPos ? new System.Numerics.Vector2(0, 0) : insert.Position.ToGeometryVector();

            return(new InsertTransform <T>()
            {
                Value = x,
                Transform = v => (v * scale * unitFactorScale) + pos,
                Debug_TransformStr = string.Format("(({0}) * s{1} * {3}) + p{2}", "POS", scale, pos, unitFactorScale),
                InsertLevels = new List <Insert>()
                {
                    insert
                },
                Inner = null,
            });
        }
Example #2
0
        private static InsertData GetInsertItems(Insert insert, netDxf.Units.DrawingUnits baseUnits)
        {
            if (insert.Block.Name.StartsWith("tutcod"))
            {
#pragma warning disable CS0219 // Variable is assigned but its value is never used
                var breakdance = true;
#pragma warning restore CS0219 // Variable is assigned but its value is never used
            }

            var all            = insert.Block.Entities;
            var unitsOfContent = insert.Block.Record.Units;

            var inserts     = all.Where(x => x.CodeName == "INSERT").Cast <Insert>().ToList();
            var insertsData = inserts.Select(x => GetInsertItems(x, unitsOfContent)).ToList();

            var attrs = insert.Attributes.ToList();

            var attrDefs = all.Where(x => x.CodeName == "ATTDEF").Cast <AttributeDefinition>().Where(x => x.Flags == AttributeFlags.Constant).ToList();
            var texts    = all.Where(x => x.CodeName == "TEXT").Cast <Text>().ToList();
            var mtexts   = all.Where(x => x.CodeName == "MTEXT").Cast <MText>().ToList();
            var lines    = all.Where(x => x.CodeName == "LINE").Cast <netDxf.Entities.Line>().ToList();
            var circles  = all.Where(x => x.CodeName == "CIRCLE").Cast <netDxf.Entities.Circle>().ToList();

            // Default Units is Inches
            if (baseUnits == netDxf.Units.DrawingUnits.Unitless)
            {
                baseUnits = netDxf.Units.DrawingUnits.Inches;
            }

            return(new InsertData()
            {
                BaseUnits = baseUnits,
                Insert = insert,
                Inserts = insertsData,
                Attributes = attrs,
                AttributeDefinitions = attrDefs,
                Texts = texts,
                MTexts = mtexts,
                Lines = lines,
                Circles = circles,
            });
        }
Example #3
0
        private static InsertTransform <T> Flatten <T>(Insert insert, InsertTransform <T> inner, netDxf.Units.DrawingUnits baseUnits) where T : netDxf.DxfObject
        {
            var blockRecordUnits = insert.Block.Record.Units;
            var unitFactorScale  = (float)netDxf.Units.UnitHelper.ConversionFactor(blockRecordUnits, baseUnits);
            var scale            = insert.Scale.ToGeometryVector();
            var pos = insert.Position.ToGeometryVector();

            return(new InsertTransform <T>()
            {
                Value = inner.Value,
                Transform = v => (inner.Transform(v) * scale * unitFactorScale) + pos,
                Debug_TransformStr = string.Format("(({0}) * s{1} * {3}) + p{2}", inner.Debug_TransformStr, scale, pos, unitFactorScale),
                InsertLevels = new Insert[] { insert }.Concat(inner.InsertLevels).ToList(),
                Inner = inner,
            });
        }