コード例 #1
0
ファイル: MetaForm.cs プロジェクト: secondii/Yutai
        private static bool DelFunc(EmfPlusRecordType recordType, int flags, int dataSize, IntPtr recordData,
                                    PlayRecordCallback callbackData)
        {
            byte[] numArray = new byte[dataSize];
            if (recordData != IntPtr.Zero)
            {
                Marshal.Copy(recordData, numArray, 0, dataSize);
            }
            EmfPlusRecordType emfPlusRecordType = recordType;

            if (emfPlusRecordType <= EmfPlusRecordType.DrawArc)
            {
                if (emfPlusRecordType == EmfPlusRecordType.EmfHeader)
                {
                    MetaForm.imgWidth  = MetaForm.EmfWidthToWidth((int)numArray[24], (int)numArray[25]);
                    MetaForm.imgHeight = MetaForm.EmfWidthToWidth((int)numArray[28], (int)numArray[29]);
                    MetaForm.cn_obj    = (int)MetaForm.Format_Size2(numArray[41], numArray[42]);
                }
                else
                {
                    switch (emfPlusRecordType)
                    {
                    case EmfPlusRecordType.Object:
                    {
                        if ((int)numArray.Length >= 32 || numArray[4] > 1)
                        {
                            if (numArray[4] != 0)
                            {
                                MetaForm.SplitRecObject(numArray);
                                return(true);
                            }
                            if ((int)numArray.Length == 32)
                            {
                                MetaForm.r = numArray[30];
                                MetaForm.g = numArray[29];
                                MetaForm.b = numArray[28];
                            }
                            if ((int)numArray.Length > 32)
                            {
                                MetaForm.r = numArray[34];
                                MetaForm.g = numArray[33];
                                MetaForm.b = numArray[32];
                            }
                            if (numArray[8] == 0)
                            {
                                MetaForm.line_style = 0;
                            }
                            else
                            {
                                MetaForm.line_style = numArray[20];
                            }
                            MetaForm.text_size  = MetaForm.FormatSize((int)numArray[6], (int)numArray[7]);
                            MetaForm.obj_width  = MetaForm.FormatSize((int)numArray[18], (int)numArray[19]);
                            MetaForm.text_style = numArray[12];
                            break;
                        }
                        else
                        {
                            MetaForm.r           = numArray[14];
                            MetaForm.g           = numArray[13];
                            MetaForm.b           = numArray[12];
                            MetaForm.hatch_style = numArray[8];
                            break;
                        }
                    }

                    case EmfPlusRecordType.Clear:
                    case EmfPlusRecordType.FillPie:
                    case EmfPlusRecordType.DrawPie:
                    {
                        return(true);
                    }

                    case EmfPlusRecordType.FillRects:
                    {
                        if (numArray[3] == 255)
                        {
                            MetaForm.r = numArray[2];
                            MetaForm.g = numArray[1];
                            MetaForm.b = numArray[0];
                        }
                        MetaForm.DrawRectangle(numArray, 8, true);
                        MetaForm.hatch_style = -1;
                        break;
                    }

                    case EmfPlusRecordType.DrawRects:
                    {
                        MetaForm.DrawRectangle(numArray, 4, false);
                        break;
                    }

                    case EmfPlusRecordType.FillPolygon:
                    {
                        MetaForm.DrawPolyLine(numArray, 4, true, false);
                        MetaForm.hatch_style = -1;
                        break;
                    }

                    case EmfPlusRecordType.DrawLines:
                    {
                        if (numArray[0] != 2)
                        {
                            MetaForm.DrawPolyLine(numArray, 0, false, false);
                            break;
                        }
                        else
                        {
                            MetaForm.DrawLine(numArray, 4);
                            break;
                        }
                    }

                    case EmfPlusRecordType.FillEllipse:
                    {
                        if (numArray[3] != 0)
                        {
                            MetaForm.r = numArray[2];
                            MetaForm.g = numArray[1];
                            MetaForm.b = numArray[0];
                        }
                        if (numArray[8] != numArray[10])
                        {
                            MetaForm.DrawEllipse(numArray, 4, true);
                        }
                        else
                        {
                            MetaForm.DrawCircle(numArray, 4, true);
                        }
                        MetaForm.hatch_style = -1;
                        break;
                    }

                    case EmfPlusRecordType.DrawEllipse:
                    {
                        if (numArray[4] != numArray[6])
                        {
                            MetaForm.DrawEllipse(numArray, 0, false);
                            break;
                        }
                        else
                        {
                            MetaForm.DrawCircle(numArray, 0, false);
                            break;
                        }
                    }

                    case EmfPlusRecordType.DrawArc:
                    {
                        if (numArray[12] != numArray[14])
                        {
                            MetaForm.DrawEllArc(numArray);
                            break;
                        }
                        else
                        {
                            MetaForm.DrawArc(numArray);
                            break;
                        }
                    }

                    default:
                    {
                        return(true);
                    }
                    }
                }
            }
            else if (emfPlusRecordType == EmfPlusRecordType.DrawBeziers)
            {
                MetaForm.DrawPolyLine(numArray, 0, false, true);
            }
            else if (emfPlusRecordType == EmfPlusRecordType.DrawString)
            {
                MetaForm.r = numArray[2];
                MetaForm.g = numArray[1];
                MetaForm.b = numArray[0];
                MetaForm.DrawString(numArray);
            }
            else
            {
                switch (emfPlusRecordType)
                {
                case EmfPlusRecordType.ResetWorldTransform:
                {
                    MetaForm.transform = false;
                    break;
                }

                case EmfPlusRecordType.MultiplyWorldTransform:
                {
                    return(true);
                }

                case EmfPlusRecordType.TranslateWorldTransform:
                {
                    MetaForm.transform    = true;
                    MetaForm.transPoint.X = MetaForm.FormatSize((int)numArray[2], (int)numArray[3]);
                    MetaForm.transPoint.Y = MetaForm.FormatSize((int)numArray[6], (int)numArray[7]);
                    break;
                }

                default:
                {
                    return(true);
                }
                }
            }
            return(true);
        }
コード例 #2
0
ファイル: MetaForm.cs プロジェクト: secondii/Yutai
        private static void AddObjectsPath(ArrayList arr)
        {
            int j;
            int count;

            for (int i = 0; i < arr.Count; i++)
            {
                switch ((arr[i] as MetaForm.ObjectEnt).type)
                {
                case MetaForm.ObjTypeRecord.objCloseLine:
                {
                    count = (arr[i] as MetaForm.ObjectEnt).points.Count - 1;
                    for (j = 0; j <= count; j++)
                    {
                        if (j < count)
                        {
                            MetaForm.DrawLine((PointF)(arr[i] as MetaForm.ObjectEnt).points[j],
                                              (PointF)(arr[i] as MetaForm.ObjectEnt).points[j + 1]);
                        }
                    }
                    j--;
                    if ((arr[i] as MetaForm.ObjectEnt).compobj != -1)
                    {
                        int item = (arr[i] as MetaForm.ObjectEnt).compobj;
                        int num  = i;
                        while ((arr[num] as MetaForm.ObjectEnt).compobj != -1)
                        {
                            item = (arr[num] as MetaForm.ObjectEnt).compobj;
                            num--;
                        }
                        if (j > count)
                        {
                            break;
                        }
                        MetaForm.DrawLine((PointF)(arr[i] as MetaForm.ObjectEnt).points[j],
                                          (PointF)(arr[item] as MetaForm.ObjectEnt).points[0]);
                        break;
                    }
                    else
                    {
                        if (j > count)
                        {
                            break;
                        }
                        MetaForm.DrawLine((PointF)(arr[i] as MetaForm.ObjectEnt).points[j],
                                          (PointF)(arr[i] as MetaForm.ObjectEnt).points[0]);
                        break;
                    }
                }

                case MetaForm.ObjTypeRecord.objCloseBezier:
                {
                    MetaForm.AddPolyBez((arr[i] as MetaForm.ObjectEnt).points);
                    j = (arr[i] as MetaForm.ObjectEnt).points.Count - 1;
                    if ((arr[i] as MetaForm.ObjectEnt).compobj != -1)
                    {
                        int item1 = (arr[i] as MetaForm.ObjectEnt).compobj;
                        int num1  = i;
                        while ((arr[num1] as MetaForm.ObjectEnt).compobj != -1)
                        {
                            item1 = (arr[num1] as MetaForm.ObjectEnt).compobj;
                            num1--;
                        }
                        MetaForm.DrawLine((PointF)(arr[i] as MetaForm.ObjectEnt).points[j],
                                          (PointF)(arr[item1] as MetaForm.ObjectEnt).points[0]);
                        break;
                    }
                    else
                    {
                        MetaForm.DrawLine((PointF)(arr[i] as MetaForm.ObjectEnt).points[j],
                                          (PointF)(arr[i] as MetaForm.ObjectEnt).points[0]);
                        break;
                    }
                }

                case MetaForm.ObjTypeRecord.objBezier:
                {
                    MetaForm.AddPolyBez((arr[i] as MetaForm.ObjectEnt).points);
                    break;
                }

                case MetaForm.ObjTypeRecord.objLine:
                {
                    count = (arr[i] as MetaForm.ObjectEnt).points.Count - 1;
                    for (j = 0; j <= count; j++)
                    {
                        if (j < count)
                        {
                            MetaForm.DrawLine((PointF)(arr[i] as MetaForm.ObjectEnt).points[j],
                                              (PointF)(arr[i] as MetaForm.ObjectEnt).points[j + 1]);
                        }
                    }
                    break;
                }
                }
            }
        }