Ejemplo n.º 1
0
        // Read all the string parameters into arrays.
        void ReadStringParameters(int firstStIndexBlk, out OcadParamString[] simpleStringParameters, out List<OcadParamString>[] listStringParameters)
        {
            // Allocate the arrays of objects to create.
            simpleStringParameters = new OcadParamString[(int) OcadStringParam.CountSingleParam];
            listStringParameters = new List<OcadParamString>[(int) OcadStringParam.CountListParam];

            if (firstStIndexBlk == 0)
                return;

            OcadStIndexBlocks stindexblocks = new OcadStIndexBlocks();
            stindexblocks.Read(reader, firstStIndexBlk);

            if (stindexblocks == null)
                return;

            for (int i = 0; i < stindexblocks.indexes.Length; ++i) {
                OcadParamString param = new OcadParamString();
                param.Read(reader, stindexblocks.indexes[i]);

                // Sometimes the "zoom" (12) parameter shows up as -12. Not sure why -- bug in OCAD?
                if (param.StType < 0)
                    param.StType = -param.StType;

                OcadStringParam stringType = (OcadStringParam) param.StType;

                if (stringType != 0) {
                    if (stringType < OcadStringParam.CountListParam) {
                        if (listStringParameters[(int) stringType] == null)
                            listStringParameters[(int) stringType] = new List<OcadParamString>();
                        listStringParameters[(int) stringType].Add(param);
                    }
                    else if (stringType < OcadStringParam.LastSingleParam) {
                        simpleStringParameters[stringType - OcadStringParam.FirstSingleParam] = param;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        // Get the template information from a string parameter into a TemplateInfo class.
        TemplateInfo ReadTemplateInfo(OcadParamString paramString)
        {
            string relativeFileName = paramString.firstField;
            string absoluteFileName;

            try {
                absoluteFileName = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(this.filename), relativeFileName));
            }
            catch (Exception) {
                // An argument exception occurs in the template info has bad characters. Other weird exceptions are possible.
                // Just use the relative name in this case (kind of a punt, but hey...)
                absoluteFileName = relativeFileName;
            }

            float offsetX = GetParamFloat(paramString, 'x', 0F);
            float offsetY = GetParamFloat(paramString, 'y', 0F);
            float angle = GetParamFloat(paramString, 'a', 0F);
            float dpi = 25.4F / GetParamFloat(paramString, 'u', 0F);
            bool enabled = (GetParamInt(paramString, 's', 1) != 0);

            return new TemplateInfo(absoluteFileName, new PointF(offsetX, offsetY), dpi, angle, enabled);
        }
Ejemplo n.º 3
0
        // Get a string parameter out of an OcadParamString. Use \0 to get the first field.
        // Returns defaultValue if passed null or if the parameter doesn't exist.
        int GetParamInt(OcadParamString paramString, char code, int defaultValue)
        {
            string s = GetParamString(paramString, code);
            if (s == null)
                return defaultValue;

            int i;
            if (int.TryParse(s, out i))
                return i;
            else
                return defaultValue;
        }
Ejemplo n.º 4
0
        // Get a string parameter out of an OcadParamString. Use \0 to get the first field.
        // Returns null if passed null or if the parameter doesn't exist.
        string GetParamString(OcadParamString paramString, char code)
        {
            if (paramString == null)
                return null;

            if (code == '\0')
                return paramString.firstField;

            if (paramString.codes == null)
                return null;

            for (int i = 0; i < paramString.codes.Length; ++i) {
                if (paramString.codes[i] == code)
                    return paramString.values[i];
            }

            return null;
        }
Ejemplo n.º 5
0
        // Get a float parameter out of an OcadParamString. Use \0 to get the first field.
        // Returns defaultValue if passed null or if the parameter doesn't exist.
        float GetParamFloat(OcadParamString paramString, char code, float defaultValue)
        {
            string s = GetParamString(paramString, code);
            if (s == null)
                return defaultValue;

            float f;
            if (float.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out f))
                return f;
            else
                return defaultValue;
        }
Ejemplo n.º 6
0
        // Create the parameter string for the template.
        OcadParamString CreateTemplateStringParameter(TemplateInfo template)
        {
            float mmPerPixel;
            if (template.dpi > 0)
                mmPerPixel = 25.4F / template.dpi;
            else
                mmPerPixel = 0;

            OcadParamString paramString = new OcadParamString();
            paramString.StType = (int) OcadStringParam.Template ;
            paramString.ObjIndex = 0;
            paramString.codes = new char[7];
            paramString.values = new string[7];
            paramString.firstField = template.absoluteFileName;
            paramString.codes[0] = 'r';
            paramString.values[0] = template.visible ? "1" : "0";  // visible
            paramString.codes[1] = 's';
            paramString.values[1] = template.visible ? "1" : "0";  //visible
            paramString.codes[2] = 'x';
            paramString.values[2] = template.centerPoint.X.ToString(CultureInfo.InvariantCulture);   // offset X
            paramString.codes[3] = 'y';
            paramString.values[3] = template.centerPoint.Y.ToString(CultureInfo.InvariantCulture); ;  // offset Y
            paramString.codes[4] = 'a';
            paramString.values[4] = template.angle.ToString(CultureInfo.InvariantCulture);  // angle
            paramString.codes[5] = 'u';
            paramString.values[5] = mmPerPixel.ToString(CultureInfo.InvariantCulture); // dpi x
            paramString.codes[6] = 'v';
            paramString.values[6] = mmPerPixel.ToString(CultureInfo.InvariantCulture); // dpi y

            return paramString;
        }
Ejemplo n.º 7
0
        // Create the parameter string for the scale.
        OcadParamString CreateScaleParameter()
        {
            OcadParamString paramString = new OcadParamString();
            paramString.StType = (int) OcadStringParam.ScalePar;
            paramString.ObjIndex = 0;
            paramString.codes = new char[7];
            paramString.values = new string[7];
            paramString.codes[0] = 'm';
            paramString.values[0] = map.MapScale.ToString(CultureInfo.InvariantCulture);
            paramString.codes[1] = 'g';
            paramString.values[1] = "10.00";   // grid scale
            paramString.codes[2] = 'r';
            paramString.values[2] = "0";   // real world coords off
            paramString.codes[3] = 'x';
            paramString.values[3] = "0.0";  // real world X
            paramString.codes[4] = 'y';
            paramString.values[4] = "0.0";  // real world Y
            paramString.codes[5] = 'a';
            paramString.values[5] = "0.0";  // real world angle
            paramString.codes[6] = 'd';
            paramString.values[6] = "500.0";  // real world grid

            return paramString;
        }
Ejemplo n.º 8
0
        // Create the parameter string for the print parameters.
        OcadParamString CreatePrintParameter()
        {
            RectangleF printArea = map.PrintArea;
            bool entireMap = false;
            if (printArea.Left == 0 && printArea.Right == 0 && printArea.Top == 0 && printArea.Bottom == 0)
                entireMap = true;

            int numCodes = entireMap ? 2 : 6;

            OcadParamString paramString = new OcadParamString();
            paramString.StType = (int) OcadStringParam.PrintPar;
            paramString.ObjIndex = 0;
            paramString.codes = new char[numCodes];
            paramString.values = new string[numCodes];
            paramString.codes[0] = 'a';
            paramString.values[0] = map.PrintScale.ToString(CultureInfo.InvariantCulture);
            paramString.codes[1] = 'r';
            paramString.values[1] = entireMap ? "0" : "1";
            if (!entireMap) {
                paramString.codes[2] = 'L';
                paramString.values[2] = printArea.Left.ToString(CultureInfo.InvariantCulture);
                paramString.codes[3] = 'B';
                paramString.values[3] = printArea.Top.ToString(CultureInfo.InvariantCulture);   // note: bottom and top switched due to Y-positive coord system.
                paramString.codes[4] = 'R';
                paramString.values[4] = printArea.Right.ToString(CultureInfo.InvariantCulture);
                paramString.codes[5] = 'T';
                paramString.values[5] = printArea.Bottom.ToString(CultureInfo.InvariantCulture);   // note: bottom and top switched due to Y-positive coord system.
            }

            return paramString;
        }
Ejemplo n.º 9
0
        // Create the parameter strings for all the colors.
        List<OcadParamString> CreateColorStringParameters()
        {
            List<SymColor> colors = new List<SymColor>(map.AllColors);
            List<OcadParamString> paramStrings = new List<OcadParamString>(colors.Count);

            int colorCount = colors.Count;
            for (int i = colorCount - 1; i >= 0; --i) {
                // Process colors in reverse order.
                SymColor color = colors[i];

                OcadParamString paramString = new OcadParamString();
                float cyan, magenta, yellow, black;

                color.GetCMYK(out cyan, out magenta, out yellow, out black);

                paramString.StType = (int) OcadStringParam.Color;
                paramString.ObjIndex = 0;
                paramString.firstField = color.Name;
                paramString.codes = new char[6];
                paramString.values = new string[6];
                paramString.codes[0] = 'n';
                paramString.values[0] = color.OcadId.ToString();
                paramString.codes[1] = 'c';
                paramString.values[1] = (cyan * 100F) .ToString(CultureInfo.InvariantCulture);
                paramString.codes[2] = 'm';
                paramString.values[2] = (magenta * 100F).ToString(CultureInfo.InvariantCulture);
                paramString.codes[3] = 'y';
                paramString.values[3] = (yellow * 100F).ToString(CultureInfo.InvariantCulture);
                paramString.codes[4] = 'k';
                paramString.values[4] = (black * 100F).ToString(CultureInfo.InvariantCulture);
                paramString.codes[5] = 'o';
                paramString.values[5] = "0";

                paramStrings.Add(paramString);
            }

            return paramStrings;
        }