ããã¯ããªããžã§ã¯ãæåéçºç°å¢ã§ãŒãããã€ã³ã¿ã©ã¯ãã£ãã°ã©ãã£ãã¯ã¹ã䜿çšããŠã€ã³ã¿ãŒãã§ã€ã¹ãäœæããæ¹æ³ã«ã€ããŠèª¬æãã
以åã®åºçç©ã®çµããã§ãã æåã®éšåã§ã¯ããã®ã·ã¹ãã ã®éèŠãªã¢ãŒããã¯ãã£ãŒã®ã¢ã€ãã¢ãã€ãŸãæ§æãå§ä»»ãããã³ãã³ãã¬ãŒãã¡ãœããã®äœ¿çšã«ã€ããŠæ€èšããŸããã
次ã«ãããæ¥åžžçãªè³ªåã«ç§»ããããŠã¹ã€ãã³ãã®åŠçãšã¹ã±ãŒãªã³ã°ããã³ããªããžã§ã¯ãã®éžæãããã³ãã©ãã°ã¢ã³ããããããæ
åœããã¯ã©ã¹ã®æ§ç¯ãæ€èšããŸãã
DiagramPanelã¯ã©ã¹
èŠèŠã³ã³ããŒãã³ã
DiagramObjectã¯ã©ã¹ãšã¯ç°ãªããDiagramPanelã¯ã©ã¹ã®ãœãŒã¹ã³ãŒãã«ã¯éèŠãªæ§é çãœãªã¥ãŒã·ã§ã³ã¯å«ãŸããŠããããã«ãŒãã³ã¿ã¹ã¯ã®ã¿ãå®è¡ããŸãã ãã ãããã®ã³ãŒãã¯DiagramObjectã³ãŒããããçŽ30ïŒ
é·ããªããŸãã éçºç°å¢ã«é¢é£ãããã¹ãŠã®è©³çްãå«ãŸããŠããŸãïŒãã¬ãŒã ã¯ãŒã¯ãJavaããå¥ã®ç°å¢ã«æžãæãããå ŽåïŒä»¥åã®ããã«ãDelphiããJavaã«å€æããå ŽåïŒãäž»ãªåé¡ã¯DiagramObjectã«é¢é£ä»ããããŸãã
Swingã䜿çšããå ŽåãDiagramPanelã¯ã©ã¹ã¯javax.swing.JPanelã¯ã©ã¹ãç¶æ¿ããã¢ããªã±ãŒã·ã§ã³ãã©ãŒã ã«é
眮ã§ããããžã¥ã¢ã«ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ããŒãã³ãã§ãã ãã¢ã¢ããªã±ãŒã·ã§ã³ã¯1ã€ã®ããã«ã®ã¿ã§æ§æãããŠããŸãã æ§é çã«DiagramPanelã¯ä»¥äžã§æ§æãããŸãã
- æ°Žå¹³ããã³åçŽã¹ã¯ããŒã«ããŒjavax.swing.JScrollBarïŒhsbããã³vsb倿°ïŒã
- ç»é¢äžã®ãã¿ã³ãåãããããããã«ã
- DiagramPanel.DiagramCanvasãªããžã§ã¯ãïŒjava.awt.Canvasã®åŸç¶è
ïŒãå ãããæç»ãé åã®äžå€®ã¹ããŒã¹å
šäœãåããŸãã java.awt.Canvasã¯ã©ã¹ã«ã¯ãæç»ã³ã³ããã¹ãïŒGraphicsïŒãåŒæ°ãšããŠåãåããªãŒããŒã©ã€ããããpaintã¡ãœããïŒGraphics gïŒã䜿çšããŠç¶æ¿è
ãäœæããããšãå«ãŸããŸããããã¯ãDiagramPanelã«ãã¹ããããDiagramCanvasã¯ã©ã¹ã§è¡ãããŸãã ç¹ã«ããŠã£ã³ããŠã®ãµã€ãºã倿ŽãããŠã£ã³ããŠã®ãªãŒããŒã©ããã倿Žãããšããã€ã³ãïŒã°ã©ãã£ãã¯gïŒã¡ãœãããèªåçã«åŒã³åºãããããããã£ãŒãã¯ãããã®ã¢ã¯ã·ã§ã³ããæãªããããšã¯ãããŸããã
DiagramPanelã®èгç¹ãããã£ãŒããæã
DiagramPanel.DiagramCanvasã¯ã©ã¹ã®paintïŒGraphics gïŒã¡ãœããã®ã³ãŒãã詳ããèŠãŠã¿ãŸãããã äžéšã®è©³çްãçç¥ãããšã次ã®ããã«ãªããŸãã
ãœãŒã¹ã³ãŒãprivate static final double SCROLL_FACTOR = 10.0; public void paint(Graphics g) {
ïŒã¡ãœããã³ãŒãã¯èªã¿ãããããããã«åçŽåãããŠããŸãããã¹ãŠã®æ¥µç«¯ãªã±ãŒã¹ãæ£ããèæ
®ããå®éã®å®è£
ã¯ããµã³ãã«èšäºã®å®å
šãªãœãŒã¹ã³ãŒãã§èŠãããšãã§ããŸããïŒ
ãã®ã¡ãœããã¯æ¬¡ã®ããšãè¡ããŸãã
- ã«ãŒãæç»ãªããžã§ã¯ãã®getMaxX / Yã¡ãœããã䜿çšããŠãã¯ãŒã«ã座æšã§ãã£ãŒãã®å¹
ãšé«ããååŸããŸãã
- ã¯ãŒã«ã座æšã®å¯èŠé åã®ãµã€ãºïŒå¹
ãšé«ãïŒãååŸããŸãã ãããè¡ãã«ã¯ãã³ã³ããŒãã³ãã®ç»é¢ã®å¹
ãšé«ããã¹ã±ãŒãªã³ã°ä¿æ°ã§é€ç®ããŸãïŒäžçããç»é¢åº§æšãååŸããã«ã¯ãã¹ã±ãŒãªã³ã°ä¿æ°ãæããŸãïŒã
- ã¹ã¯ããŒã«ããŒã¹ã©ã€ããŒã®æå€§å€ãšå¹
ã¯ãã¯ãŒã«ã座æšã®å¯Ÿå¿ããå€ã«SCROLL_FACTORä¿æ°ãæããå€ã«çããèšå®ãããŸãã
ãŠãŒã¶ãŒã®å©äŸ¿æ§ã®ããã«ãç»åã®çž®å°ºïŒããã³è¡šç€ºé åã®ãµã€ãºïŒã倿Žãããšãã®ã¹ã¯ããŒã«ããŒã¹ã©ã€ããŒã®å¹
ãæ£ãã倿Žãããããšãéåžžã«éèŠã§ãã ãã®ã¢ãã¡ãŒã·ã§ã³ã§ã¯ãã¹ã¯ããŒã«ããŒã¹ã©ã€ããŒã®ãµã€ãºã®å€åãšãç»åãå
šäœã«åãŸãå§ããç¬éã®æ¶å€±ã«æ³šæããŠãã ããã

SCROLL_FACTORã«ããä¹ç®ãå¿
èŠãªã®ã¯ãã¹ã¯ããŒã«ããŒã§åãå
¥ããããå€ãæŽæ°ã§ãããæãåºãããã«ã¯ãŒã«ã座æšãdoubleåã§ããããã§ãã ãããã£ãŠã倧å¹
ã«å¢å ãããšãã¹ã¯ããŒã«ããŒã®åãã®ãäžé£ç¶æ§ããç®ç«ã¡ããããªããSCROLL_FACTORãã¡ã¯ã¿ãŒã䜿çšããŠãå®éã«ã¯ãããã®æŽæ°å€ãåºå®å°æ°ç¹å€ã«çœ®ãæããŸãã
ãã£ãŒãã®åæç»ã¡ãœããã¯ãã¹ã¯ããŒã«ããŒã®çŸåšã®ã¹ã±ãŒã«ãšäœçœ®ãæ£ããèæ
®ããŠããããã
- ã¹ã¯ããŒã«ããŒã®å€ã®å€æŽãåŠçããã«ã¯ãcanvas.paintïŒcanvas.getGraphicsïŒïŒïŒãåŒã³åºãã ãã§ãïŒDiagramPanelã¯ã©ã¹ã®scrollBarChangeïŒïŒã¡ãœãããåç
§ïŒã
- CtrlããŒãæŒããã«ããŠã¹ãã€ãŒã«ã€ãã³ããåŠçãããšã
- ã©ã®ã¹ã¯ããŒã«ããŒãããŠã¹ãã€ã³ã¿ãŒã«è¿ããã倿ãã
- 察å¿ããã¹ã¯ããŒã«ããŒã®äœçœ®ã倿Žãã
- canvas.paintïŒcanvas.getGraphicsïŒïŒïŒã®åŒã³åºãïŒDiagramPanelã¯ã©ã¹ã®canvasMouseWheelïŒMouseWheelEventïŒã¡ãœãããåç
§ïŒã
ç¹å®ã®åºå®ç¹ãç¶æããªãããã£ãŒããã¹ã±ãŒãªã³ã°ãã
ãã®äŸã§ã¯ããŠãŒã¶ãŒã¯å³ã®çž®å°ºã2ã€ã®æ¹æ³ã§å€æŽã§ããŸããç»é¢äžã®ãã¿ã³ããºãŒã ã€ã³ãããã³ããºãŒã ã¢ãŠãããã¯ãªãã¯ããCtrl +ããŠã¹ãã€ãŒã«ã®çµã¿åããã䜿çšããŸãã ãããã®å Žåã§ããããã«ãããDiagramPanelã¯ã©ã¹ã®setScaleïŒdouble sïŒã¡ãœãããåŒã³åºãããŸãã ãããããŠãŒã¶ãŒã«ãšã£ãŠå¿«é©ã«èŠããããã«ããã«ã¯ãããã€ãã®ããªãã¯ãå¿
èŠã§ãã
æåã«ãã¹ã±ãŒã«ãåãå€ã«æ³šæãæããŸãããã ç§ãã¡ã®é·å¹Žã®çµéšããããã€ã¢ã°ã©ã ã®æããŠãŒã¶ãŒãã¬ã³ããªãŒãªæ¯ãèãã¯ãããºãŒã ã€ã³ããã¿ã³ã2åã¯ãªãã¯ããããšã§ã¹ã±ãŒã«ã2åã«ããããšã§ãã ããã¯ãããºãŒã ã€ã³ã/ããºãŒã ã¢ãŠãããã¿ã³ãæŒããšãçŸåšã®ã¹ã±ãŒã«å€ã2ã®å¹³æ¹æ ¹ïŒ1.41ïŒã§ä¹ç®/é€ç®ããããšãæå³ããŸãã
ãŠãŒã¶ãŒããªã¹ãããã¹ã±ãŒã«å€ãæäŸãããå Žåãã¹ã±ãŒã«ã®å¢å /æžå°ã®èŠèŠçãªåäžæ§ã®ããã«ããããã¯50ïŒ
ã70ïŒ
ã100ïŒ
ã140ïŒ
ã200ïŒ
ã®2ã€ã®å¹³æ¹æ ¹åºŠããéžæããå¿
èŠããããŸãã
äžèŠãããšããCtrl +ããŠã¹ãã€ãŒã«ãã€ãã³ããã³ãã©ãŒã®ã³ãŒãã¯äºæããªãããã«èŠãããããããŸããã
private static final double WHEEL_FACTOR = 2.8854;
ã©ãããŠåºå±è
ãããã®ã§ããããïŒ ããŠã¹ãã€ãŒã«å転ãã³ãã©ãŒã¯ããã€ãŒã«ã®ãŠãŒã¶ãŒã«ãã£ãŠè¡ããããã¯ãªãã¯ãã®æ°ãåãåãïŒãã¯ãªãã¯ãã®å°æ°éšåãçºè¡ãããããšããããŸãïŒãäžè¬çãªã«ãŒã«ã¯åãã§ãã2åã¯ãªãã¯ãããšãç»åã2åã«ãªããŸãã ãã ããããã¯ããã€ãŒã«ã®å転è§åºŠã«å¿ããŠã2ã®å¹³æ¹æ ¹ã®è§åºŠãšããŠã¹ã±ãŒã«å€ã倿Žããå¿
èŠãããããšãæå³ããŸãã
ãã€ãŒã«ã¿ãŒãã³ã° | -2 | -1 | 0 | 1 | 2 |
ãºãŒã | 0.5 | 0.7 | 1.0 | 1.4 | 2.0 |
åçŽãªç®è¡ã¯ããããã®èšç®ãææ°ã«æžãããŸãã
次ã«ãDiagramPanelã¯ã©ã¹ã®setScaleïŒdouble sïŒã¡ãœããã䜿çšããŸãã
ãœãŒã¹ã³ãŒã if (s < 0.05 || s > 100 || s == scale) return; Point p = MouseInfo.getPointerInfo().getLocation(); SwingUtilities.convertPointFromScreen(p, canvas); double xQuot; double yQuot; if (px > 0 && py > 0 && px < canvas.getWidth() && py < canvas.getHeight()) { xQuot = p.getX() / (double) canvas.getWidth(); yQuot = p.getY() / (double) canvas.getHeight(); } else { xQuot = 0.5; yQuot = 0.5; } int newHVal = hsb.getValue() + round(hsb.getVisibleAmount() * xQuot * (1 - scale / s)); int newVVal = vsb.getValue() + round(vsb.getVisibleAmount() * yQuot * (1 - scale / s)); hsb.setValue(newHVal); vsb.setValue(newVVal); scale = s; canvas.paint(canvas.getGraphics());
ãåçæ§ãã®æ°ããã¹ã±ãŒã«ã®å€ã以åã«ãã§ãã¯ããã¡ãœããã¯ã
- ããŠã¹ã«ãŒãœã«ã®äœçœ®ãååŸãã
- ããŠã¹ã«ãŒãœã«ãCanvasãªããžã§ã¯ãäžã«ããå Žåããã®çžå¯Ÿäœçœ®ãèšç®ããŸããããã§ãªãå ŽåãCanvasã®äžå€®ãçžå¯Ÿäœçœ®ãšèŠãªãããŸãã
- æ°ããã¹ã¯ããŒã«ããŒã®äœçœ®ãæºåãã
- ããããïŒïŒïŒãã£ãŒããæ¡å€§ããŠåæç»ããŸãã
ãããã®å°é£ã¯äœã®ããã§ããïŒ ããã¯ãã¹ãŠããŠãŒã¶ãŒã®ã¹ã±ãŒãªã³ã°äžã«ã圌ã®èŠç·ãçŸåšãã©ãŒã«ã¹ãããŠãããã€ã¢ã°ã©ã äžã®ãã€ã³ããèŠèŠçã«åºå®ãããããã«è¡ãããŸãã ãããè¡ãããªãå ŽåããŠãŒã¶ãŒã¯åãºãŒã åŸã«ã¹ã¯ããŒã«ããŒããããããå¿
èŠããããŸãã ãŠãŒã¶ãŒãç»é¢äžã®ãã¿ã³ã䜿çšããŠãºãŒã ã€ã³ãããšããã€ã¢ã°ã©ã ã®è¡šç€ºé åã®äžå¿ã¯éæ¢ãããŸãŸã«ãªãããŠãŒã¶ãŒãããŠã¹ãã€ãŒã«ã§ãããè¡ããšãã«ãŒãœã«ãäžã«ãããã€ã³ãã¯éæ¢ãããŸãŸã«ãªããŸãã æ¬¡ã®ããã«ãªããŸãã

ãã³ã¢ãŒã
ãã®äŸã¯ããã³ã¢ãŒããšãç»é¢äžã®ãã¿ã³ã§åãæ¿ãããããªããžã§ã¯ãã®éžæãšãã2ã€ã®ã¢ãŒãã§åäœããŸãã ãã³ã¢ãŒãã§ã¯ãå·Šãã¿ã³ãæŒãããŸãŸããŠã¹ãåãããšããã£ãŒãã®è¡šç€ºé åå
šäœãç§»åããŸãã ãã³ã¢ãŒãã®æãåºãç¥ãããŠããäŸã¯ããã¡ãããAdobe Acrobat Readerã§PDFãã¡ã€ã«ã衚瀺ããããã®å¯Ÿå¿ããã¢ãŒãã§ãã
å·Šãã¿ã³ãæŒãããç¶æ
ã§ã®ããŠã¹ã®åãã¯ãcanvasMouseDraggedã¡ãœããã§åŠçãããŸãããã³ã¢ãŒãã§ã¯ãããŠã¹ã«ãŒãœã«ã®åæäœçœ®ã«å¯Ÿããã¹ã¯ããŒã«ããŒã®äœçœ®ã調æŽããã ãã§ååã§ãã
if (panningMode) { hsb.setValue(round((startPoint.x - cursorPos.x / scale) * SCROLL_FACTOR)); vsb.setValue(round((startPoint.y - cursorPos.y / scale) * SCROLL_FACTOR)); }
ãã§ã«å®è£
ãããŠããæ©æ¢°ã¯ãæ£ããæ¹æ³ã§ç»åãåæç»ããŸãã

ãªããžã§ã¯ãéžæã¢ãŒã
ãªããžã§ã¯ããéžæããã¡ã«ããºã ã«é¢é£ä»ããããŠããããžãã¯ã¯å€å°ç°ãªãããã䟿å®äžãDiagramPanelã¯ã©ã¹ã®ãã¹ããããã¯ã©ã¹SelectionManagerã§åŒ·èª¿è¡šç€ºãããŠããŸãã ArrayListé
ç®ã®ãã£ãŒã«ãã«ããã®ã¯ã©ã¹ã¯çŸåšéžæãããŠãããã¹ãŠã®ãªããžã§ã¯ããæ ŒçŽããŸãã 圌ã¯ãShiftããŒã§ãªããžã§ã¯ãããã¯ãªãã¯ãããããªããªããã䜿çšããŠãªããžã§ã¯ããéžæãããã©ãã°ããŸãã ããã¯ãã¹ãŠã説æãšå®è£
ã®äž¡æ¹ã§éåžžã«è€éã§ãã ãã ãã
æéç¶æ
ãã·ã³ã®æŠå¿µã¯ãããããã°ããçè§£ãããã¹ãŠãå®çŸããã®ã«åœ¹ç«ã¡ãŸãã ïŒã¹ããŒããã·ã³ã¯GoFãã¶ã€ã³ãã¿ãŒã³ã®ãªã¹ãã«å«ãŸããŠããããéãããã¯ã©ã¹ã®ã¿ã¹ã¯ã«ã®ã¿é©çšã§ããŸãããäžéšã®ã¿ã¹ã¯ãç°¡çŽ åããå©äŸ¿æ§ãšèœåã«ãããå¥ã®éåžžã«äŸ¿å©ã§æšæºåããããã¶ã€ã³ãã¿ãŒã³ãšããŠæ±ãããšãã§ããŸããïŒ
ãªããžã§ã¯ããéžæããã¡ã«ããºã ã®èгç¹ããããã€ã¢ã°ã©ã äžã§ã®ããŠã¹ã«ãŒãœã«ã®ç§»åã¯ãDiagramPanel.Stateåæã®èŠçŽ ã«å¯Ÿå¿ãããªãŒãããã³ã®3ã€ã®ç¶æ
ã®ããããã§çºçããŸãã
- ããŠã¹ã®å·Šãã¿ã³ãæŒãããŠããªã-åæç¶æ
ïŒéžæäžïŒã ShiftããŒãæŒããªããè€æ°ã®ãªããžã§ã¯ããéžæããŸãã
- ããŠã¹ã®å·Šãã¿ã³ãæŒãã-2ã€ã®ãµãã±ãŒã¹ïŒ
- éžæãããªããžã§ã¯ãã®ã°ã«ãŒããç§»åããŸãïŒãã©ãã°ïŒã
- é·æ¹åœ¢ã®æãçžïŒLASSOïŒãæç»ãããŸãã
SelectionManagerã¯ã©ã¹ãå®è£
ãããšããçŽã«æ¬¡ã®ç¶æ
ãšé·ç§»ã®å³ã®ãããªãã®ãã¹ã±ããããŸããã

ãã®ã¹ããŒã ã¯ãæéç¶æ
ãã·ã³ãå®è£
ããã®ãšåãæ¹æ³ã§ã³ãŒãã«å€æã§ããŸãã
é·æ¹åœ¢ã®ãªããªããæç»ããã«ã¯ãå¥ã®DiagramObjectã®åå«ã§ããDiagramPanel.Lassoã¯ã©ã¹ã䜿çšããŸãã ä»ã®ã¬ã³ãã©ãŒãšã¯ç°ãªãããã£ãŒãã«å±ããŠããªãããæç»ãããŸãããã匷調衚瀺ããåè§åœ¢ãæç»ããå¿
èŠããããšãã«DiagramPanelã¯ã©ã¹ã«ãã£ãŠäœæãããŸãã ããŠã¹ã«ãŒãœã«ã«å¯Ÿå¿ããå¿
èŠããããããã°ã©ãã£ãã¯ã¹ã³ã³ããã¹ãã®XORã¢ãŒãã䜿çšããŠinternalDrawSelectionã¡ãœããã«è¡šç€ºãããŸãã

é·æ¹åœ¢ã¯å·Šäžé
ããæç»ããããæãçžãã®éå§ç¹ã¯ä»»æã®ã³ãŒããŒã«ããããšã«æ³šæããŠãã ããïŒã¢ãã¡ãŒã·ã§ã³ãåç
§ïŒããããã£ãŠããã®é·æ¹åœ¢ãæç»ããã«ã¯ãæåã«LULãæ±ºå®ããå¿
èŠããããŸãã
int x0 = dX > 0 ? startPoint.x : startPoint.x + dX; int y0 = dY > 0 ? startPoint.y : startPoint.y + dY; g2.drawRect(x0, y0, Math.abs(dX), Math.abs(dY));
ãªããžã§ã¯ãã®ã°ã«ãŒããªãã»ããã å
ã«æ»ããšã®çžäºäœçš
ãªããžã§ã¯ãã®ã°ã«ãŒãã®ç§»åãå®äºãããããŠãŒã¶ãŒã¯ããŠã¹ã®å·Šãã¿ã³ãé¢ããŸãã ã·ã¹ãã ã§äœãèµ·ãã£ãŠããŸããïŒ çè«çã«ã¯ãéžæã«è©²åœãããªããžã§ã¯ãã調ã¹ãŠããŠãŒã¶ãŒãããããç§»åããããšããäŒãããã ãã§ååã§ãã ãã ãããã¹ãŠãããã»ã©ç°¡åãªããã§ã¯ãããŸããã
if (commandManager != null) commandManager.beginMacro("drag & drop"); for (DiagramObject i : items) { DiagramObject curItem = i.getParent(); while (curItem != null && !items.contains(curItem)) { curItem = curItem.getParent(); } if (curItem == null) i.drop(dX, dY); } if (commandManager != null) commandManager.endMacro();
èŠããŠããããã«ããªããžã§ã¯ãã¯ãç¬ç«ãããã³ãåç¬ç«ãã§ãã 芪ãšåç¬ç«ãªããžã§ã¯ãïŒããšãã°ãã¢ã¯ã¿ãŒãšãã®äžã®çœ²åïŒãåæã«éžæç¯å²ã«å
¥ãå Žåã芪ãªããžã§ã¯ãã®ã¿ãç§»åããå¿
èŠããããŸãïŒããã«äŸåãããªããžã§ã¯ãã¯ã远åŸãããŸãã
ãã®ãããã«ãŒããšå
±ã«äŸåãªããžã§ã¯ãã芪ãšãšãã«éžæç¯å²ã«å«ãŸããå ŽåãäŸåãªããžã§ã¯ããé€å€ããŸããé©åãªãªããžã§ã¯ãã«ã€ããŠã®ã¿ãç»é¢åº§æšã®ãªããžã§ã¯ãã®ãªãã»ããããªããžã§ã¯ãèªäœã«è»¢éããdropïŒdXãdYïŒã¡ãœãããåŒã³åºããŸãã DiagramObjectã¯ããç»é¢ããªãã»ããããäžçãã«åèšç®ãããã®ä»®æ³ã¡ãœããinternalDropãåŒã³åºããŸãããã®å®è£
ã¯ãç¶æ¿ã®ã¬ãã«ã§DiagramObjectããããŠã¹ãã©ãã°ãã€ãã³ããããªã¬ãŒããããŒã¿ã¢ãã«ãªããžã§ã¯ãã®å
éšç¶æ
ã倿ŽããŸãã
ãããŠããªãcommandManager.beginMacro / endMacroãžã®åŒã³åºããå¿
èŠãªã®ã§ããïŒ
ã·ã¹ãã ãå
ã«æ»ã/ããçŽãæ©èœãå®è£
ããŠããå Žåã¯ããªããžã§ã¯ãã®ã°ã«ãŒããã©ãã°ããã¯ããšããŠæå®ããå¿
èŠããããŸãã ãããè¡ãããããŠãŒã¶ãŒããã©ãã°æäœããã£ã³ã»ã«ãããå ŽåãäžåºŠã«ç§»åããããªããžã§ã¯ãã®æ°ã ãå
ã«æ»ãïŒïŒãã¿ã³ãã¯ãªãã¯ããå¿
èŠããããŸãã ãã®ãã¹ãŠã®è©³çްã«ã€ããŠ
ã¯ãå
ã«æ»ããšããçŽãã®å®è£
ã«é¢ããç§ã®èšäºãåç
§ããŠãã ããã
ãããã«
ããã§ãäŸã®æºåãã§ããŸããã æ¯èŒçå°éã®ã³ãŒãã§ãã€ã³ã¿ã©ã¯ãã£ããªãã€ã¢ã°ã©ã ã衚瀺ããã³ç·šéããããŠãŒã¶ãŒåãã®ãã¹ãŠã®ã¢ã¡ããã£ãåããå®éã®åé¡ã解決ããå®éã®ã¢ããªã±ãŒã·ã§ã³ã«åã蟌ãããã®ååãªæºåãæŽã£ããå®å
šã«æ©èœãããœãªã¥ãŒã·ã§ã³ãåŸãŸããã
CASE-toolsã®æµè¡ã®æä»£ãé·ãéããŠããã®ã¯æ®å¿µã§ãããã®ãããªã¹ãã«ãããã°ãRational Roseã®å±éºãªä»£æ¿ææ®µãäœæã§ããŸã:-)
ãã®èšäºã®äŸã®å®å
šãªãœãŒã¹ã³ãŒãã¯ãMavenãããžã§ã¯ãã®åœ¢åŒã§
https://github.com/inponomarev/graphexampleããããŠã³ããŒãã§ã
ãŸã ã
é·å¹Žã«ãããããã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãããŒããã©ãªãªãããªãã¯ã¹ãã¬ã³ããã£ãŒããæ³äººéã®é¢ä¿å³ãç¡ç·æ©åšã®æ¹äœè§åšæ³¢æ°å³ããã©ã³ãéã®æ¥ç¶å³ãäœæããŸããã
ä»ã®ãããžã§ã¯ãã§äœ¿çšããå Žåããã®ã³ãŒãã¯GPLã©ã€ã»ã³ã¹ã®äžã§ã®ã¿å©çšå¯èœã§ãã
èè
ã¯ã
ShareXã·ã¹ãã ã®äœæè
ã«æè¬ããŠããŸãããã®ã·ã¹ãã ã䜿çšããŠãèšäºã®ã¢ãã¡ãŒã·ã§ã³GIFã€ã©ã¹ããäœæãããŸããã