コード例 #1
0
        private void SheetInfoForm_Load(object sender, EventArgs e)
        {
            viewTypeComboBox.Items.Add("View By Part Name");
            viewTypeComboBox.Items.Add("View By Part Topology");
            viewTypeComboBox.SelectedIndex = 0;

            // init the tree by part name.
            InitTreeByPart();

            // init the view port.
            m_shtViewPort.InitEnv(shtViewWnd.Handle, 0.00001, 10000);
            DrawHelper.FitWindow(m_sheet.GetMat().GetBoundaryRect(), m_shtViewPort, shtViewWnd);
        }
コード例 #2
0
ファイル: NestHelper.cs プロジェクト: 15831944/MaterialDedit
        // calc the utilization of the material.
        static public double CalcMatUtil(SheetListEx sheetList, NestParamEx nestParam)
        {
            double dUtilization = .0;

            // calculate the utilization of material.
            double dMatArea = .0, dNestedArea = .0;

            for (int i = 0; i < sheetList.Size(); i++)
            {
                SheetEx sheet       = sheetList.GetSheetByIndex(i);
                int     iSheetCount = sheet.GetCount();
                dMatArea += sheet.GetMat().GetArea() * iSheetCount;

                // go through each part placement object in the sheet.
                PartPmtListEx partPmtList = sheet.GetPartPmtList();
                for (int j = 0; j < partPmtList.Size(); j++)
                {
                    PartPmtEx partPmt = partPmtList.GetPartPmtByIndex(j);
                    PartEx    part    = partPmt.GetPart();

                    // the area of the part.
                    double dPartArea = NestFacadeEx.GetPartArea(part, nestParam.GetConTol());

                    // part count in the part placement object.
                    int iPartCount = 1;
                    if (partPmt.IsGrid())
                    {
                        iPartCount = partPmt.GetRowCount() * partPmt.GetColCount();
                    }
                    dNestedArea += iSheetCount * iPartCount * dPartArea;
                }
            }

            // figure out the utilization.
            if (dMatArea == 0 || dNestedArea == 0)
            {
                dUtilization = .0;
            }
            else
            {
                dUtilization = (dNestedArea / dMatArea) * 100;
            }

            return(dUtilization);
        }
コード例 #3
0
        // preview the selected sheet.
        private void PreviewSheet()
        {
            // get the select sheet.
            ListView.SelectedListViewItemCollection selItems = shtListView.SelectedItems;
            if (selItems.Count == 0)
            {
                return;
            }
            ListViewItem item          = selItems[0];
            long         iSheetID      = (long)item.Tag;
            SheetEx      selectedSheet = m_sheetList.GetSheetByID(iSheetID);

            // clear screen and set the background color.
            m_shtViewPort.BindRendContext();
            m_shtViewPort.ClearScreen();
            m_shtViewPort.SetBackgroundColor(Color.Black);

            // draw coordinate.
            m_shtViewPort.SetDrawColor(Color.Blue);
            m_shtViewPort.SetLineWidth(1);
            m_shtViewPort.DrawCoordinate(0, 0, 0, false);

            // draw material.
            DrawHelper.DrawMat(selectedSheet.GetMat(), m_shtViewPort);

            // draw parts.
            DrawHelper.DrawPartPmts(selectedSheet.GetPartPmtList(), null, m_shtViewPort, m_partColorConfig, m_impDataList);

            // swap buffer to display the geometry.
            m_shtViewPort.SwapBuffers();

            // the rect of part region.
            Rect2DEx partsRect = selectedSheet.GetPartPmtList().GetRectBox();

            partRegionTextBox.Text = partsRect.GetWidth().ToString("0.000") + " * " + partsRect.GetHeight().ToString("0.000");
        }
コード例 #4
0
        private void QrCodeForm_Load(object sender, EventArgs e)
        {
            int v = 0;

            int        vv         = 0;
            int        vvv        = 0;
            Pen        blackPen   = new Pen(Color.Black, 1);
            Pen        blackPen2  = new Pen(Color.Black, 2);
            SolidBrush blackBrush = new SolidBrush(Color.Black);
            HatchBrush hatchBrush = new HatchBrush(HatchStyle.BackwardDiagonal, Color.Black, Color.White);
            //外边距
            int space = 2;

            for (int length = 0; length < shtListView.Items.Count; length++)
            {
                SLTQrCodeItem SLTQrCodeItemTemp = new SLTQrCodeItem()
                {
                    SLTBmpShadowList = new List <SLTShadowBmp>()
                };
                ListViewItem  item        = shtListView.Items[length];
                long          iSheetID    = (long)item.Tag;
                SheetEx       sheet       = m_sheetList.GetSheetByID(iSheetID);
                string        M_Name      = sheet.GetMat().GetName();
                PartPmtListEx partPmtList = sheet.GetPartPmtList();
                int           partsCount  = partPmtList.GetPartList().Size();
                Rect2DEx      sheetRec    = sheet.GetMat().GetBoundaryRect();
                int           MatWidth    = (int)sheetRec.GetWidth();
                int           MatHeight   = (int)sheetRec.GetHeight();
                SLTQrCodeItemTemp.BlankBmp = new Bitmap(MatWidth + 1, MatHeight + 1);
                Graphics gBlank = Graphics.FromImage(SLTQrCodeItemTemp.BlankBmp);
                gBlank.Clear(Color.FromArgb(255, 255, 255, 255));
                //边框
                gBlank.DrawRectangle(blackPen, 0, 0, MatWidth, MatHeight);
                //缩略图
                for (int i = 0; i < partsCount; i++)
                {
                    SLTShadowBmp SLTShadowBmpItem = new SLTShadowBmp();
                    PartPmtEx    partPmt          = sheet.GetPartTopItemList().GetPartPmtByIndex(i).GetPartPmt();
                    Rect2DEx     partRe2          = partPmt.GetRectBox();
                    Matrix2DEx   Matrix           = partPmt.GetMatrix();
                    int          PartWidth        = (int)partRe2.GetWidth();
                    int          PartHeight       = (int)partRe2.GetHeight();
                    int          PoX   = (int)Matrix.GetMatVal(2, 0);
                    int          PoY   = (int)Matrix.GetMatVal(2, 1);
                    int          Angle = (int)(Math.Asin(Matrix.GetMatVal(0, 1)) * 180 / Math.PI);
                    SLTShadowBmpItem.SLTPartInfos = new SLTPartShape()
                    {
                        PoX        = m_nestParam.GetNestDir() == NEST_DIRECTION_EX.NEST_DIR_X ? PoX : PoX - PartWidth,
                        PoY        = MatHeight - PoY - PartHeight,
                        PartWidth  = PartWidth,
                        PartHeight = PartHeight,
                        NestDir    = m_nestParam.GetNestDir() == NEST_DIRECTION_EX.NEST_DIR_X ? "X" : "Y",
                        MatName    = M_Name,
                    };
                    SLTQrCodeItemTemp.SLTBmpShadowList.Add(SLTShadowBmpItem);
                    gBlank.DrawRectangle(blackPen, SLTShadowBmpItem.SLTPartInfos.PoX, SLTShadowBmpItem.SLTPartInfos.PoY, PartWidth, PartHeight);
                }
                gBlank.Dispose();
                //加阴影缩略图
                for (int i = 0; i < SLTQrCodeItemTemp.SLTBmpShadowList.Count; i++)
                {
                    Bitmap       original  = SLTQrCodeItemTemp.BlankBmp;
                    Bitmap       copy      = new Bitmap(original.Width, original.Height);
                    SLTShadowBmp Shapeitem = SLTQrCodeItemTemp.SLTBmpShadowList[i];
                    using (Graphics gTemp = Graphics.FromImage(copy))
                    {
                        gTemp.Clear(Color.White);
                        Rectangle imageRectangle = new Rectangle(0, 0, copy.Width, copy.Height);
                        gTemp.DrawImage(original, imageRectangle, imageRectangle, GraphicsUnit.Pixel);
                        gTemp.FillRectangle(hatchBrush, Shapeitem.SLTPartInfos.PoX,
                                            Shapeitem.SLTPartInfos.PoY, Shapeitem.SLTPartInfos.PartWidth, Shapeitem.SLTPartInfos.PartHeight);
                        gTemp.DrawRectangle(blackPen2, Shapeitem.SLTPartInfos.PoX,
                                            Shapeitem.SLTPartInfos.PoY, Shapeitem.SLTPartInfos.PartWidth, Shapeitem.SLTPartInfos.PartHeight);//画矩形
                    }
                    SLTQrCodeItemTemp.SLTBmpShadowList[i].ShadowBmp = copy;
                    PartEx partEx        = partPmtList.GetPartList().GetPartByIndex(i);
                    string OrderNo       = OrderManagerDal.Instance.GetOrder(partEx.GetID());
                    string partNameIndex = partEx.GetName().Substring(1, 1);
                    string partName      = partEx.GetName();
                    SLTQrCodeItemTemp.SLTBmpShadowList[i].QrCodeText = OrderNo + "-" + partNameIndex;
                    SLTQrCodeItemTemp.SLTBmpShadowList[i].QrCodeBmp  = GenerateQRCode(partNameIndex);
                    //字体
                    Font font = new Font("微软雅黑", 60f);//8号
                    //设定字体格式
                    StringFormat format = new StringFormat()
                    {
                        Alignment     = StringAlignment.Center,
                        LineAlignment = StringAlignment.Center,
                    };
                    string text1 = OrderNo + "-" + partNameIndex;
                    string text2 = partName;
                    string text3 = Shapeitem.SLTPartInfos.PartWidth + "*" + Shapeitem.SLTPartInfos.PartHeight;
                    string text4 = Shapeitem.SLTPartInfos.MatName;
                    SLTQrCodeItemTemp.SLTBmpShadowList[i].SLTText = text1 + "\r\n" + text2 + "\r\n" + text3 + "\r\n" + text4;
                    Size   SLTTextSize = TextRenderer.MeasureText(SLTQrCodeItemTemp.SLTBmpShadowList[i].SLTText, font);
                    Bitmap textBmp     = new Bitmap(SLTTextSize.Width + space + 5, SLTTextSize.Width + space + 5);
                    using (Graphics gTextTemp = Graphics.FromImage(textBmp))
                    {
                        gTextTemp.Clear(Color.White);
                        gTextTemp.SmoothingMode = SmoothingMode.HighQuality;
                        gTextTemp.DrawString(SLTQrCodeItemTemp.SLTBmpShadowList[i].SLTText, font, blackBrush,
                                             new RectangleF(space, (textBmp.Height - SLTTextSize.Height - (2 * space)) / 2 + space, textBmp.Width - space, textBmp.Height - space));
                    }
                    SLTQrCodeItemTemp.SLTBmpShadowList[i].SLTTextBmp = textBmp;
                }
                _SLTQrCodeList.Add(SLTQrCodeItemTemp);
                //g.DrawString(partName, font, blackBrush, new RectangleF(0, 0, 100, 100), format);
                //g.DrawImage(qrBmp, 150, 150, 50, 50);
            }

            //
            int          bmpPrintWidth = 500;
            int          Colunm        = 2;
            List <Shape> positionBase  = new List <Shape>();
            int          count         = 0;

            for (int i = 0; i < _SLTQrCodeList.Count; i++)
            {
                for (int j = 0; j < _SLTQrCodeList[i].SLTBmpShadowList.Count; j++)
                {
                    count++;
                }
            }
            for (int i = 0; i < count; i++)
            {
                for (int j = 0; j < Colunm; j++)
                {
                    if (i * j + j >= count)
                    {
                        break;
                    }
                    Shape itemTemp = new Shape()
                    {
                        PoX        = j * (bmpPrintWidth / Colunm),
                        PoY        = i * (bmpPrintWidth / Colunm),
                        PartWidth  = bmpPrintWidth / Colunm,
                        PartHeight = bmpPrintWidth / Colunm,
                    };
                    positionBase.Add(itemTemp);
                }
            }

            int    bmpPrintHeight = ((positionBase.Count / Colunm) + (positionBase.Count % Colunm)) * (bmpPrintWidth / Colunm);
            Bitmap PrintBmp       = new Bitmap(bmpPrintWidth, bmpPrintHeight);

            using (Graphics gPrint = Graphics.FromImage(PrintBmp))
            {
                gPrint.Clear(Color.White);
                count = 0;
                for (int i = 0; i < _SLTQrCodeList.Count; i++)
                {
                    for (int j = 0; j < _SLTQrCodeList[i].SLTBmpShadowList.Count; j++)
                    {
                        float TextPx   = positionBase[count].PoX;
                        float TextPy   = positionBase[count].PoY + positionBase[count].PartHeight * 0.1f;
                        float QrCodePx = TextPx;
                        float QrCodePy = positionBase[count].PoY + positionBase[count].PartHeight * 0.5f;

                        float  SLTPx      = positionBase[count].PoX + positionBase[count].PartWidth * 0.4f;
                        float  SLTPy      = positionBase[count].PoY;
                        Size   SLTSize    = _SLTQrCodeList[i].SLTBmpShadowList[j].ShadowBmp.Size;
                        float  SLTWidth   = (int)(positionBase[count].PartHeight * SLTSize.Width / SLTSize.Height);
                        float  SLTHeight  = (int)(positionBase[count].PartHeight);
                        Bitmap SLTBmpTemp = _SLTQrCodeList[i].SLTBmpShadowList[j].ShadowBmp;
                        float  scale      = (float)SLTSize.Width / (float)SLTSize.Height;
                        if (scale < 0.6f)//固定高度
                        {
                            SLTWidth  = (int)(positionBase[count].PartHeight * SLTSize.Width / SLTSize.Height);
                            SLTHeight = positionBase[count].PartHeight;
                        }
                        else if (0.6f < scale && scale < 1)//固定宽度
                        {
                            SLTWidth  = positionBase[count].PartWidth * 0.6f;
                            SLTHeight = (int)(positionBase[count].PartWidth * 0.6f * SLTSize.Height / SLTSize.Width);
                        }
                        else if (scale > 1)//旋转
                        {
                            SLTWidth  = positionBase[count].PartWidth * 0.6f;
                            SLTHeight = (int)(positionBase[count].PartWidth * 0.6f * SLTSize.Height / SLTSize.Width);
                            //SLTBmpTemp = new Bitmap(SLTSize.Width, SLTSize.Height);
                            //using (Graphics gCcopy = Graphics.FromImage(SLTBmpTemp))
                            //{
                            //    gCcopy.Clear(Color.White);
                            //    gCcopy.TranslateTransform(0, 0); //源点移动到旋转中心
                            //    gCcopy.RotateTransform(90f); //旋转
                            //    Rectangle imageRectangle = new Rectangle(0, 0, SLTSize.Width, SLTSize.Height);
                            //    gCcopy.DrawImage(_SLTQrCodeList[i].SLTBmpShadowList[j].ShadowBmp, imageRectangle, imageRectangle, GraphicsUnit.Pixel);
                            //}
                            //scale = SLTSize.Height / SLTSize.Width;
                            //if (0.6f < scale && scale < 1)//固定高度
                            //{
                            //    SLTWidth = (int)(positionBase[count].PartHeight * SLTSize.Width / SLTSize.Height);
                            //    SLTHeight = positionBase[count].PartHeight;
                            //}
                            //else if (0.6f < scale && scale < 1)//固定宽度
                            //{
                            //    SLTWidth = positionBase[count].PartWidth * 0.6f;
                            //    SLTHeight = (int)(positionBase[count].PartWidth * 0.6f * SLTSize.Height / SLTSize.Width);
                            //}
                        }
                        //else//固定高度
                        //{
                        //    SLTWidth = (int)(positionBase[count].PartHeight * SLTSize.Width / SLTSize.Height);
                        //    SLTHeight = positionBase[count].PartHeight;
                        //}
                        gPrint.DrawImage(_SLTQrCodeList[i].SLTBmpShadowList[j].SLTTextBmp,
                                         TextPx, TextPy,
                                         (int)(positionBase[count].PartWidth * 0.4),
                                         (int)(positionBase[count].PartHeight * 0.4));
                        gPrint.DrawImage(_SLTQrCodeList[i].SLTBmpShadowList[j].QrCodeBmp,
                                         QrCodePx, QrCodePy,
                                         (int)(positionBase[count].PartWidth * 0.4),
                                         (int)(positionBase[count].PartHeight * 0.4));
                        gPrint.DrawImage(SLTBmpTemp, SLTPx, SLTPy, SLTWidth, SLTHeight);
                        count++;
                    }
                }
            }
            panelQrCodePrint.BackgroundImage       = PrintBmp;
            panelQrCodePrint.BackgroundImageLayout = ImageLayout.Stretch;

            for (int i = 0; i < _SLTQrCodeList.Count; i++)
            {
                for (int j = 0; j < _SLTQrCodeList[i].SLTBmpShadowList.Count; j++)
                {
                    cbShadowBmp.Items.Add(_SLTQrCodeList[i].SLTBmpShadowList[j].QrCodeText);
                }
            }
        }
コード例 #5
0
        private void viewShtBtn_Click(object sender, EventArgs e)
        {
            ListView.SelectedListViewItemCollection selItems = shtListView.SelectedItems;
            if (selItems.Count != 1)
            {
                MessageBox.Show("Please select one sheet to view.", "NestProfessor DEMO");
                return;
            }
            else
            {
                ListViewItem  item        = selItems[0];
                long          iSheetID    = (long)item.Tag;
                SheetEx       sheet       = m_sheetList.GetSheetByID(iSheetID);
                string        M_Name      = sheet.GetMat().GetName();
                PartPmtListEx partPmtList = sheet.GetPartPmtList();
                int           partsCount  = partPmtList.GetPartList().Size();
                Rect2DEx      sheetRec    = sheet.GetMat().GetGeomItemList().GetItemByIndex(0).GetRectBox();
                string        info        = "SheetName:" + M_Name + "\r\nWidth:" + sheetRec.GetWidth().ToString() + "--Height:" + sheetRec.GetHeight().ToString();
                for (int i = 0; i < partsCount; i++)
                {
                    PartEx     partEx = partPmtList.GetPartList().GetPartByIndex(i);
                    PartPmtEx  part   = sheet.GetPartTopItemList().GetPartPmtByIndex(i).GetPartPmt();
                    Rect2DEx   re2    = part.GetRectBox();
                    Matrix2DEx Matrix = part.GetMatrix();
                    info += "\r\nPartName:" + partEx.GetName()
                            + "\r\n角度:" + Math.Round(Math.Asin(Matrix.GetMatVal(0, 1)) * 180 / Math.PI).ToString() + "度"
                            + "\r\nX:" + Math.Round(Matrix.GetMatVal(2, 0)).ToString()
                            + "\tY:" + Math.Round(Matrix.GetMatVal(2, 1)).ToString()
                            + "\r\n长:" + Math.Round(re2.GetWidth()).ToString()
                            + "\t宽:" + Math.Round(re2.GetHeight()).ToString()
                            + "\t面积:" + Math.Round(re2.GetWidth() * re2.GetHeight()).ToString();
                }

                Bitmap   bmp         = new Bitmap(300, 300);
                Graphics GraphicsObj = Graphics.FromImage(bmp);
                GraphicsObj.Clear(Color.White);
                //写字
                string str      = "OrderNo:0025";
                Font   font     = new Font("微软雅黑", 15f);
                double strWidth = TextRenderer.MeasureText(str, font).Width;
                Brush  brush    = Brushes.Red;
                PointF point    = new PointF(10f, 10f);
                GraphicsObj.DrawString(str, font, brush, 10, 10);
                //画图形
                Pen myPen = new Pen(Color.Red, 1);
                GraphicsObj.DrawRectangle(myPen, 50, 50, 30, 30);//画矩形
                SolidBrush myBrush = new SolidBrush(Color.Red);
                GraphicsObj.FillRectangle(myBrush, 70, 70, 30, 30);
                //添加图形
                Bitmap   tBtm      = new Bitmap(1000, 1000);
                Brush    blackrush = Brushes.Black;
                Graphics gTest     = Graphics.FromImage(tBtm);
                gTest.FillRectangle(blackrush, 0, 0, 1000, 1000);
                GraphicsObj.DrawImage(tBtm, 100, 100, 50, 50);



                MessageBox.Show(info);

                if (sheet != null)
                {
                    SheetInfoForm form = new SheetInfoForm(m_impDataList, m_partColorConfig, sheet);
                    form.ShowDialog();
                }
            }
        }
コード例 #6
0
        // display the nesting result.
        private void DisplayNestResult()
        {
            if (m_sheetList == null)
            {
                return;
            }

            m_bDisableEvent = true;

            // display detail info of each sheet.
            shtListView.Items.Clear();
            for (int i = 0; i < m_sheetList.Size(); i++)
            {
                SheetEx sheet = m_sheetList.GetSheetByIndex(i);

                // insert a row.
                int          iCount = shtListView.Items.Count + 1;
                ListViewItem item   = shtListView.Items.Add(iCount.ToString());

                // "name" column.
                item.SubItems.Add(sheet.GetName());

                // "sheet count" column.
                item.SubItems.Add(sheet.GetCount().ToString());

                // "material name" column.
                item.SubItems.Add(sheet.GetMat().GetName());

                // hold the sheet ID.
                item.Tag = sheet.GetID();
            }

            /************************************************************************/
            // part group.

            NestPartListEx nestPartList = m_nestTask.GetNestPartList();

            // submitted part count.
            int iSubmitPartCount = 0;

            for (int i = 0; i < nestPartList.Size(); i++)
            {
                iSubmitPartCount += nestPartList.GetNestPartByIndex(i).GetNestCount();
            }
            subPartTextBox.Text = iSubmitPartCount.ToString();

            // the count of the nested parts.
            int iNestedPartCount = m_sheetList.GetPartInstTotalCount();

            nestPartTextBox.Text = iNestedPartCount.ToString();

            // display detailed info of each part.
            partListView.Items.Clear();
            for (int i = 0; i < nestPartList.Size(); i++)
            {
                NestPartEx nestPart = nestPartList.GetNestPartByIndex(i);
                PartEx     part     = nestPart.GetPart();

                // insert a row.
                int          iCount = partListView.Items.Count + 1;
                ListViewItem item   = partListView.Items.Add(iCount.ToString());

                // "name" column.
                item.SubItems.Add(part.GetName());

                // "submitted count" column.
                item.SubItems.Add(nestPart.GetNestCount().ToString());

                // "nested count" column.
                int iNestedCount = m_sheetList.GetPartInstCount(part.GetID());
                item.SubItems.Add(iNestedCount.ToString());
            }
            /************************************************************************/

            /************************************************************************/
            // material group.

            MatListEx matList = m_nestTask.GetMatList();

            // the utilization of material.
            double dUtilization = NestHelper.CalcMatUtil(m_sheetList, m_nestTask.GetNestParam());

            utilTextBox.Text = dUtilization.ToString("0.00");

            matListView.Items.Clear();
            for (int i = 0; i < matList.Size(); i++)
            {
                MatEx mat = matList.GetMatByIndex(i);

                // insert a row.
                int          iCount = matListView.Items.Count + 1;
                ListViewItem item   = matListView.Items.Add(iCount.ToString());

                // "name" column.
                item.SubItems.Add(mat.GetName());

                // "submitted count" column.
                item.SubItems.Add(mat.GetCount().ToString());

                // "consumed count" column.
                int iConsumedCount = m_sheetList.GetSheetCount(mat.GetID());
                item.SubItems.Add(iConsumedCount.ToString());
            }
            /************************************************************************/

            // preview the first sheet.
            if (shtListView.Items.Count > 0)
            {
                shtListView.Items[0].Selected = true;

                // get the select sheet.
                ListView.SelectedListViewItemCollection selItems = shtListView.SelectedItems;
                ListViewItem item          = selItems[0];
                long         iSheetID      = (long)item.Tag;
                SheetEx      selectedSheet = m_sheetList.GetSheetByID(iSheetID);

                // fit the window.
                DrawHelper.FitWindow(selectedSheet.GetMat().GetBoundaryRect(), m_shtViewPort, shtPreViewWnd);

                PreviewSheet();
            }

            m_bDisableEvent = false;
        }