⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rs_filterdxf.cpp

📁 Linux下一个开源的CAD软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    DL_KnotData kd;    for (int i=1; i<=numKnots; i++) {        if (i<=k) {            kd = DL_KnotData(0.0);        } else if (i<=numKnots-k) {            kd = DL_KnotData(1.0/(numKnots-2*k+1) * (i-k));        } else {            kd = DL_KnotData(1.0);        }        dxf.writeKnot(dw,                      kd);    }    // write spline control points:    for (it = cp.begin(); it!=cp.end(); ++it) {        dxf.writeControlPoint(dw,                              DL_ControlPointData((*it).x,                                                  (*it).y,                                                  0.0));    }}/** * Writes the given circle entity to the file. */void RS_FilterDXF::writeCircle(DL_WriterA& dw, RS_Circle* c,                               const DL_Attributes& attrib) {    dxf.writeCircle(        dw,        DL_CircleData(c->getCenter().x,                      c->getCenter().y,                      0.0,                      c->getRadius()),        attrib);}void RS_FilterDXF::writeArc(DL_WriterA& dw, RS_Arc* a,                            const DL_Attributes& attrib) {    double a1, a2;    if (a->isReversed()) {        a1 = a->getAngle2()*ARAD;        a2 = a->getAngle1()*ARAD;    } else {        a1 = a->getAngle1()*ARAD;        a2 = a->getAngle2()*ARAD;    }    dxf.writeArc(        dw,        DL_ArcData(a->getCenter().x,                   a->getCenter().y,                   0.0,                   a->getRadius(),                   a1, a2),        attrib);}void RS_FilterDXF::writeEllipse(DL_WriterA& dw, RS_Ellipse* s,                                const DL_Attributes& attrib) {    if (s->isReversed()) {        dxf.writeEllipse(            dw,            DL_EllipseData(s->getCenter().x,                           s->getCenter().y,                           0.0,                           s->getMajorP().x,                           s->getMajorP().y,                           0.0,                           s->getRatio(),                           s->getAngle2(),                           s->getAngle1()),            attrib);    } else {        dxf.writeEllipse(            dw,            DL_EllipseData(s->getCenter().x,                           s->getCenter().y,                           0.0,                           s->getMajorP().x,                           s->getMajorP().y,                           0.0,                           s->getRatio(),                           s->getAngle1(),                           s->getAngle2()),            attrib);    }}void RS_FilterDXF::writeInsert(DL_WriterA& dw, RS_Insert* i,                               const DL_Attributes& attrib) {    dxf.writeInsert(        dw,        DL_InsertData(i->getName().latin1(),                      i->getInsertionPoint().x,                      i->getInsertionPoint().y,                      0.0,                      i->getScale().x,                      i->getScale().y,                      0.0,                      i->getAngle()*ARAD,                      i->getCols(), i->getRows(),                      i->getSpacing().x,                      i->getSpacing().y),        attrib);}void RS_FilterDXF::writeText(DL_WriterA& dw, RS_Text* t,                             const DL_Attributes& attrib) {    if (dxf.getVersion()==VER_R12) {        int hJust=0;        int vJust=0;        if (t->getHAlign()==RS2::HAlignLeft) {            hJust=0;        } else if (t->getHAlign()==RS2::HAlignCenter) {            hJust=1;        } else if (t->getHAlign()==RS2::HAlignRight) {            hJust=2;        }        if (t->getVAlign()==RS2::VAlignTop) {            vJust=3;        } else if (t->getVAlign()==RS2::VAlignMiddle) {            vJust=2;        } else if (t->getVAlign()==RS2::VAlignBottom) {            vJust=1;        }        dxf.writeText(            dw,            DL_TextData(t->getInsertionPoint().x,                        t->getInsertionPoint().y,                        0.0,                        t->getInsertionPoint().x,                        t->getInsertionPoint().y,                        0.0,                        t->getHeight(),                        1.0,                        0,                        hJust, vJust,                        (const char*)toDxfString(                            t->getText()).local8Bit(),                        (const char*)t->getStyle().local8Bit(),                        t->getAngle()),            attrib);    } else {        int attachmentPoint=1;        if (t->getHAlign()==RS2::HAlignLeft) {            attachmentPoint=1;        } else if (t->getHAlign()==RS2::HAlignCenter) {            attachmentPoint=2;        } else if (t->getHAlign()==RS2::HAlignRight) {            attachmentPoint=3;        }        if (t->getVAlign()==RS2::VAlignTop) {            attachmentPoint+=0;        } else if (t->getVAlign()==RS2::VAlignMiddle) {            attachmentPoint+=3;        } else if (t->getVAlign()==RS2::VAlignBottom) {            attachmentPoint+=6;        }        dxf.writeMText(            dw,            DL_MTextData(t->getInsertionPoint().x,                         t->getInsertionPoint().y,                         0.0,                         t->getHeight(),                         t->getWidth(),                         attachmentPoint,                         t->getDrawingDirection(),                         t->getLineSpacingStyle(),                         t->getLineSpacingFactor(),                         (const char*)toDxfString(                             t->getText()).local8Bit(),                         (const char*)t->getStyle().local8Bit(),                         t->getAngle()),            attrib);    }}void RS_FilterDXF::writeDimension(DL_WriterA& dw, RS_Dimension* d,                                  const DL_Attributes& attrib) {    // split hatch into atomic entities:    if (dxf.getVersion()==VER_R12) {        writeAtomicEntities(dw, d, attrib, RS2::ResolveNone);        return;    }    int type;    int attachmentPoint=1;    if (d->getHAlign()==RS2::HAlignLeft) {        attachmentPoint=1;    } else if (d->getHAlign()==RS2::HAlignCenter) {        attachmentPoint=2;    } else if (d->getHAlign()==RS2::HAlignRight) {        attachmentPoint=3;    }    if (d->getVAlign()==RS2::VAlignTop) {        attachmentPoint+=0;    } else if (d->getVAlign()==RS2::VAlignMiddle) {        attachmentPoint+=3;    } else if (d->getVAlign()==RS2::VAlignBottom) {        attachmentPoint+=6;    }    switch (d->rtti()) {    case RS2::EntityDimAligned:        type = 1;        break;    case RS2::EntityDimLinear:        type = 0;        break;    case RS2::EntityDimRadial:        type = 4;        break;    case RS2::EntityDimDiametric:        type = 3;        break;    default:        type = 0;        break;    }    DL_DimensionData dimData(d->getDefinitionPoint().x,                             d->getDefinitionPoint().y,                             0.0,                             d->getMiddleOfText().x,                             d->getMiddleOfText().y,                             0.0,                             type,                             attachmentPoint,                             d->getLineSpacingStyle(),                             d->getLineSpacingFactor(),                             (const char*)toDxfString(                                 d->getText()).local8Bit(),                             (const char*)d->getStyle().local8Bit(),                             d->getAngle());    if (d->rtti()==RS2::EntityDimAligned) {        RS_DimAligned* da = (RS_DimAligned*)d;        DL_DimAlignedData dimAlignedData(da->getExtensionPoint1().x,                                         da->getExtensionPoint1().y,                                         0.0,                                         da->getExtensionPoint2().x,                                         da->getExtensionPoint2().y,                                         0.0);        dxf.writeDimAligned(dw, dimData, dimAlignedData, attrib);    } else if (d->rtti()==RS2::EntityDimLinear) {        RS_DimLinear* dl = (RS_DimLinear*)d;        DL_DimLinearData dimLinearData(dl->getExtensionPoint1().x,                                       dl->getExtensionPoint1().y,                                       0.0,                                       dl->getExtensionPoint2().x,                                       dl->getExtensionPoint2().y,                                       0.0,                                       dl->getAngle(),                                       dl->getOblique());        dxf.writeDimLinear(dw, dimData, dimLinearData, attrib);    } else if (d->rtti()==RS2::EntityDimRadial) {        RS_DimRadial* dr = (RS_DimRadial*)d;        DL_DimRadialData dimRadialData(dr->getDefinitionPoint().x,                                       dr->getDefinitionPoint().y,                                       0.0,                                       dr->getLeader());        dxf.writeDimRadial(dw, dimData, dimRadialData, attrib);    } else if (d->rtti()==RS2::EntityDimDiametric) {        RS_DimDiametric* dr = (RS_DimDiametric*)d;        DL_DimDiametricData dimDiametricData(dr->getDefinitionPoint().x,                                             dr->getDefinitionPoint().y,                                             0.0,                                             dr->getLeader());        dxf.writeDimDiametric(dw, dimData, dimDiametricData, attrib);    } else if (d->rtti()==RS2::EntityDimAngular) {        RS_DimAngular* da = (RS_DimAngular*)d;        DL_DimAngularData dimAngularData(da->getDefinitionPoint1().x,                                         da->getDefinitionPoint1().y,                                         0.0,                                         da->getDefinitionPoint2().x,                                         da->getDefinitionPoint2().y,                                         0.0,                                         da->getDefinitionPoint3().x,                                         da->getDefinitionPoint3().y,                                         0.0,                                         da->getDefinitionPoint4().x,                                         da->getDefinitionPoint4().y,                                         0.0);        dxf.writeDimAngular(dw, dimData, dimAngularData, attrib);    }}void RS_FilterDXF::writeLeader(DL_WriterA& dw, RS_Leader* l,                               const DL_Attributes& attrib) {    if (l->count()>0) {        dxf.writeLeader(            dw,            DL_LeaderData(l->hasArrowHead(),                          0,                          3,                          0,                          0,                          1.0,                          10.0,                          l->count()),            attrib);        bool first = true;        for (RS_Entity* v=l->firstEntity(RS2::ResolveNone);                v!=NULL;                v=l->nextEntity(RS2::ResolveNone)) {            // Write line verties:            if (v->rtti()==RS2::EntityLine) {                RS_Line* l = (RS_Line*)v;                if (first) {                    dxf.writeLeaderVertex(                        dw,                        DL_LeaderVertexData(l->getStartpoint().x,                                            l->getStartpoint().y,                                            0.0));                    first = false;                }                dxf.writeLeaderVertex(                    dw,                    DL_LeaderVertexData(l->getEndpoint().x,                                        l->getEndpoint().y,                                        0.0));            }        }    } else {        RS_DEBUG->print(RS_Debug::D_WARNING,			"dropping leader with no vertices");    }}void RS_FilterDXF::writeHatch(DL_WriterA& dw, RS_Hatch* h,                              const DL_Attributes& attrib) {    // split hatch into atomic entities:    if (dxf.getVersion()==VER_R12) {        writeAtomicEntities(dw, h, attrib, RS2::ResolveAll);        return;    }    bool writeIt = true;    if (h->countLoops()>0) {        // check if all of the loops contain entities:        for (RS_Entity* l=h->firstEntity(RS2::ResolveNone);                l!=NULL;                l=h->nextEntity(RS2::ResolveNone)) {            if (l->isContainer() && !l->getFlag(RS2::FlagTemp)) {                if (l->count()==0) {                    writeIt = false;                }            }        }    } else {        writeIt = false;    }    if (!writeIt) {        RS_DEBUG->print(RS_Debug::D_WARNING,			"RS_FilterDXF::writeHatch: Dropping Hatch");    } else {        DL_HatchData data(h->countLoops(),                          h->isSolid(),                          h->getScale(),                          h->getAngle(),                          (const char*)h->getPattern().local8Bit());        dxf.writeHatch1(dw, data, attrib);        for (RS_Entity* l=h->firstEntity(RS2::ResolveNone);                l!=NULL;                l=h->nextEntity(RS2::ResolveNone)) {            // Write hatch loops:            if (l->isContainer() && !l->getFlag(RS2::FlagTemp)) {                RS_EntityContainer* loop = (RS_EntityContainer*)l;                DL_HatchLoopData lData(loop->count());                dxf.writeHatchLoop1(dw, lData);                for (RS_Entity* ed=loop->firstEntity(RS2::ResolveNone);                        ed!=NULL;                        ed=loop->nextEntity(RS2::ResolveNone)) {                    // Write hatch loop edges:                    if (ed->rtti()==RS2::EntityLine) {                        RS_Line* ln = (RS_Line*)ed;                        dxf.writeHatchEdge(                            dw,                            DL_HatchEdgeData(ln->getStartpoint().x,                                             ln->getStartpoint().y,                                             ln->getEndpoint().x,                                             ln->getEndpoint().y));                    } else if (ed->rtti()==RS2::EntityArc) {                        RS_Arc* ar = (RS_Arc*)ed;                        if (!ar->isReversed()) {                            dxf.writeHatchEdge(                                dw,                                DL_HatchEdgeData(ar->getCenter().x,                                                 ar->getCenter().y,                                                 ar->getRadius(),                                                 ar->getAngle1(),                                                 ar->getAngle2(),                                                 true));                        } else {                            dxf.writeHatchEdge(                                dw,                                DL_HatchEdgeData(ar->getCenter().x,                                                 ar->getCenter().y,               

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -