📄 rs_filterdxf.cpp
字号:
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 + -