Ejemplo n.º 1
0
        public static void DrawTopRFTLeftDims(DxfModel model, int nSpans, double[] comSpanVals)
        {
            //04.TopRFT Left Dims/*----------------*/
            DxfLayer TopRFTDimLayerLt = new DxfLayer("DIMENSIONSTopRFTLt");

            model.Layers.Add(TopRFTDimLayerLt);

            DxfBlock blockTopRFTDimLt = new DxfBlock("ALIGNED_DIMENSIONSTopRFTLt");

            model.Blocks.Add(blockTopRFTDimLt);

            DxfInsert insertTopRFTDimLt = new DxfInsert(blockTopRFTDimLt, new Point3D(0, DXFPoints.startPointsTop[0].Y + 0.15, 0));

            insertTopRFTDimLt.Layer = TopRFTDimLayerLt;
            model.Entities.Add(insertTopRFTDimLt);

            {
                DxfDimension.Aligned[] TopRFTDimArrLt = new DxfDimension.Aligned[nSpans + 1];

                for (int i = 1; i < TopRFTDimArrLt.Length - 2; i++)
                {
                    // Dimension with text aligned with dimension line.
                    DxfDimension.Aligned dimension = new DxfDimension.Aligned(model.CurrentDimensionStyle);
                    dimension.DimensionStyleOverrides.ArrowSize              = 0.2d;
                    dimension.DimensionStyleOverrides.TextInsideHorizontal   = false;
                    dimension.DimensionStyleOverrides.TextAboveDimensionLine = true;
                    dimension.Layer = TopRFTDimLayerLt;
                    dimension.DimensionLineLocation    = new Point3D(0, 0, 0);
                    dimension.ExtensionLine1StartPoint = new Point3D(DXFPoints.endPointsTop[i - 1].X - Math.Max(0.33 * DXFRebar.Ln[i - 1], 0.33 * DXFRebar.Ln[i]) - 0.25, 0, 0);
                    dimension.ExtensionLine2StartPoint = new Point3D(DXFPoints.endPointsTop[i - 1].X, 0, 0);
                    dimension.UseTextMiddlePoint       = true;
                    dimension.TextMiddlePoint          = new Point3D(comSpanVals[0] + 0.50 * (DXFPoints.endPointsTop[i - 1].X - Math.Max(0.33 * DXFRebar.Ln[i - 1], 0.33 * DXFRebar.Ln[i]) - 0.25 + DXFPoints.endPointsTop[i - 1].X), 0.2d, 0d);
                    blockTopRFTDimLt.Entities.Add(dimension);
                }
                //Case of Cantilever at end
                if (GeometryEditorVM.GeometryEditor.RestraintsCollection[RFTCanvas.SpanVals.Length].SelectedRestraint != Restraints.NoRestraints)
                {
                    // Dimension with text aligned with dimension line.
                    DxfDimension.Aligned dimension = new DxfDimension.Aligned(model.CurrentDimensionStyle);
                    dimension.DimensionStyleOverrides.ArrowSize              = 0.2d;
                    dimension.DimensionStyleOverrides.TextInsideHorizontal   = false;
                    dimension.DimensionStyleOverrides.TextAboveDimensionLine = true;
                    dimension.Layer = TopRFTDimLayerLt;
                    dimension.DimensionLineLocation    = new Point3D(0, 0, 0);
                    dimension.ExtensionLine1StartPoint = new Point3D(DXFPoints.endPointsTop[TopRFTDimArrLt.Length - 1 - 1].X - Math.Max(0.33 * DXFRebar.Ln[TopRFTDimArrLt.Length - 1 - 1], 0.33 * DXFRebar.Ln[TopRFTDimArrLt.Length - 1]) - 0.25, 0, 0);
                    dimension.ExtensionLine2StartPoint = new Point3D(DXFPoints.endPointsTop[TopRFTDimArrLt.Length - 1 - 1].X, 0, 0);
                    dimension.UseTextMiddlePoint       = true;
                    dimension.TextMiddlePoint          = new Point3D(comSpanVals[0] + 0.50 * (DXFPoints.endPointsTop[TopRFTDimArrLt.Length - 1 - 1].X - Math.Max(0.33 * DXFRebar.Ln[TopRFTDimArrLt.Length - 1 - 1], 0.33 * DXFRebar.Ln[TopRFTDimArrLt.Length - 1]) - 0.25 + DXFPoints.endPointsTop[TopRFTDimArrLt.Length - 1 - 1].X), 0.2d, 0d);
                    blockTopRFTDimLt.Entities.Add(dimension);
                }
            }
        }
Ejemplo n.º 2
0
 //画标注
 public static void writeDimension(DxfModel doc,DLocation firstDLocation,DLocation secondDLocation,double DxfTextHeight,double DxfTextWidth,double dimensionHeight,string dimensionDirection)
 {
     DxfDimension.Aligned dimension = new DxfDimension.Aligned(doc.DefaultDimensionStyle);
     dimension.ExtensionLine1StartPoint = new Point3D(firstDLocation.X, firstDLocation.Y, firstDLocation.Z);
     dimension.ExtensionLine2StartPoint = new Point3D(secondDLocation.X, secondDLocation.Y, secondDLocation.Z);
     if (dimensionDirection.Equals("top"))
         dimension.DimensionLineLocation = new Point3D((firstDLocation.X + secondDLocation.X) / 2, firstDLocation.Y + dimensionHeight, firstDLocation.Z);
     else if (dimensionDirection.Equals("bottom"))
         dimension.DimensionLineLocation = new Point3D((firstDLocation.X + secondDLocation.X) / 2, firstDLocation.Y - dimensionHeight, firstDLocation.Z);
     else if (dimensionDirection.Equals("left"))
         dimension.DimensionLineLocation = new Point3D(firstDLocation.X - dimensionHeight, (firstDLocation.Y + secondDLocation.Y) / 2, firstDLocation.Z);
     else if (dimensionDirection.Equals("right"))
         dimension.DimensionLineLocation = new Point3D(firstDLocation.X + dimensionHeight, (firstDLocation.Y + secondDLocation.Y) / 2, firstDLocation.Z);
     dimension.DimensionStyleOverrides.TextHeight = 1d;
     dimension.DimensionStyleOverrides.ArrowSize = 1d;
     dimension.Text = getDimensionText(dimension);
     doc.Entities.Add(dimension);
 }
Ejemplo n.º 3
0
        public static void DrawTopRFTRightDims(DxfModel model, int nSpans, double[] comSpanVals)
        {
            //03. TopRFT Right Dims/*----------------*/
            DxfLayer TopRFTDimLayerRt = new DxfLayer("DIMENSIONSTopRFTRt");

            model.Layers.Add(TopRFTDimLayerRt);

            DxfBlock blockTopRFTDimRt = new DxfBlock("ALIGNED_DIMENSIONSTopRFTRt");

            model.Blocks.Add(blockTopRFTDimRt);

            DxfInsert insertTopRFTDimRt = new DxfInsert(blockTopRFTDimRt, new Point3D(0, DXFPoints.startPointsTop[0].Y + 0.15, 0));

            insertTopRFTDimRt.Layer = TopRFTDimLayerRt;
            model.Entities.Add(insertTopRFTDimRt);

            {
                DxfDimension.Aligned[] TopRFTDimArrRt = new DxfDimension.Aligned[nSpans + 1];

                for (int i = 1; i < TopRFTDimArrRt.Length - 1; i++)
                {
                    // Dimension with text aligned with dimension line.
                    DxfDimension.Aligned dimension = new DxfDimension.Aligned(model.CurrentDimensionStyle);
                    dimension.DimensionStyleOverrides.ArrowSize              = 0.2d;
                    dimension.DimensionStyleOverrides.TextInsideHorizontal   = false;
                    dimension.DimensionStyleOverrides.TextAboveDimensionLine = true;
                    dimension.Layer = TopRFTDimLayerRt;
                    dimension.DimensionLineLocation    = new Point3D(0, 0, 0);
                    dimension.ExtensionLine1StartPoint = new Point3D(DXFPoints.startPointsTop[i].X, 0, 0);
                    dimension.ExtensionLine2StartPoint = new Point3D(DXFPoints.startPointsTop[i].X + Math.Max(0.33 * DXFRebar.Ln[i - 1], 0.33 * DXFRebar.Ln[i]) + 0.25, 0, 0);
                    dimension.UseTextMiddlePoint       = true;
                    dimension.TextMiddlePoint          = new Point3D(comSpanVals[0] + 0.50 * (DXFPoints.startPointsTop[i].X + DXFPoints.startPointsTop[i].X + Math.Max(0.33 * DXFRebar.Ln[i - 1], 0.33 * DXFRebar.Ln[i]) + 0.25), 0.2d, 0d);
                    blockTopRFTDimRt.Entities.Add(dimension);
                }
            }
        }
Ejemplo n.º 4
0
        public static void DrawLnetDims(DxfModel model, int nSpans, double[] comSpanVals)
        {
            //02. Ln Dims/*----------------*/
            DxfLayer lnspanLayer = new DxfLayer("DIMENSIONSLn");

            model.Layers.Add(lnspanLayer);

            DxfBlock blockLnSpan = new DxfBlock("ALIGNED_DIMENSIONSLn");

            model.Blocks.Add(blockLnSpan);

            DxfInsert insertLn = new DxfInsert(blockLnSpan, new Point3D(0, -0.5, 0));

            insertLn.Layer = lnspanLayer;
            model.Entities.Add(insertLn);

            {
                DxfDimension.Aligned[] LnDimArr = new DxfDimension.Aligned[nSpans];

                for (int i = 0; i < LnDimArr.Length; i++)
                {
                    // Dimension with text aligned with dimension line.
                    DxfDimension.Aligned dimension = new DxfDimension.Aligned(model.CurrentDimensionStyle);
                    dimension.DimensionStyleOverrides.ArrowSize              = 0.2d;
                    dimension.DimensionStyleOverrides.TextInsideHorizontal   = false;
                    dimension.DimensionStyleOverrides.TextAboveDimensionLine = true;
                    dimension.Layer = lnspanLayer;
                    dimension.DimensionLineLocation    = new Point3D(0, 0, 0);
                    dimension.ExtensionLine1StartPoint = new Point3D(DXFPoints.startPointsBot[i].X, 0, 0);
                    dimension.ExtensionLine2StartPoint = new Point3D(DXFPoints.endPointsBot[i].X, 0, 0);
                    dimension.UseTextMiddlePoint       = true;
                    dimension.TextMiddlePoint          = new Point3D(comSpanVals[0] + 0.50 * (comSpanVals[i] + comSpanVals[i + 1]), 0.2d, 0d);
                    blockLnSpan.Entities.Add(dimension);
                }
            }
        }
        public static void DrawTopRFTLeftDims(DxfModel model, int nSpans, double thickness, double[] Ln, Point2D[] endPointsTop, double[] comSpanVals)
        {
            //04.TopRFT Left Dims/*----------------*/
            DxfLayer TopRFTDimLayerLt = new DxfLayer("DIMENSIONSTopRFTLt");

            model.Layers.Add(TopRFTDimLayerLt);

            DxfBlock blockTopRFTDimLt = new DxfBlock("ALIGNED_DIMENSIONSTopRFTLt");

            model.Blocks.Add(blockTopRFTDimLt);

            DxfInsert insertTopRFTDimLt = new DxfInsert(blockTopRFTDimLt, new Point3D(0, thickness + 0.15, 0));

            insertTopRFTDimLt.Layer = TopRFTDimLayerLt;
            model.Entities.Add(insertTopRFTDimLt);

            {
                DxfDimension.Aligned[] TopRFTDimArrLt = new DxfDimension.Aligned[nSpans + 1];

                for (int i = 1; i < TopRFTDimArrLt.Length - 1; i++)
                {
                    // Dimension with text aligned with dimension line.
                    DxfDimension.Aligned dimension = new DxfDimension.Aligned(model.CurrentDimensionStyle);
                    dimension.DimensionStyleOverrides.ArrowSize              = 0.2d;
                    dimension.DimensionStyleOverrides.TextInsideHorizontal   = false;
                    dimension.DimensionStyleOverrides.TextAboveDimensionLine = true;
                    dimension.Layer = TopRFTDimLayerLt;
                    dimension.DimensionLineLocation    = new Point3D(0, 0, 0);
                    dimension.ExtensionLine1StartPoint = new Point3D(endPointsTop[i - 1].X - Math.Max(0.33 * Ln[i - 1], 0.33 * Ln[i]) - 0.25, 0, 0);
                    dimension.ExtensionLine2StartPoint = new Point3D(endPointsTop[i - 1].X, 0, 0);
                    dimension.UseTextMiddlePoint       = true;
                    dimension.TextMiddlePoint          = new Point3D(comSpanVals[0] + 0.50 * (endPointsTop[i - 1].X - Math.Max(0.33 * Ln[i - 1], 0.33 * Ln[i]) - 0.25 + endPointsTop[i - 1].X), 0.2d, 0d);
                    blockTopRFTDimLt.Entities.Add(dimension);
                }
            }
        }
Ejemplo n.º 6
0
 public void Visit(DxfDimension.Aligned dimension)
 {
     this.method_1((DxfDimension)dimension);
 }
Ejemplo n.º 7
0
 public virtual void Visit(DxfDimension.Aligned dimension)
 {
 }
Ejemplo n.º 8
0
        public static void puzzle(List<string> dxfFileNameList,List<string> dxfTopViewList,List<TextValue> valueList,string frameName)
        {
            DxfModel targetModel=new DxfModel();
            testModel = targetModel;
            targetModel.TextStyles.Add(textStyle);
            CloneContext cloneContext = new CloneContext(targetModel, ReferenceResolutionType.CloneMissing);
            for (int i = 0; i < dxfFileNameList.Count;i++ )
            {
                    DxfModel sourceModel = DxfReader.Read(dxfFileNameList[i]);
                    //第一个图形作为初始
                    if (i == 0)
                    {
                        //拼到一个图纸中后,Entity应该参照那个的左下角坐标
                        location = getRelativeStartLocation(sourceModel);
                        //源图纸中Entity的左下角坐标
                        relativeStartLocation = getRelativeStartLocation(sourceModel);
                        //保存第一个算好的左下角坐标
                        firstDimensionLocation = location;
                        foreach (DxfEntity entity in sourceModel.Entities)
                        {
                            DxfEntity clonedEntity = (DxfEntity)entity.Clone(cloneContext);
                            clonedEntity = getCaculateLocationEntity(clonedEntity, location, relativeStartLocation);
                            targetModel.Entities.Add(clonedEntity);
                        }
                        rightLocation = getNextStartLocation(positionList);
                        //记录最后一点坐标
                        lastDimensionLocation = rightLocation;
                        //清空坐标位置链表
                        positionList.RemoveAll(name => { return true;});

                        //花标注
                        DxfDimension.Aligned dxfDimension = new DxfDimension.Aligned(targetModel.DefaultDimensionStyle);
                        dxfDimension.ExtensionLine1StartPoint = new Point3D(location.X, location.Y, location.Z);
                        dxfDimension.ExtensionLine2StartPoint = new Point3D(rightLocation.X, rightLocation.Y, rightLocation.Z);
                        dxfDimension.DimensionStyleOverrides.TextHeight = 56d;
                        dxfDimension.DimensionStyleOverrides.ArrowSize = 56d;
                        dxfDimension.Text = getDimensionText(dxfDimension);
                        // dxfDimension.DimensionLineLocation = new Point3D((location.X+rightLocation.X)/2,location.Y-8,location.Z);
                        targetModel.Entities.Add(dxfDimension);
                    }
                    else
                    {
                        location = rightLocation;
                        relativeStartLocation = getRelativeStartLocation(sourceModel);
                        foreach (DxfEntity entity in sourceModel.Entities)
                        {
                            DxfEntity clonedEntity = (DxfEntity)entity.Clone(cloneContext);
                            clonedEntity = getCaculateLocationEntity(clonedEntity, location, relativeStartLocation);
                            targetModel.Entities.Add(clonedEntity);
                        }
                        rightLocation = getNextStartLocation(positionList);
                        lastDimensionLocation = rightLocation;
                        //计算最后一个元素右上角坐标
                        if (i == dxfFileNameList.Count - 1)
                        {
                            rightTopDimensionLocation = getRightTopLocation(positionList);
                            largestLocation = getLargestXLocation(positionList);
                        }

                        positionList.RemoveAll(name => { return true; });

                        //花标注
                        DxfDimension.Aligned dxfDimension = new DxfDimension.Aligned(targetModel.DefaultDimensionStyle);
                        dxfDimension.ExtensionLine1StartPoint = new Point3D(location.X, location.Y, location.Z);
                        dxfDimension.ExtensionLine2StartPoint = new Point3D(rightLocation.X, rightLocation.Y, rightLocation.Z);
                        dxfDimension.DimensionStyleOverrides.TextHeight = 56d;
                        dxfDimension.DimensionStyleOverrides.ArrowSize = 56d;
                        dxfDimension.Text = getDimensionText(dxfDimension);
                        targetModel.Entities.Add(dxfDimension);
                    }
            }

            DxfDimension.Aligned wholeDxfDimension = new DxfDimension.Aligned(targetModel.DefaultDimensionStyle);
            wholeDxfDimension.ExtensionLine1StartPoint = new Point3D(firstDimensionLocation.X, firstDimensionLocation.Y, firstDimensionLocation.Z);
            wholeDxfDimension.ExtensionLine2StartPoint = new Point3D(lastDimensionLocation.X, lastDimensionLocation.Y, lastDimensionLocation.Z);
            wholeDxfDimension.DimensionStyleOverrides.TextHeight = 56d;
            wholeDxfDimension.DimensionStyleOverrides.ArrowSize = 56d;
            wholeDxfDimension.Text = getDimensionText(wholeDxfDimension);
            wholeDxfDimension.DimensionLineLocation = new Point3D(firstDimensionLocation.X+lastDimensionLocation.X,firstDimensionLocation.Y-1000,firstDimensionLocation.Z);
            targetModel.Entities.Add(wholeDxfDimension);

            DxfDimension.Aligned rightDimension = new DxfDimension.Aligned(targetModel.DefaultDimensionStyle);
            rightDimension.ExtensionLine1StartPoint = new Point3D(lastDimensionLocation.X, lastDimensionLocation.Y, lastDimensionLocation.Z);
            rightDimension.ExtensionLine2StartPoint = new Point3D(rightTopDimensionLocation.X, rightTopDimensionLocation.Y, rightTopDimensionLocation.Z);
            rightDimension.DimensionStyleOverrides.TextHeight = 56d;
            rightDimension.DimensionStyleOverrides.ArrowSize = 56d;
            rightDimension.Text = getDimensionText(rightDimension);
            rightDimension.DimensionLineLocation = new Point3D(largestLocation.X + 200, firstDimensionLocation.Y, firstDimensionLocation.Z);
            targetModel.Entities.Add(rightDimension);

            //绘制俯视图
            for (int i = 0; i < dxfTopViewList.Count;i++ )
            {
                DxfModel topViewSourceModel = new DxfModel();
                topViewSourceModel = DxfReader.Read(dxfTopViewList[i]);
                if (i == 0)
                {
                    topViewLocation = new DLocation(firstDimensionLocation.X, rightTopDimensionLocation.Y + RelativeDistance.yTopViewDistance, firstDimensionLocation.Z);
                    topViewRelativeLocation = getTopViewRelativeStartLocation(topViewSourceModel);
                }
                else
                {
                    topViewLocation = topViewRightLocation;
                        DxfModel filterModel = getFilterBottomNotLineDxfModel(topViewSourceModel);
                        topViewRelativeLocation = getTopViewRelativeStartLocation(filterModel);

                }

                foreach(DxfEntity entity in topViewSourceModel.Entities)
                {
                    DxfEntity clonedEntity = (DxfEntity)entity.Clone(cloneContext);
                    clonedEntity = getCaculateLocationEntity(clonedEntity, topViewLocation, topViewRelativeLocation);
                    targetModel.Entities.Add(clonedEntity);
                }
                topViewRightLocation = getTopViewNextStartLocation(positionList);
                positionList.RemoveAll(name=>{return true;});
            }

            // 复制frame框体
            DxfModel sourceFrameModel = new DxfModel();
            sourceFrameModel = DxfReader.Read(frameName);
            DLocation frameLeftDownLocation = getFrameLeftDownLocation(sourceFrameModel);
            frameLastLineX = getFrameLastVerticalLineX(sourceFrameModel);
            Point2D frameRightPoint2D = getFrameRightPoint(sourceFrameModel);
            //这里求的是宽度比较,因为Frame的最后位置还没确定,不能单纯的考个别点进行位置大小比较
            if ((largestLocation.X-firstDimensionLocation.X+RelativeDistance.xDistance)>= (frameRightPoint2D.X-frameLeftDownLocation.X))
            {
                RelativeDistance.increaseWidth = (largestLocation.X - firstDimensionLocation.X + RelativeDistance.xDistance) - (frameRightPoint2D.X - frameLeftDownLocation.X) + RelativeDistance.xDistance;
            }
            else
            {
                RelativeDistance.increaseWidth = 0;
            }
            foreach (DxfEntity entity in sourceFrameModel.Entities)
            {
                DxfEntity clonedEntity = (DxfEntity)entity.Clone(cloneContext);
                clonedEntity = getFrameEntity(clonedEntity, firstDimensionLocation, frameLeftDownLocation, RelativeDistance.increaseWidth);
                targetModel.Entities.Add(clonedEntity);
            }

            //传递表单数据值
            foreach(TextValue textValue in textValueList){
                foreach(TextValue transFormValue in valueList){
                    if (textValue.text.Equals(transFormValue.text))
                    {
                        DxfText dxfText = new DxfText();
                        dxfText.Text = transFormValue.value;
                        dxfText.Height = textValue.height;
                        dxfText.Thickness = 0.5d;
                        dxfText.AlignmentPoint1 = new Point3D(textValue.valuePosition.X, textValue.valuePosition.Y, textValue.valuePosition.Z);
                        dxfText.AlignmentPoint2 = dxfText.AlignmentPoint1;
                        targetModel.Entities.Add(dxfText);
                    }
                }
            }

            cloneContext.ResolveReferences();

            DxfWriter.Write("cloneTest.dxf", targetModel);
        }
Ejemplo n.º 9
0
        private static DLocation topViewRightLocation; //下一个坐标

        #endregion Fields

        #region Methods

        /// <summary>
        /// 获取计算好的entity
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="location"></param>
        /// <param name="relativeStartLocation"></param>
        /// <returns></returns>
        public static DxfEntity getCaculateLocationEntity(DxfEntity entity,DLocation location,DLocation relativeStartLocation)
        {
            switch (entity.EntityType){
                case "LINE":
                    {
                    DxfLine dxfLine = (DxfLine)entity;
                    double lineLenght = dxfLine.End.X - dxfLine.Start.X;
                    double lineHeight=dxfLine.End.Y-dxfLine.Start.Y;
                    dxfLine.Start = new Point3D(dxfLine.Start.X - relativeStartLocation.X + location.X, dxfLine.Start.Y - relativeStartLocation.Y + location.Y, location.Z);
                    dxfLine.End = new Point3D(dxfLine.Start.X+lineLenght,dxfLine.Start.Y+lineHeight,location.Z);
                    //只需要将Line的坐标加入,每个图形底部都存在Line
                    if (Math.Round(dxfLine.Start.Y*10)/10 == Math.Round(dxfLine.End.Y*10)/10||Math.Round(dxfLine.Start.X*10)/10==Math.Round(dxfLine.End.X*10)/10)
                    {
                        positionList.Add(dxfLine.Start);
                        positionList.Add(dxfLine.End);
                    }
                    return dxfLine;
                    };
                case "ARC":
                    {
                    DxfArc dxfArc = (DxfArc)entity;
                    int flag = 0;
                    if (dxfArc.Center.X < 0)
                    {
                        flag = 1;
                    }
                    dxfArc.Center = new Point3D(Math.Abs(dxfArc.Center.X)-relativeStartLocation.X+location.X,dxfArc.Center.Y-relativeStartLocation.Y+location.Y,dxfArc.Center.Z);

                    if (flag == 1)
                    {
                        dxfArc.Center = new Point3D(0 - dxfArc.Center.X, dxfArc.Center.Y, dxfArc.Center.Z);
                    }
                    return dxfArc;
                    };
                case "CIRCLE":
                    {
                        DxfCircle dxfCircle =(DxfCircle)entity;
                        dxfCircle.Center = new Point3D(dxfCircle.Center.X-relativeStartLocation.X+location.X,dxfCircle.Center.Y-relativeStartLocation.Y+location.Y,dxfCircle.Center.Z);
                        return dxfCircle;
                    }
                case "POINT":
                    {
                        DxfPoint dxfPoint = (DxfPoint)entity;
                        dxfPoint.Position = new Point3D(dxfPoint.Position.X - relativeStartLocation.X + location.X, dxfPoint.Position.Y - relativeStartLocation.Y + location.Y, dxfPoint.Position.Z);
                        return dxfPoint;
                    }
                case "TEXT":
                    {
                        DxfText dxfText =(DxfText)entity;
                        dxfText.AlignmentPoint1 = new Point3D(dxfText.AlignmentPoint1.X-relativeStartLocation.X+location.X,dxfText.AlignmentPoint1.Y-relativeStartLocation.Y+location.Y,dxfText.AlignmentPoint1.Z);
                        dxfText.AlignmentPoint2 = dxfText.AlignmentPoint1;
                        return dxfText;
                    }
                case "ELLIPSE":
                    {
                        DxfEllipse dxfEllipse = (DxfEllipse)entity;
                        dxfEllipse.Center = new Point3D(dxfEllipse.Center.X - relativeStartLocation.X + location.X, dxfEllipse.Center.Y - relativeStartLocation.Y + location.Y, dxfEllipse.Center.Z);
                        return dxfEllipse;
                    }
                case "LWPOLYLINE":
                    {
                        DxfLwPolyline dxfLwPolyLine = (DxfLwPolyline)entity;
                        int len = dxfLwPolyLine.Vertices.Count;
                        for (int i = 0; i < len; i++)
                        {
                            dxfLwPolyLine.Vertices[i].Position = new Point2D(dxfLwPolyLine.Vertices[i].Position.X - relativeStartLocation.X + location.X, dxfLwPolyLine.Vertices[i].Position.Y - relativeStartLocation.Y + location.Y);
                        }

                        return dxfLwPolyLine;
                    }
                case "DIMENSION":
                    {
                        DxfDimension.Aligned dxfDimension =(DxfDimension.Aligned)entity;
                        DxfDimension.Aligned tempDemsion = new DxfDimension.Aligned(testModel.DefaultDimensionStyle);
                        dxfDimension.ExtensionLine1StartPoint = new Point3D(dxfDimension.ExtensionLine1StartPoint.X-relativeStartLocation.X+location.X,dxfDimension.ExtensionLine1StartPoint.Y-relativeStartLocation.Y+location.Y,location.Z);
                        dxfDimension.ExtensionLine2StartPoint = new Point3D(dxfDimension.ExtensionLine2StartPoint.X-relativeStartLocation.X+location.X,dxfDimension.ExtensionLine2StartPoint.Y-relativeStartLocation.Y+location.Y,location.Z);
                       // dxfDimension.DimensionLineLocation = new Point3D(dxfDimension.DimensionLineLocation.X-relativeStartLocation.X+location.X,dxfDimension.DimensionLineLocation.Y-relativeStartLocation.Y+location.Y,dxfDimension.DimensionLineLocation.Z);
                        tempDemsion.ExtensionLine1StartPoint = dxfDimension.ExtensionLine1StartPoint;
                        tempDemsion.ExtensionLine2StartPoint = dxfDimension.ExtensionLine2StartPoint;
                        tempDemsion.Color = dxfDimension.Color;
                        tempDemsion.DimensionStyleOverrides.TextHeight = 56d;
                        tempDemsion.DimensionStyleOverrides.ArrowSize = 20d;
                        if (Math.Round(dxfDimension.ExtensionLine1StartPoint.X * 100) / 100 == Math.Round(dxfDimension.ExtensionLine2StartPoint.X * 100) / 100)
                        {
                            tempDemsion.Text = "" + Convert.ToInt32(Math.Abs(dxfDimension.ExtensionLine1StartPoint.Y - dxfDimension.ExtensionLine2StartPoint.Y) + 0.5);
                        }
                        else
                        {
                            tempDemsion.Text = "" + Convert.ToInt32(Math.Abs(dxfDimension.ExtensionLine1StartPoint.X - dxfDimension.ExtensionLine2StartPoint.X) + 0.5);
                        }

                        tempDemsion.DimensionLineLocation = new Point3D(dxfDimension.DimensionLineLocation.X - relativeStartLocation.X + location.X, dxfDimension.DimensionLineLocation.Y - relativeStartLocation.Y + location.Y, dxfDimension.DimensionLineLocation.Z);

                        return tempDemsion;

                    }
                case "INSERT":
                    {
                        DxfInsert dxfInsert = (DxfInsert)entity;

                        //可行,但是存在很多点点
                        dxfInsert.InsertionPoint = new Point3D(dxfInsert.InsertionPoint.X - relativeStartLocation.X + location.X, dxfInsert.InsertionPoint.Y - relativeStartLocation.Y + location.Y, dxfInsert.InsertionPoint.Z);
                        return dxfInsert;
                    }
                case "HATCH":
                    {
                        DxfHatch dxfHatch = (DxfHatch)entity;
                        int len = dxfHatch.BoundaryPaths.Count;
                        for (int i = 0; i < len; i++)
                        {
                            int len1 = dxfHatch.BoundaryPaths[i].Edges.Count;
                            for (int j = 0; j < len1;j++ )
                            {
                                DxfHatch.BoundaryPath.LineEdge lineEdge = (DxfHatch.BoundaryPath.LineEdge)dxfHatch.BoundaryPaths[i].Edges[j];
                                lineEdge.Start = new Point2D(lineEdge.Start.X-relativeStartLocation.X+location.X,lineEdge.Start.Y-relativeStartLocation.Y+location.Y);
                                lineEdge.End = new Point2D(lineEdge.End.X-relativeStartLocation.X+location.X,lineEdge.End.Y-relativeStartLocation.Y+location.Y);
                            }
                        }
                            return dxfHatch;
                    }
                default:return entity;
            }
        }
Ejemplo n.º 10
0
 public void Visit(DxfDimension.Aligned dimension)
 {
     this.bool_0 = true;
 }
Ejemplo n.º 11
0
 /// <summary>
 /// Visits the specified entity.
 /// See the <see cref="IEntityVisitor"/> for more details.
 /// </summary>
 public override void Visit(DxfDimension.Aligned dimension)
 {
     HandleDimension(dimension);
 }
Ejemplo n.º 12
0
 public Aligned(DxfDimension.Aligned dimension, DxfScale scale)
     : base((DxfDimension)dimension, scale)
 {
     this.point3D_0 = dimension.DimensionLineLocation;
 }
Ejemplo n.º 13
0
        public static void DrawLnetDims(DxfModel model, int nSpans, double[] comSpanVals)
        {
            //02. Ln Dims/*----------------*/
            DxfLayer lnspanLayer = new DxfLayer("DIMENSIONSLn");

            model.Layers.Add(lnspanLayer);

            DxfBlock blockLnSpan = new DxfBlock("ALIGNED_DIMENSIONSLn");

            model.Blocks.Add(blockLnSpan);

            DxfInsert insertLn = new DxfInsert(blockLnSpan, new Point3D(0, DXFPoints.endPointsBot[0].Y - 0.50, 0));

            insertLn.Layer = lnspanLayer;
            model.Entities.Add(insertLn);

            {
                DxfDimension.Aligned[] LnDimArr = new DxfDimension.Aligned[nSpans];

                //Case of Cantilever at start
                if (GeometryEditorVM.GeometryEditor.RestraintsCollection[0].SelectedRestraint != Restraints.NoRestraints)
                {
                    // Dimension with text aligned with dimension line.
                    DxfDimension.Aligned dimension = new DxfDimension.Aligned(model.CurrentDimensionStyle);
                    dimension.DimensionStyleOverrides.ArrowSize              = 0.2d;
                    dimension.DimensionStyleOverrides.TextInsideHorizontal   = false;
                    dimension.DimensionStyleOverrides.TextAboveDimensionLine = true;
                    dimension.Layer = lnspanLayer;
                    dimension.DimensionLineLocation    = new Point3D(0, 0, 0);
                    dimension.ExtensionLine1StartPoint = new Point3D(DXFPoints.startPointsBot[0].X, 0, 0);
                    dimension.ExtensionLine2StartPoint = new Point3D(DXFPoints.endPointsBot[0].X, 0, 0);
                    dimension.UseTextMiddlePoint       = true;
                    dimension.TextMiddlePoint          = new Point3D(comSpanVals[0] + 0.50 * (comSpanVals[0] + comSpanVals[0 + 1]), 0.2d, 0d);
                    blockLnSpan.Entities.Add(dimension);
                }

                for (int i = 1; i < LnDimArr.Length - 1; i++)
                {
                    // Dimension with text aligned with dimension line.
                    DxfDimension.Aligned dimension = new DxfDimension.Aligned(model.CurrentDimensionStyle);
                    dimension.DimensionStyleOverrides.ArrowSize              = 0.2d;
                    dimension.DimensionStyleOverrides.TextInsideHorizontal   = false;
                    dimension.DimensionStyleOverrides.TextAboveDimensionLine = true;
                    dimension.Layer = lnspanLayer;
                    dimension.DimensionLineLocation    = new Point3D(0, 0, 0);
                    dimension.ExtensionLine1StartPoint = new Point3D(DXFPoints.startPointsBot[i].X, 0, 0);
                    dimension.ExtensionLine2StartPoint = new Point3D(DXFPoints.endPointsBot[i].X, 0, 0);
                    dimension.UseTextMiddlePoint       = true;
                    dimension.TextMiddlePoint          = new Point3D(comSpanVals[0] + 0.50 * (comSpanVals[i] + comSpanVals[i + 1]), 0.2d, 0d);
                    blockLnSpan.Entities.Add(dimension);
                }

                //case of cantilever at end
                if (GeometryEditorVM.GeometryEditor.RestraintsCollection[RFTCanvas.SpanVals.Length].SelectedRestraint != Restraints.NoRestraints)
                {
                    // Dimension with text aligned with dimension line.
                    DxfDimension.Aligned dimension = new DxfDimension.Aligned(model.CurrentDimensionStyle);
                    dimension.DimensionStyleOverrides.ArrowSize              = 0.2d;
                    dimension.DimensionStyleOverrides.TextInsideHorizontal   = false;
                    dimension.DimensionStyleOverrides.TextAboveDimensionLine = true;
                    dimension.Layer = lnspanLayer;
                    dimension.DimensionLineLocation    = new Point3D(0, 0, 0);
                    dimension.ExtensionLine1StartPoint = new Point3D(DXFPoints.startPointsBot[LnDimArr.Length - 1].X, 0, 0);
                    dimension.ExtensionLine2StartPoint = new Point3D(DXFPoints.endPointsBot[LnDimArr.Length - 1].X, 0, 0);
                    dimension.UseTextMiddlePoint       = true;
                    dimension.TextMiddlePoint          = new Point3D(comSpanVals[0] + 0.50 * (comSpanVals[LnDimArr.Length - 1] + comSpanVals[LnDimArr.Length - 1 + 1]), 0.2d, 0d);
                    blockLnSpan.Entities.Add(dimension);
                }
            }
        }
Ejemplo n.º 14
0
 public virtual void Visit(DxfDimension.Aligned dimension)
 {
     this.VisitDimension((DxfDimension)dimension);
 }