コード例 #1
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
        public Ordinate SelectVertexDatumUp(ModelDoc2 swModel, double[] boundBox, BlockPosition left, bool clear = false)
        {
            var sizeX = boundBox[2] - boundBox[0];
            if (sizeX < 0)
                sizeX = -sizeX;
            var sizeY = boundBox[3] - boundBox[1];
            if (sizeY < 0)
                sizeY = -sizeY;
            var etalon = sizeX > sizeY ? sizeY : sizeX;
            double step = etalon / 40;

            var ordinate = new Ordinate(0, 0);
            if (left.AsBoolean())
            {
                for (int iX = 0; iX <= 30; iX++)
                {
                    for (int iY = 0; iY <= 30; iY++)
                    {
                        var boolstatus = swModel.Extension.SelectByID2("", "VERTEX", boundBox[0] + step * iX,
                                                                       boundBox[3] - step * iY, 0.0, true,
                                                                       (int)
                                                                       swAutodimMark_e.swAutodimMarkOriginDatum,
                                                                       null, 0);
                        if (boolstatus)
                        {
                            ordinate.X = boundBox[0] + step * iX;
                            ordinate.Y = boundBox[3] - step * iY;
                            if (clear)
                                swModel.ClearSelection();
                            return ordinate;
                        }
                    }
                }
            }
            else
            {
                for (int iX = 0; iX <= 30; iX++)
                {
                    for (int iY = 0; iY <= 30; iY++)
                    {
                        var boolstatus = swModel.Extension.SelectByID2("", "VERTEX", boundBox[2] - step * iX,
                                                                       boundBox[3] - step * iY, 0.0, true,
                                                                       (int)
                                                                       swAutodimMark_e.swAutodimMarkOriginDatum,
                                                                       null, 0);
                        if (boolstatus)
                        {
                            ordinate.X = boundBox[2] - step * iX;
                            ordinate.Y = boundBox[3] - step * iY;
                            if (clear)
                                swModel.ClearSelection();
                            return ordinate;
                        }
                    }
                }
            }
            if (clear)
                swModel.ClearSelection();
            return ordinate;
        }
コード例 #2
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
 public InsertDimension(ISldWorks swApp, Entity entity, Ordinate vertex, SelectData swSelData)
 {
     _swModel = swApp.IActiveDoc2;
     _ent = entity;
     _vertex = vertex;
     _swSelData = swSelData;
 }
コード例 #3
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
        public Ordinate GetVertexFromBlock(ModelDoc2 swModel, View drView, double vScaleRat, bool up)
        {
            Ordinate vertex = null;
            var objSketchBlockDef = swModel.SketchManager.GetSketchBlockDefinitions();
            if (objSketchBlockDef != null)
            {
                var objSketBlDefs = (object[]) objSketchBlockDef;
                foreach (var objSketBlDef in objSketBlDefs)
                {
                    var swSketBlDef = (SketchBlockDefinition) objSketBlDef;

                    //if ((Path.GetFileNameWithoutExtension(swSketBlDef.FileName) == ("DS" + drView.Name) && up) ||
                       //(Path.GetFileNameWithoutExtension(swSketBlDef.FileName) == ("DE" + drView.Name) && !up))
                    {
                        var objSketBlInsts = (object[]) swSketBlDef.GetInstances();
                        if (objSketBlInsts != null)
                            foreach (var objSketBlInst in objSketBlInsts)
                            {
                                var swSketBlInst = (SketchBlockInstance) objSketBlInst;

                                if ((swSketBlInst.Name.Contains("DS" + drView.Name) && up) ||
                                    (swSketBlInst.Name.Contains("DE" + drView.Name) && !up))
                                {
                                    var pos = (double[]) drView.Position;
                                    var point = swSketBlInst.InstancePosition;
                                    var dims = (double[]) point.ArrayData;
                                    double y = dims[1]/vScaleRat;
                                    double x = dims[0]/vScaleRat;
                                    x = pos[0] + x;
                                    y = pos[1] + y;
                                    vertex = new Ordinate(x, y);
                                }
                            }
                    }

                }
            }
            return vertex;
        }
コード例 #4
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
 public bool SelectVertexDatum(ModelDoc2 swModel,Ordinate vertex)
 {
     return swModel.Extension.SelectByID2("", "VERTEX", vertex.X, vertex.Y, 0, true,
                                   (int)swAutodimMark_e.swAutodimMarkOriginDatum, null, 0);
 }
コード例 #5
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
        private Ordinate SetManualDiametrAndDepth(double diam, double depth, bool type)
        {
            var diamAndDepth = new Ordinate(diam, depth);
            if (type)
            {
                if (diam == 8 && depth == 0)
                {
                    diamAndDepth.X = 8;
                    diamAndDepth.Y = GetDepthFor(8);
                    return diamAndDepth;
                }
                if (diam == 11 && depth == 0)
                {
                    diamAndDepth.Y = 32;
                    return diamAndDepth;
                }
            }
            else
            {
                if (diam == 8 && (depth == 12.5 || depth == 13))
                {
                    diamAndDepth.X = 8;
                    diamAndDepth.Y = 12;
                    return diamAndDepth;
                }
                if ((diam == 5) && ((depth == 6.1) || (depth == 1.6) || (depth == 12.5) || (depth == 13)))
                {
                    diamAndDepth.X = 5;
                    diamAndDepth.Y = 12;
                    return diamAndDepth;
                }

                if (diam == 20 && depth == 0)
                {
                    diamAndDepth.X = 20;
                    diamAndDepth.Y = GetDepthFor(20);
                    return diamAndDepth;
                }
                if (diam == 15.11)
                {
                    diamAndDepth.X = 8;
                    return diamAndDepth;
                }
                if (diam == 25 && depth == 0)
                {
                    diamAndDepth.Y = 27;
                    return diamAndDepth;
                }
                if (diam ==57 && depth == 0)
                {
                    depth = 16;
                    diamAndDepth.X = 57;
                    diamAndDepth.Y = 16;
                }

            }
            return diamAndDepth;
        }
コード例 #6
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
        public double[] GetDimensionLineDirect(ModelDoc2 swModel, double[] boundBox, bool vertic,BlockPosition side, out double d, out Annotation annotation,out bool? blockSize,out Ordinate vertex,out Ordinate vertexS,  double[] dsDim,double[] deDim,double[] endDim,string dsName,string deName)
        {
            blockSize = null;
            var swDrawing = (DrawingDoc) swModel;
            var drView = swDrawing.IActiveDrawingView;
            var scale = (double[]) drView.ScaleRatio;
            double vScaleRat = scale[1];
            double[] doubles = null;
            d = 0;
            annotation = null;

            vertex = GetVertexFromBlock(swModel, drView, vScaleRat,true);
            if(!(vertex!=null && SelectVertexDatum(swModel, vertex)))
                vertex = SelectVertexDatumUp(swModel, boundBox, side);

            if (dsDim != null && deDim != null)
            {
                vertexS = GetVertexFromBlock(swModel, drView, vScaleRat, false);
                //swModel.ClearSelection2(true);

                swDrawing.ActivateView(drView.Name);
                bool tmp = swModel.Extension.SelectByID2(@"Точка вставки/" + dsName, "SKETCHPOINT", 0, 0, 0, false, 0, null, 0);
                tmp = swModel.Extension.SelectByID2(@"Точка вставки/" + deName, "SKETCHPOINT", 0, 0, 0, true, 0, null, 0);
                DisplayDimension dim1;
                if (vertic)
                     dim1 = swModel.AddVerticalDimension2(0, 0, 0);
                else
                     dim1 = swModel.AddHorizontalDimension2(0, 0, 0);

                dim1.GetDimension().DrivenState = (int)swDimensionDrivenState_e.swDimensionDriven;
                d = dim1.GetDimension().Value;
                if (vertic)
                {
                    doubles = new double[3] { 1, 0, 0 };
                }
                else
                {
                    doubles = new double[3] {0, 1, 0};
                }
                annotation = dim1.GetAnnotation();
            }
            else
            {

                if (vertic)
                {
                    vertexS = GetVertexFromBlock(swModel, drView, vScaleRat, false);
                    if (!(vertexS != null && SelectVertexDatum(swModel, vertexS)))
                        SelectVertexDatumDown(swModel, boundBox, side);
                    else if (vertex != null)
                        blockSize = vertex.X < vertexS.X;

                    DisplayDimension dim = null;

                    dim = swModel.IAddVerticalDimension2(0, 0, 0);

                    if (dim != null)
                    {
                        d = dim.IGetDimension().Value;
                        doubles = (double[]) dim.IGetDimension().DimensionLineDirection.ArrayData;
                        if (blockSize != null)
                        {
                            vertexS.Y = vertexS.Y + (d/1000)/vScaleRat;
                        }

                        annotation = dim.IGetAnnotation();
                    }
                }
                else
                {
                    vertexS = GetVertexFromBlock(swModel, drView, vScaleRat, false);
                    if (!(vertexS != null && SelectVertexDatum(swModel, vertexS)))
                    {
                        vertexS = SelectVertexDatumUp(swModel, boundBox, side.Not());
                    }
                    else if (vertex != null)
                        blockSize = vertex.X < vertexS.X;

                    var dim = swModel.AddHorizontalDimension2(0, 0, 0);

                    if (dim != null)
                    {
                        d = dim.GetDimension().Value;
                        doubles = (double[]) dim.GetDimension().DimensionLineDirection.ArrayData;
                        annotation = dim.GetAnnotation();

                    }
                }
            }
            swModel.ClearSelection();
            return doubles;
        }
コード例 #7
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
 public FoundCoordinate(ISldWorks swApp, Entity ent, Ordinate vertex, double[] dimLineH, double[] dimLineV, BlockPosition side,View swView,bool doThroughHoles)
 {
     _swApp = swApp;
     _swModel = swApp.IActiveDoc2;
     _side = side;
     _ent = ent;
     _vertex = vertex;
     _doThroughHoles = doThroughHoles;
     _swSelData = _swModel.ISelectionManager.CreateSelectData();
     _swView = swView;
     _coordinate = FindCoord(dimLineH, dimLineV);
 }
コード例 #8
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
        private static double SetPositionHole(Annotation annotation, DisplayDimension displayDimension,
            Ordinate vertex, double x, double vScale, double[] boundBox, int numbers, string type, int posNumb, bool side)
        {
            string newstring;
            if (type.Contains("8.11h"))
                newstring = Convert.ToString(numbers + " отв. " + "<MOD-DIAM>" + "8" +
                                             type.Substring(type.IndexOf('h')));
            else
            {
                if (type.Contains("7,33"))
                    newstring = Convert.ToString(numbers + " отв. по схеме A25SK");
                else
                    newstring = Convert.ToString(numbers + " отв. " + "<MOD-DIAM>" + type);
                if (type.Contains("накернить"))
                    newstring = Convert.ToString(numbers + " отв. накернить");
            }
            displayDimension.SetText((int)swDimensionTextParts_e.swDimensionTextAll, newstring);
            if (side)
                annotation.SetPosition(vertex.X + x / 1000 / vScale, boundBox[1] - 0.004 * posNumb, 0);
            else
                annotation.SetPosition(vertex.X - x / 1000 / vScale, boundBox[1] - 0.004 * posNumb, 0);

            int textCount = newstring.Length;
            return (((double[])annotation.GetPosition())[0] + textCount * 0.001);
        }
コード例 #9
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
        private static void SetPosition(Dictionary<double, Annotation> dictionary, Ordinate vertex, double vScale, bool xOrY, BlockPosition side)
        {
            var x = dictionary.OrderBy(z => z.Key);
            int k = 1;
            foreach (var keyValuePair in x)
            {
                if (keyValuePair.Value != null)
                {
                    switch (side)
                    {
                        case BlockPosition.LeftTopToRightBottom:
                            {
                                if (xOrY)
                                {
                                    if (keyValuePair.Key > 100)
                                        keyValuePair.Value.SetPosition(vertex.X + keyValuePair.Key / 2000 / vScale,
                                                                   vertex.Y + 0.004 * k, 0);
                                    else
                                        keyValuePair.Value.SetPosition(vertex.X + keyValuePair.Key / 1000 / vScale + 0.006,
                                                                   vertex.Y + 0.004 * k, 0);
                                }
                                else
                                {
                                    if (keyValuePair.Key > 100)
                                        keyValuePair.Value.SetPosition(vertex.X - 0.004 * k,
                                                                   vertex.Y - keyValuePair.Key / 2000 / vScale, 0);
                                    else
                                        keyValuePair.Value.SetPosition(vertex.X - 0.004 * k,
                                                                   vertex.Y - keyValuePair.Key / 1000 / vScale - 0.006, 0);
                                }
                            }
                        break;
                        case BlockPosition.RightTopToLeftBottom:
                            {
                                if (xOrY)
                                {
                                    if (keyValuePair.Key > 100)
                                        keyValuePair.Value.SetPosition(vertex.X - keyValuePair.Key / 2000 / vScale,
                                                                   vertex.Y + 0.004 * k, 0);
                                    else
                                        keyValuePair.Value.SetPosition(vertex.X - keyValuePair.Key / 1000 / vScale - 0.006,
                                                                   vertex.Y + 0.004 * k, 0);
                                }
                                else
                                {
                                    var tt1 = vertex.Y - keyValuePair.Key/2000/vScale;
                                    var tt2 = vertex.Y - keyValuePair.Key/1000/vScale - 0.006;

                                    if (keyValuePair.Key > 100)
                                        keyValuePair.Value.SetPosition(vertex.X + 0.004 * k,
                                                                   tt1, 0);
                                    else
                                        keyValuePair.Value.SetPosition(vertex.X + 0.004 * k,
                                                                   tt2, 0);
                                }
                            }
                        break;
                        case BlockPosition.LeftBottomToRightTop:
                            {
                                if (xOrY)
                                {
                                    if (keyValuePair.Key > 100)
                                        keyValuePair.Value.SetPosition(vertex.X + keyValuePair.Key / 2000 / vScale,
                                                                   vertex.Y - 0.004 * k, 0);
                                    else
                                        keyValuePair.Value.SetPosition(vertex.X + keyValuePair.Key / 1000 / vScale + 0.006,
                                                                   vertex.Y - 0.004 * k, 0);
                                }
                                else
                                {
                                    if (keyValuePair.Key > 100)
                                        keyValuePair.Value.SetPosition(vertex.X - 0.004 * k,
                                                                   vertex.Y + keyValuePair.Key / 2000 / vScale, 0);
                                    else
                                        keyValuePair.Value.SetPosition(vertex.X - 0.004 * k,
                                                                   vertex.Y + keyValuePair.Key / 1000 / vScale - 0.006, 0);
                                }
                            }
                            break;
                        case BlockPosition.RigthBottomToLeftTop:
                            {
                                if (xOrY)
                                {
                                    if (keyValuePair.Key > 100)
                                        keyValuePair.Value.SetPosition(vertex.X - keyValuePair.Key / 2000 / vScale,
                                                                   vertex.Y - 0.004 * k, 0);
                                    else
                                        keyValuePair.Value.SetPosition(vertex.X - keyValuePair.Key / 1000 / vScale + 0.006,
                                                                   vertex.Y - 0.004 * k, 0);
                                }
                                else
                                {
                                    if (keyValuePair.Key > 100)
                                        keyValuePair.Value.SetPosition(vertex.X + 0.004 * k,
                                                                   vertex.Y + keyValuePair.Key / 2000 / vScale, 0);
                                    else
                                        keyValuePair.Value.SetPosition(vertex.X + 0.004 * k,
                                                                   vertex.Y + keyValuePair.Key / 1000 / vScale - 0.006, 0);
                                }
                            }
                            break;
                    }
                    k++;
                }
            }
        }
コード例 #10
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
        private static Common AnalizViewCoefficient(ModelDoc2 swModel, double[] boundBox,ref BlockPosition side, out double[] dimLinDirH, out double[] dimLinDirV, out bool? blockSize,out Ordinate vertex,out Ordinate vertexS,double[] dsDim,double[] deDim,double[] endDim,string dsName,string deName)
        {
            double x, y;
            Annotation annX, annY;
            using (var a = new GetDimensions())
            {
                bool consider;

                var tmpSide = GetDimensions.GetBlockPosition(swModel, out consider);//a.GetBlockPosition(swModel,out consider);
                if (consider) // consider -принимать ли в расчет tmpSide
                    side = tmpSide;
                dimLinDirH = a.GetDimensionLineDirect(swModel, boundBox, false, side, out x, out annX, out blockSize,out vertex,out vertexS,dsDim,deDim,endDim,dsName,deName);
            }
            using (var a = new GetDimensions())
            {
                Ordinate vert, verts;
                dimLinDirV = a.GetDimensionLineDirect(swModel, boundBox, true, side, out y, out annY, out blockSize, out vert, out verts, dsDim, deDim, endDim, dsName, deName);
                if (verts != null)
                    vertexS = verts;
            }
            return new Common(new Coord(new CoordX(x, annX), new CoordY(y, annY)), null);
        }
コード例 #11
0
ファイル: DimensionDraft.cs プロジェクト: digger1985/MyCode
 public Common2(Ordinate inOrdinate, Entity inEntity)
 {
     Ordinate = inOrdinate;
     Entity = inEntity;
 }