Beispiel #1
0
    private PrimitiveArea CalTrackArea(IPCB_Track PcbTrack)
    {
        PrimitiveArea TrackArea = new PrimitiveArea();
        int           x1        = Math.Min(PcbTrack.GetState_X1(), PcbTrack.GetState_X2());
        int           x2        = Math.Max(PcbTrack.GetState_X1(), PcbTrack.GetState_X2());
        int           y1        = Math.Min(PcbTrack.GetState_Y1(), PcbTrack.GetState_Y2());
        int           y2        = Math.Max(PcbTrack.GetState_Y1(), PcbTrack.GetState_Y2());

        TrackArea.BottomLeft.X  = x1;
        TrackArea.BottomLeft.Y  = y1;
        TrackArea.BottomRight.X = x2;
        TrackArea.BottomRight.Y = y1;
        TrackArea.TopLeft.X     = x1;
        TrackArea.TopLeft.Y     = y2;
        TrackArea.TopRight.X    = x2;
        TrackArea.TopRight.Y    = y2;

        return(TrackArea);
    }
Beispiel #2
0
    public void GetInitialParts()
    {
        try
        {
            SelectedSourceRef     = new List <string>();
            selectedSourceObjects = new clsSelectedObjects();
            Source = new clsOutput();

            IPCB_BoardIterator BoardIterator;

            IPCB_Primitive Primitive;

            IPCB_Board Board = Util.GetCurrentPCB();

            if (Board == null)
            {
                return;
            }

            //Iterate theough all components on the board.
            BoardIterator = Board.BoardIterator_Create();
            PCB.TObjectSet FilterSet = new PCB.TObjectSet();
            BoardIterator.AddFilter_ObjectSet(Util.PCBAllObject);
            BoardIterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); //Filter all layers.
            BoardIterator.AddFilter_Method(TIterationMethod.eProcessAll);

            Primitive = BoardIterator.FirstPCBObject();

            while (Primitive != null)
            {
                if (Primitive.GetState_Selected())
                {
                    switch (Primitive.GetState_ObjectID())
                    {
                    case TObjectId.eArcObject:
                        IPCB_Arc arcObject = Primitive as IPCB_Arc;
                        selectedSourceObjects.arcObjects.Add(arcObject);
                        clsOutput.st_IPCB_Arc newArc = new clsOutput.st_IPCB_Arc();

                        newArc.StartX     = arcObject.GetState_StartX();
                        newArc.StartY     = arcObject.GetState_StartY();
                        newArc.EndX       = arcObject.GetState_EndX();
                        newArc.EndY       = arcObject.GetState_EndY();
                        newArc.StartAngle = arcObject.GetState_StartAngle();
                        newArc.EndAngle   = arcObject.GetState_EndAngle();
                        newArc.CenterX    = arcObject.GetState_CenterX();
                        newArc.CenterY    = arcObject.GetState_CenterY();

                        newArc.KeepOut = arcObject.GetState_IsKeepout();

                        newArc.LineWidth = arcObject.GetState_LineWidth();

                        if (arcObject.GetState_Net() != null)
                        {
                            newArc.Net = arcObject.GetState_Net().GetState_Name();
                        }
                        else
                        {
                            newArc.Net = null;
                        }

                        newArc.PasteMaskExpansion  = arcObject.GetState_PasteMaskExpansion();
                        newArc.Radius              = arcObject.GetState_Radius();
                        newArc.SolderMaskExpansion = arcObject.GetState_SolderMaskExpansion();
                        newArc.Layer = Util.GetLayerName(arcObject.GetState_Board(), arcObject.GetState_V7Layer());

                        Source.Arcs.Add(newArc);

                        System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                        break;

                    case TObjectId.ePadObject:
                        IPCB_Pad padObject = Primitive as IPCB_Pad;
                        selectedSourceObjects.padObjects.Add(padObject);
                        System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                        break;

                    case TObjectId.eViaObject:
                        System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                        IPCB_Via ViaObject = Primitive as IPCB_Via;

                        clsOutput.st_IPCB_Via newVia = new clsOutput.st_IPCB_Via();
                        string test = "";
                        ViaObject.Export_ToParameters(ref test);

                        newVia.HoleSize           = ViaObject.GetState_HoleSize();
                        newVia.IsTestPoint_Bottom = ViaObject.GetState_IsTestPoint_Bottom();
                        newVia.IsTestPoint_Top    = ViaObject.GetState_IsTestPoint_Top();
                        newVia.IsTenting          = ViaObject.GetState_IsTenting();
                        newVia.IsTenting_Bottom   = ViaObject.GetState_IsTenting_Bottom();
                        newVia.IsTenting_Top      = ViaObject.GetState_IsTenting_Top();
                        //ViaObject.GetState_Layer(); ViaObject.GetState_V7Layer();
                        newVia.Net  = ViaObject.GetState_Net().GetState_Name();
                        newVia.Size = ViaObject.GetState_Size();
                        newVia.SolderMaskExpansion = ViaObject.GetState_SolderMaskExpansion();
                        newVia.HighLayer           = Util.GetLayerName(ViaObject.GetState_Board(), ViaObject.GetState_HighLayer());
                        newVia.LowLayer            = Util.GetLayerName(ViaObject.GetState_Board(), ViaObject.GetState_LowLayer());
                        newVia.TearDrop            = ViaObject.GetState_TearDrop();
                        newVia.XLocation           = ViaObject.GetState_XLocation();
                        newVia.YLocation           = ViaObject.GetState_YLocation();

                        Source.Vias.Add(newVia);

                        selectedSourceObjects.ViaObjects.Add(ViaObject);
                        break;

                    case TObjectId.eTrackObject:
                        IPCB_Track trackObject = Primitive as IPCB_Track;
                        System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                        selectedSourceObjects.trackObjects.Add(trackObject);

                        clsOutput.st_IPCB_Track newTrack = new clsOutput.st_IPCB_Track();

                        newTrack.X1    = trackObject.GetState_X1();
                        newTrack.X2    = trackObject.GetState_X2();
                        newTrack.Y1    = trackObject.GetState_Y1();
                        newTrack.Y2    = trackObject.GetState_Y2();
                        newTrack.Width = trackObject.GetState_Width();
                        newTrack.Layer = Util.GetLayerName(trackObject.GetState_Board(), trackObject.GetState_V7Layer());

                        if (trackObject.GetState_Net() == null)
                        {
                            newTrack.Net = null;
                        }
                        else
                        {
                            newTrack.Net = trackObject.GetState_Net().GetState_Name();
                        }

                        newTrack.Keepout = trackObject.GetState_IsKeepout();

                        Source.Tracks.Add(newTrack);

                        break;

                    case TObjectId.eTextObject:
                        IPCB_Text textObject = Primitive as IPCB_Text;
                        selectedSourceObjects.textObjects.Add(textObject);
                        System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                        break;

                    case TObjectId.eFillObject:
                        IPCB_Fill fillObject = Primitive as IPCB_Fill;
                        selectedSourceObjects.fillObjects.Add(fillObject);

                        clsOutput.st_IPCB_Fill newFill = new clsOutput.st_IPCB_Fill();

                        newFill.Length    = fillObject.GetState_Length();
                        newFill.LocationX = fillObject.GetState_LocationX();
                        newFill.LocationY = fillObject.GetState_LocationY();
                        if (fillObject.GetState_Net() != null)
                        {
                            newFill.Net = fillObject.GetState_Net().GetState_Name();
                        }
                        newFill.PasteMaskExpansion = fillObject.GetState_PasteMaskExpansion();
                        if (fillObject.GetState_Polygon() != null)
                        {
                            MessageBox.Show("Polygon error. Please fix.");
                        }
                        //fillObject.GetState_Polygon(); //convert to something
                        newFill.Rotation            = fillObject.GetState_Rotation();
                        newFill.SolderMaskExpansion = fillObject.GetState_SolderMaskExpansion();
                        newFill.Layer      = Util.GetLayerName(fillObject.GetState_Board(), fillObject.GetState_V7Layer());
                        newFill.Width      = fillObject.GetState_Width();
                        newFill.X1Location = fillObject.GetState_X1Location();
                        newFill.X2Location = fillObject.GetState_X2Location();
                        newFill.XLocation  = fillObject.GetState_XLocation();
                        newFill.Y1Location = fillObject.GetState_Y1Location();
                        newFill.Y2Location = fillObject.GetState_Y2Location();
                        newFill.YLocation  = fillObject.GetState_YLocation();
                        newFill.Keepout    = fillObject.GetState_IsKeepout();

                        Source.Fills.Add(newFill);

                        System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                        break;

                    //case TObjectId.eConnectionObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eNetObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    case TObjectId.eComponentObject:
                        IPCB_Component componentObject = Primitive as IPCB_Component;
                        selectedSourceObjects.componentObjects.Add(componentObject);

                        clsOutput.st_IPCB_Component newComp = new clsOutput.st_IPCB_Component();

                        IPCB_GroupIterator compIterator = componentObject.GroupIterator_Create();

                        PCB.TObjectSet compFilterset = new PCB.TObjectSet();
                        compFilterset.Add(TObjectId.ePadObject);
                        compIterator.AddFilter_ObjectSet(compFilterset);
                        compIterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet);     //Filter all layers.

                        IPCB_Pad pad      = compIterator.FirstPCBObject() as IPCB_Pad;
                        int      pinCount = 0;
                        newComp.Nets = new SerializableDictionary <string, string>();
                        while (pad != null)
                        {
                            if (pad.GetState_Net() != null)
                            {
                                if (!newComp.Nets.ContainsKey(pad.GetState_Name()))
                                {
                                    newComp.Nets.Add(pad.GetState_Name(), pad.GetState_Net().GetState_Name());
                                }
                            }

                            pinCount++;
                            pad = compIterator.NextPCBObject() as IPCB_Pad;
                        }

                        componentObject.GroupIterator_Destroy(ref compIterator);


                        newComp.Parameters = new SerializableDictionary <string, string>();

                        IPCB_PrimitiveParameters componentParameters = componentObject as IPCB_PrimitiveParameters;
                        for (int i = 0; i < componentParameters.Count(); i++)
                        {
                            IPCB_Parameter parameter = componentParameters.GetParameterByIndex(i);
                            newComp.Parameters.Add(parameter.GetName(), parameter.GetValue());
                        }


                        newComp.RefDes    = componentObject.GetState_Name().GetState_Text();
                        newComp.Footprint = componentObject.GetState_Pattern();
                        newComp.PinCount  = pinCount;

                        Source.Components.Add(newComp.RefDes, newComp);

                        SelectedSourceRef.Add(newComp.RefDes);

                        //?componentObject.GetState_DescriptorString()
                        //"SOIC Component U5FM-QT#94L9#-20.000MHz (5528.098mil,6358.425mil) on Top Layer"
                        //? componentObject.GetState_DetailString()
                        //"Component U5FM Comment:QT#94L9#-20.000MHz Footprint: QT194"
                        //?componentObject.GetState_Layer()
                        //componentObject.GetState_Pattern() Footprint
                        //componentObject.GetState_SourceDesignator() Refdes
                        //componentObject.GetState_SourceFootprintLibrary() library
                        //componentObject.GetState_SourceLibReference() corp number
                        //componentObject.GetState_XLocation()
                        //componentObject.GetState_YLocation()
                        System.Diagnostics.Debug.WriteLine(componentObject.GetState_DescriptorString());
                        break;

                    case TObjectId.ePolyObject:
                        IPCB_Polygon polygonObject = Primitive as IPCB_Polygon;
                        selectedSourceObjects.polygonObjects.Add(polygonObject);

                        clsOutput.st_IPCB_Polygon newPoly = new clsOutput.st_IPCB_Polygon();

                        //polygonObject.GetState_BorderWidth();
                        //polygonObject.GetState_Coordinate();
                        newPoly.Keepout      = polygonObject.GetState_IsKeepout();
                        newPoly.Layer        = Util.GetLayerName(polygonObject.GetState_Board(), polygonObject.GetState_V7Layer());
                        newPoly.MitreCorners = polygonObject.GetState_MitreCorners();

                        if (polygonObject.GetState_Net() != null)
                        {
                            newPoly.Net = polygonObject.GetState_Net().GetState_Name();
                        }

                        newPoly.PasteMaskExpansion = polygonObject.GetState_PasteMaskExpansion();

                        if (polygonObject.GetState_Polygon() != null)
                        {
                            MessageBox.Show("Polygon error. Please fix.");
                        }

                        newPoly.PolySegments = new List <SPolySegment>();
                        for (int i = 0; i < polygonObject.GetState_PointCount(); i++)
                        {
                            newPoly.PolySegments.Add(polygonObject.GetState_Segments(i).Data);
                        }

                        newPoly.SolderMaskExpansion = polygonObject.GetState_SolderMaskExpansion();
                        newPoly.TrackSize           = polygonObject.GetState_TrackSize();//???
                        newPoly.XLocation           = polygonObject.GetState_XLocation();
                        newPoly.YLocation           = polygonObject.GetState_YLocation();
                        newPoly.PolyType            = polygonObject.GetState_PolygonType();

                        Source.Polygons.Add(newPoly);
                        System.Diagnostics.Debug.WriteLine(polygonObject.GetState_DescriptorString());
                        break;

                    case TObjectId.eRegionObject:

                        IPCB_Region regionObject = Primitive as IPCB_Region;
                        selectedSourceObjects.regionObjects.Add(regionObject);

                        clsOutput.st_IPCB_Region newRegion = new clsOutput.st_IPCB_Region();

                        if (regionObject.GetHoleCount() > 0)
                        {
                            MessageBox.Show("Region issue");
                        }


                        newRegion.Keepout    = regionObject.GetState_IsKeepout();
                        newRegion.RegionKind = regionObject.GetState_Kind();
                        newRegion.Layer      = Util.GetLayerName(regionObject.GetState_Board(), regionObject.GetState_V7Layer());
                        if (regionObject.GetState_Net() != null)
                        {
                            newRegion.Net = regionObject.GetState_Net().GetState_Name();
                        }
                        newRegion.PasteMaskExpansion  = regionObject.GetState_PasteMaskExpansion();
                        newRegion.SolderMaskExpansion = regionObject.GetState_SolderMaskExpansion();

                        List <clsOutput.st_Contour> Contours;

                        newRegion.GeometricPolygons = new List <List <clsOutput.st_Contour> >();

                        for (int i = 0; i < regionObject.GetGeometricPolygon().GetState_Count(); i++)
                        {
                            Contours = new List <clsOutput.st_Contour>();
                            for (int j = 0; j < regionObject.GetGeometricPolygon().GetState_Contour(i).GetState_Count(); j++)
                            {
                                Contours.Add(new clsOutput.st_Contour()
                                {
                                    X = regionObject.GetGeometricPolygon().GetState_Contour(i).GetState_PointX(j),
                                    Y = regionObject.GetGeometricPolygon().GetState_Contour(i).GetState_PointY(j)
                                });
                            }
                            newRegion.GeometricPolygons.Add(Contours);
                        }

                        //?regionObject.GetGeometricPolygon().GetState_Count()
                        //?regionObject.GetGeometricPolygon().GetState_Contour(0)

                        //?regionObject.GetGeometricPolygon().GetState_Contour(0).GetState_Count()
                        //?regionObject.GetGeometricPolygon().GetState_Contour(0).GetState_PointY(0)
                        //?regionObject.GetGeometricPolygon().GetState_Contour(0).GetState_PointX(0)

                        Source.Regions.Add(newRegion);

                        System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());

                        break;

                    //case TObjectId.eComponentBodyObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eDimensionObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eCoordinateObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eClassObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eRuleObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eFromToObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eDifferentialPairObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eViolationObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eEmbeddedObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eEmbeddedBoardObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eSplitPlaneObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eTraceObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eSpareViaObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eBoardObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    //case TObjectId.eBoardOutlineObject:
                    //    System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                    //    break;
                    default:
                        selectedSourceObjects.primitiveObjects.Add(Primitive);
                        System.Diagnostics.Debug.WriteLine(Primitive.GetState_DescriptorString());
                        break;
                    }


                    //Primitive.Export_ToParameters(ref RefDes);
                }
                Primitive = BoardIterator.NextPCBObject();
            }
            //Iterator clean-up
            Board.BoardIterator_Destroy(ref BoardIterator);

            //clsOutput outputb;
            //outputb = new clsOutput();
            //XmlSerialization.WriteToXmlFile<clsOutput>(@"S:\Dropbox\Altium Extensions\test.xml", Output);

            //outputb = XmlSerialization.ReadFromXmlFile<clsOutput>(@"S:\Dropbox\Altium Extensions\test.xml");
            //@"S:\Dropbox\Altium Extensions\test.xml"
            //"C:\\Users\\rlyne\\Dropbox\\Altium Extensions\\SwRI_Tools\\bin\\test.xml"
        }
        catch (Exception ex)
        {
            ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex);
            return;
        }
    }