ã¿ã¹ã¯ã®èª¬æ
Sailfish OSãå®è¡ããŠããããã€ã¹ã§äœæ¥ãããšã³ãžãã¢ãåŠçãåŠç«¥ã®ããŒãºãæºããèšç®æ©ã¢ããªã±ãŒã·ã§ã³ãäœæããããšã«ããŸããã ã¢ããªã±ãŒã·ã§ã³ã«ã¯æ¬¡ã®ã³ã³ããŒãã³ããå«ãŸããŠããå¿ èŠããããŸãã
- ã·ã³ãã«ãªæäœãšé«åºŠãªæäœã®2ã€ã®æäœã¢ãŒããåããé»åã
- è¡åã®å ç®ãä¹ç®ãã©ã³ã¯ãšè¡ååŒã®èšç®ãããã³è»¢çœ®ããµããŒãããè¡åã®èšç®ã®ãµãã·ã¹ãã ã
- 次ã®æ¹çšåŒã解ããããã¯ïŒæ倧4床ã®çŽ¯ä¹æ¹çšåŒãææ°æ¹çšåŒããã³äžè§æ¹çšåŒã
æ¹çšåŒã解ãããã®ãããã¯ã«ãã°ã©ãã衚瀺ããæ©èœãè¿œå ããããšã«ããŸããã QMLã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ã¯ãŒã¯å ã§ãã®åé¡ã解決ããã«ã¯ã次ã®ã¢ãããŒããé©çšã§ããŸãã
- QuickQanavaãªã©ã®å€éšã©ã€ãã©ãªãæ¥ç¶ããŸãã
- QML Canvasãªããžã§ã¯ãã䜿çšããŸãã
- C ++ã§ç¬èªã®ã³ã³ããŒãã³ããå®è£ ããã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããŸãã
QuickQanavaã©ã€ãã©ãªã¯ãSailfish OSãã©ãããã©ãŒã ã§ã¯ãŸã å©çšã§ããªãQt 5.8ã§åäœããŸãã QML Canvasãªããžã§ã¯ãã䜿çšãããšãé«ã¬ãã«ã®JavaScriptèšèªã䜿çšã§ããW3Cæšæºãšäºææ§ã®ããAPIãæäŸããŸããããã«ããããµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšã§ããå¯èœæ§ãåºãããŸãã
ã°ã©ãã®è¡šç€ºã«ã¯æ·±å»ãªèšç®ã¯å¿ èŠãªããã·ãŒã³ãé »ç¹ã«åæç»ããå¿ èŠããªããããå€éšJavaScriptã©ã€ãã©ãªã䜿çšããŠãããžã§ã¯ãã§QML Canvasã䜿çšããããšã«ããŸããã
QML Canvasããã³Context2D
QML CanvasèŠçŽ ã䜿çšãããšãçŽç·ãæ²ç·ãã·ã³ãã«ã§è€éãªåœ¢ç¶ãã°ã©ãã£ãã¯ã¹ãã°ã©ãã£ãã¯ç»åãžã®ãªã³ã¯ãæç»ã§ããŸãã ãŸããããã¹ããè²ã圱ãã°ã©ããŒã·ã§ã³ããã¿ãŒã³ãæç»ãããããã¯ã»ã«ã¬ãã«ã§ç»åãæäœãããããããšãã§ããŸãã Canvasåºåã¯ãç»é¢ã«è¡šç€ºãããã»ããç»åãã¡ã€ã«ãšããŠä¿åããããURLã«ã·ãªã¢ã«åããããšãã§ããŸãã
ãã£ã³ãã¹ã®ã¬ã³ããªã³ã°ã¯ãéåžžã¯ãã€ã³ãä¿¡å·ã®åŠçã®çµæãšããŠã Context2Dãªããžã§ã¯ãã䜿çšããŠå®è¡ãããŸãã ãªããžã§ã¯ãèªäœã¯ã HTML Canvas 2D Contextä»æ§ãå®è£ ããŸã ãããã¯ã HTML Canvasãªããžã§ã¯ãã«ãå®è£ ãããŠãããQMLã¢ããªã±ãŒã·ã§ã³ã®Webãã©ãŠã¶ãŒã§äœ¿çšããããã«èšèšãããJavaScriptã©ã€ãã©ãªã䜿çšã§ããŸãã çŸåšã3次å ã³ã³ããã¹ãã¯Context2Dãªããžã§ã¯ãã§ã¯ãµããŒããããŠããŸããã
QML Canvasãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããæãåçŽãªäŸãèããŠã¿ãŸãããã
import QtQuick 2.0 Canvas { id: mycanvas width: 100 height: 200 onPaint: { var ctx = getContext("2d"); ctx.fillStyle = Qt.rgba(1, 0, 0, 1); ctx.fillRect(0, 0, width, height); } }
äŸã®æåã®è¡ã«ã¯QtQuick 2.0ãå«ãŸããŠããŸãã次ã«CanvasèŠçŽ ãå®çŸ©ãã id ã widthããã³heightãã©ã¡ãŒã¿ãŒãèšå®ããŸãã èŠçŽ èªäœã«ã¯èŠçŽ ããªããä»»æã®ã¹ããŒã¹ãå æã§ãããšããäºå®ã«ãããå¹ ãšé«ããæ瀺çã«èšå®ããããèŠçŽ ã®ç«¯ãããŒãžäžã®ä»ã®èŠçŽ ãšæ¥ç¶ããããšã«ããã寞æ³ãæå®ããå¿ èŠããããŸãã ãµã€ãºãæå®ããªãå Žåãã¢ã€ãã ã¯è¡šç€ºãããŸããã ãã®äŸã§ã¯ãæåã®ã¢ãããŒãã䜿çšããŸãã
ãã£ã³ãã¹èŠçŽ ãã¢ã¯ãã£ãã«ãªããšã ãã€ã³ãä¿¡å·ãããªã¬ãŒãããŸãã ãã®åŠçã¯onPaintã¡ãœããã§è¡ãããŸãã ãã®äžã§ãã³ã³ããã¹ããååŸããŠè¡šç€ºãã ctxå€æ°ã«ä¿åããŸãã getContextã®ãã©ã¡ãŒã¿ãŒã®è©³çŽ°ãªèª¬æã¯ãããšãã°ããã«ãããŸã ã Qtã¯2次å ã®è¡šç€ºã³ã³ããã¹ããžã®ã¢ã¯ã»ã¹ã®ã¿ãæäŸããããšã«æ³šæããŠãã ããã
次ã«ãã³ã³ããã¹ãã䜿çšããŠé·æ¹åœ¢ã衚瀺ããŸãã ctx.fillStyleã¯ãé·æ¹åœ¢ã®å¡ãã€ã¶ãè²ãèšå®ããŸãã æåã®3ã€ã®ãã©ã¡ãŒã¿ãŒã¯ãèµ€ãç·ãéã®æåã«ãã£ãŠè²ã決å®ãã4çªç®ã®æåã¯éæ床ã決å®ããŸãã ctx.fillRectïŒxãyãwãhïŒã¯ã xãšyãéå§ã®åº§æšãšããŠã wãšhãå¹ ãšé«ããšããŠäœ¿çšããŠæç»ããŸãã
æç»ã«äœ¿çšã§ããã³ã³ããã¹ãã¡ãœããã®äžèŠ§ã¯ãå ¬åŒããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã ãã®èšäºã®ãã¹ãŠã®æ¹æ³ãæ€èšããããã§ã¯ãããŸãããç»åã®åº§æšã¯å·Šäžé ããå§ãŸãããšã«æ³šæããŠãã ããã OX軞ã¯å³ã«äŒžã³ãOY軞ã¯äžäžããŸãã
å€éšã©ã€ãã©ãªã䜿çšãã
ãã¡ãããåã«èšå®ããã¿ã¹ã¯ã¯ã Context2D APIã䜿çšããŠçŽæ¥è§£æ±ºã§ããŸããããå€éšã©ã€ãã©ãªã䜿çšããå¯èœæ§ãæ€èšããããšã«ããŸããã ãã®APIã¯ãã¹ãŠã®äž»èŠãªãã©ãŠã¶ãŒã§äœ¿çšã§ãããããSailfish OSã®éçºè ã¯ãã¿ãŒã²ããæ©èœã®å®è£ ãä¿é²ããå€æ°ã®æ¢åã®ã©ã€ãã©ãªãŒã䜿çšã§ããŸãã ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã D3.jsã©ã€ãã©ãªã䜿çšããããšã«ããŸããã
ã·ã§ãŒãã¬ãã¥ãŒD3.js
D3.jsã¯ãããŒã¿ãåŠçããã³èŠèŠåããããã®JavaScriptã©ã€ãã©ãªã§ãã çŸåšãD3.jsã¯ãã°ã©ãã£ã«ã«ããŒã¿åŠçããã³ããããçš®é¡ã®ãã£ãŒããšã°ã©ãã®äœæã«äœ¿çšãããæã人æ°ã®ãããã¬ãŒã ã¯ãŒã¯ã®1ã€ã§ãã
D3.jsèªäœã¯ãå€ãã®åé¡ã解決ã§ãã倧èŠæš¡ãªãããžã§ã¯ãã§ããããããã®ã©ã€ãã©ãªãHTMLã¢ããªã±ãŒã·ã§ã³ã«çµ±åããå¯äžã®æ¹æ³ã¯ãããŸããã ããªãåçŽãªçµ±åã¢ãããŒãã䜿çšããŸããããä»ã®ã¢ããªã±ãŒã·ã§ã³ã§ãããŸãæ©èœããã¯ãã§ãã
QMLã¢ããªã±ãŒã·ã§ã³ã§ã®D3.jsã®çµ±å
æåã«ãã©ã€ãã©ãªãããŠã³ããŒãããŠãã¿ãŒã²ããããã€ã¹ã§äœ¿çšå¯èœã«ããå¿ èŠããããŸãã Sailfish OSäžã®QMLã³ã³ããŒãã³ãã¯ãªãœãŒã¹ã«ã³ã³ãã€ã«ããããåå¥ã®ãã¡ã€ã«ãšããŠé ä¿¡ãããããšã«æ³šæããŠãã ããã ãã®çµæããã¹ãŠã®JavaScriptäŸåé¢ä¿ãåå¥ã®ãã¡ã€ã«ãšããŠæãŸãããã®ã«ãªããŸãã
D3.jsã¯ãd3.jsãšåŒã°ããå¥ã®ãã¡ã€ã«ãšãd3.min.jsã«ããçž®å°ããŒãžã§ã³ã§æäŸãããŸãã éçºäžãçž®å°çã¯QMLãšã³ãžã³ã«ãã£ãŠæ£ããããŒããããªãããšãããã£ããããå®å šçã䜿çšããããšããå§ãããŸã-èŠæ ãªãã§åäœããŸãã
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããžã§ã¯ãã®qml / pagesãã£ã¬ã¯ããªã«d3.jsãã¡ã€ã«ãé 眮ããŸããã ãã®ãã£ã¬ã¯ããªã®å å®¹å šäœãã¿ãŒã²ããããã€ã¹ã«ã³ããŒãããããããã¡ã€ã«ã¯ãããžã§ã¯ããšãšãã«ã³ããŒãããŸãã ãã®ãã¡ã€ã«ã¯QMLãããžã§ã¯ãã®DISTFILESãªã¹ãã«ãå«ãŸããŠãããããQtCreatorã¯ä»ã®ãã¡ã€ã«ã®ãªã¹ãã«è¡šç€ºããŸãã
ã°ã©ãã衚瀺ããã³ã³ããŒãã³ããäœæãã
ã¢ããªã±ãŒã·ã§ã³ã®äžéšãšããŠã3ã€ã®é¢æ°ã®ã°ã©ãã2次å å¹³é¢ã«è¡šç€ºããå¿ èŠããããŸãã èæ ®ããããã¹ãŠã®é¢æ°ã¯ã暪座æšã®å€ã«äŸåããŸãã ã»ã°ã¡ã³ãã«å®æ§çã«è¡šç€ºããããã«ãçŸåšè¡šç€ºãããŠããã»ã°ã¡ã³ãã®äžéå€ãèšç®ããããšã«ããŸããã
æ§ç¯ã®äžè¬çãªããžãã¯ãå¥ã®Plotã³ã³ããŒãã³ãã«å ¥ããŸãã 次ã®æ©èœãæäŸããŸãã
- ãã£ãã·ã§ã³ä»ãã®ã°ãªããã衚瀺ããŸãã
- ãžã§ã¹ãã£ãŒã䜿çšããŠè¡šç€ºããã座æšãå€æŽããŸãã
- èšç®å€ã«ããã°ã©ã衚瀺ã 䜿çšå Žæã«ç¹å®ã®æ©èœãå®è£ ããå¿ èŠããããŸããåºæ¬ã¿ã€ãã¯ãã®æ©èœãæäŸããŸããã
ç¹å®ã®äœ¿çšå Žæã§ã¯ãã°ã©ãã®å€ãèšç®ããé¢æ°ã1ã€ã ã決å®ããå¿ èŠããããŸãã
åºæ¬ã³ã³ããŒãã³ãã®æ§é ãèæ ®ããŠãã ããã
import QtQuick 2.0 import "d3.js" as D3 Canvas { // onPaint { } // // Item { PinchArea {} // MouseArea {} // } }
ãŸããå¿ èŠãªã©ã€ãã©ãªãæ¥ç¶ããŸããQtQuickã³ã³ããŒãã³ãã®ã»ãããšãD3.jsã©ã€ãã©ãªèªäœã§ãã JavaScriptãã¡ã€ã«ã®æ¥ç¶ã¯ãä»ã®QMLãã¡ã€ã«ã®æ¥ç¶ã«äŒŒãŠããŸãã ãã®åé¡ã解決ããããã«ã importããŒã¯ãŒãã䜿çšãããŸãã
JavaScriptãã¡ã€ã«ã®æ¥ç¶ã«é¢ããå®å šãªæ å ±ã¯ã å ¬åŒããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã ã€ã³ããŒãæã®äž»ãªåŽé¢ã¯ããã®ããã¥ã¡ã³ãã§å®çŸ©ãããŠãããã¹ãŠã®é¢æ°ãå©çšã§ããååãæå®ããããšã§ãã ã³ãŒãã§ã¯ããã®ãªããžã§ã¯ãã®ååãD3ã«ä»ããŸãã ã
Plotã®ã«ãŒãèŠçŽ ã¯Canvasã§ãã ããã®äžã«æ å ±ã衚瀺ããŸãã ãã®èŠçŽ ã§èšç®ãšãžã§ã¹ãã£ãŒåŠçãå®è¡ããããã«ãäžé£ã®ããããã£ãšé¢æ°ãå®çŸ©ããŸããã éèŠãªã®ã¯onPaint-ç»åã¬ã³ããªã³ã°ã€ãã³ãã®ãã³ãã©ãŒã§ãã
Canvasã«é¢ããåèŠçŽ ã¯Itemã§ã ãããã¯ã PinchAreaããã³MouseAreaãªããžã§ã¯ãã®åãªãã³ã³ããã§ã ã ãããã®ãªããžã§ã¯ãã¯ããã³ããžã§ã¹ãã£ãåŠçããè¿äŒŒã®ã¬ãã«ãå¶åŸ¡ãããã©ãã°ããŠåº§æšè»žã®äœçœ®ãå¶åŸ¡ããããã«è¿œå ãããŸããã ãžã§ã¹ãã£ãŒããŒã¿ãã³ãã©ãŒã¯ãã°ã©ãã®æç»ã«äœ¿çšããã座æšãæŽæ°ããŸãã
衚瀺ããã»ã¹ã®æŠèŠ
ã¬ã³ããªã³ã°ããã»ã¹ã¯æ®µéçã«èæ ®ãããŸãããäžæ¹ã§ãã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒããèŠãŠã詳现ãèªåã§ç解ã§ããããã§ãã åæã«ãå°é£ãåŒãèµ·ããå¯èœæ§ã®ããéèŠãªãã€ã³ãã«æ³šç®ããŸãã
äž»èŠãªèŠçŽ ã§ãã座æšã°ãªãããšé¢æ°ã°ã©ãã衚瀺ããã«ã¯ã d3.lineé¢æ°ã䜿çšããŸãã ãã®é¢æ°ã䜿çšãããšãä»»æã®ããªã©ã€ã³ãšçŽç·ã衚瀺ã§ããŸãã é¢æ°ãžã®å ¥åã¯ããŒã¿ã®é åã§ãã ããã䜿çšããã«ã¯ã次ã®ãã©ã¡ãŒã¿ãŒãæ§æããå¿ èŠããããŸãã
- é åèŠçŽ ãã瞊座æšãšæšªåº§æšãååŸããããã«ãžã§ãã¬ãŒã¿ãŒãæ§æããŸãã
- ç·ãçžäºã«æ¥ç¶ããæ¹æ³ã瀺ããŸãã
- æ å ±ã衚瀺ããã°ã©ãã£ã«ã«ã³ã³ããã¹ãã瀺ããŸãã
ã°ã©ãç·ã®ç»åã圢æããäŸãèããŠã¿ãŸãããã
var context = plot.getContext('2d'); var xScale = d3.scaleLinear() .range([leftMargin, width]) .domain([minX, maxX]); var yScale = d3.scaleLinear() .range([height - bottomMargin, 0]) .domain([minY, maxY]); var line = d3.line().x(function (d) { return xScale(d[0]); }).y(function (d) { return yScale(d[1]); }).curve(d3.curveNatural).context(context);
ãŸããã¹ã±ãŒã«d3.scaleLinearãèšå®ããŸããããã«ãããã°ã©ãã®ã¹ã±ãŒãªã³ã°ã®äœæ¥ãç°¡çŽ åãããŸãã rangeïŒïŒã¡ãœããã®åŒã³åºãã§ç»åã®ç©ççãªå¢çã瀺ãã domainïŒïŒã¡ãœããã®åŒã³åºãã§ã°ã©ãã®å¢çã瀺ãã ãã§ååã§ãã 暪座æšã瞊座æšã®ã¹ã±ãŒã«ã圢æãããããããxScaleããã³yScaleå€æ°ã«æžã蟌ãŸããŸãã
次ã«ãã°ã©ãå€ã®é åããã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããç·ã«ã€ããŠèª¬æããŸãã ã¡ãœããåŒã³åºãxïŒïŒã§ãé åã®æåã®èŠçŽ ãæœåºãã xScaleã¹ã±ãŒã«ã䜿çšããŠå€æããé¢æ°ãæž¡ããŸãã åæ§ã®é¢æ°ãåŒæ°ãšããŠyïŒïŒã¡ãœããåŒã³åºãã«æž¡ãããé åã®2çªç®ã®èŠçŽ ã®åŒã³åºãã®ã¿ã«æž¡ãããŸãã 次ã«ãèŠçŽ éã®éä¿¡æ¹æ³ãèšå®ããŸãããã®å Žåã¯d3.curveNaturalã§ãã D3.jsã¯ãæ²ç·ãæ§ç¯ããããã®èšå€§ãªæ°ã®ãªãã·ã§ã³ããµããŒãããŠããŸã ããããã«ã€ããŠã¯ã å ¬åŒããã¥ã¡ã³ãã§èªãããšãã§ããŸã ã ç·ã®äœæã®æåŸã«ãç»åã®ã°ã©ãã£ãã¯ã³ã³ããã¹ãã«é¢é£ä»ããŸãã
ç·ãæãã«ã¯ãäœæããç·ãåŒã³åºããŠãå¿ èŠãªåº§æšã®é åãæž¡ããŸãã
line([[1, 2], [2, 15], [3, 8], [4, 6]])
åæ§ã«ã軞ã衚瀺ããããã«ç·ãæãããŸãã
åæç»ã®éå§æã«ãã£ã³ãã¹ãå®å šã«ã¯ãªã¢ãããããšã«æ³šæããŠãã ããã ããã¯ãåã®ç»åãçŸåšã®ç¶æ ã®è¡šç€ºã«å¹²æžããªãããã«ããããã«å¿ èŠã§ãã ãŸãããŠãŒã¶ãŒãã°ã©ããæ¡å€§ããããèŠçŽ ã®è¡šç€ºã®å¢çãå€æŽããããšãæ°ããç»åã衚瀺ãããŸãã
ããããã³ã³ããŒãã³ãã®äœ¿çš
ãã®ã³ã³ããŒãã³ãã䜿çšããŠãé¢æ°ããšã«3ã€ã®ã°ã©ãã®è¡šç€ºãå®è£ ããŸããã ãã£ãŒãããšã«ãããŒãžãäœæããŸããã ãããã®ããŒãžã§ã¯ãå€ãèšç®ãããŠã°ã©ãã衚瀺ãããŸãã
åãã£ãŒãã®äžè¬çãªæ§é ã以äžã«ç€ºããŸãã
Page { property var elem property var border property var rootLine id: page backNavigation: plot.controlNavigation() Plot { id: plot anchors.margins: Theme.horizontalPageMargin width: parent.width height: parent.height function drawPlot(line) { line(getPoints()); } function getPoints() { // . } } }
ã«ãŒãèŠçŽ ã¯ãã°ã©ãã衚瀺ããããã«ã¹ã¿ãã¯ã«ããã·ã¥ãããããŒãžã§ãã ãã©ã¡ãŒã¿ãŒã¯ãæ¹çšåŒã®ä¿æ°ãã°ã©ãã衚瀺ããããã®åæå¢çãããã³é¢æ°ã®æ ¹ã®äœçœ®ã瀺ãç·ã§ãã
次ã«ããŠãŒã¶ãŒããã£ãŒããæäœããå Žåãããã²ãŒã·ã§ã³ããªãã«ããŸãã ããã«ããããžã§ã¹ãã£ã誀ã£ãŠããŒãžããæ»ãã®ãé²ããŸãã
ããŒãžäžã®å¯äžã®èŠçŽ ã¯PlotèŠçŽ ã§ãã 䜿çšå¯èœãªãã¹ãŠã®ã¹ããŒã¹ãå æããããšãæ瀺çã«ç€ºããã°ã©ãã®è¡šç€ºã«äœ¿çšãããŸãã drawPlotã¡ãœãããå®çŸ©ããŸãã ãã®ã¡ãœããã¯ãé¢æ°ãå衚瀺ããå¿ èŠããããã³ã«åŒã³åºãããŸãã
åŒæ°ãšããŠãäžã«ç€ºãããã«ã PlotèŠçŽ ã§æ§æãããè¡ãæž¡ãããŸãã ãããåŒã³åºããŠã getPointsïŒïŒã¡ãœããã®çµæãæž¡ããŸãã æåŸã®æ¹æ³ã¯ãåã ã®ãã£ãŒãã«åºæã®ãã€ã³ãã®ã»ããã圢æããŸãã
ãããªãã¯ã¹èšç®ã¢ããª
ãã®æ å ±ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã«åæ§ã®æ©èœãç°¡åã«å®è£ ã§ããããšãé¡ã£ãŠããŸãã ãŸããMatrix Calculatorã¢ããªã±ãŒã·ã§ã³ã®é¢æ°ã®å®è£ ã«ã€ããŠè©³ããã¯ã OpenRepos.netãªããžããªããã€ã³ã¹ããŒã«ãããã BitBucketãªããžããªã§å©çšå¯èœãªãœãŒã¹ã³ãŒãã§ã©ã€ãã©ãªãæäœããããšãã芧ãã ãã ã
ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã¯ãªãŒã³ã·ã§ããã以äžã«ç€ºããŸãã
|
|
UPD ïŒã¢ããªã±ãŒã·ã§ã³ã®ã¹ã¯ãªãŒã³ã·ã§ãããè¿œå ããŸããã