Files
hyperpoint/类图和关系图.drawio
2026-05-10 14:09:45 +08:00

156 lines
15 KiB
Plaintext

<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" version="29.2.4">
<diagram id="classdiagram" name="类关系图">
<mxGraphModel dx="1437" dy="882" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="presentation" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;align=left;fontSize=11;" value="&lt;b&gt;Presentation&lt;/b&gt;&lt;br&gt;- name: String&lt;br&gt;- slides: List&amp;lt;Slide&amp;gt;&lt;br&gt;- currentSlideIndex: int&lt;br&gt;+ getName/setName()&lt;br&gt;+ getSlides()&lt;br&gt;+ addSlide()&lt;br&gt;+ removeSlide()" vertex="1">
<mxGeometry height="140" width="200" x="50" y="50" as="geometry" />
</mxCell>
<mxCell id="slide" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;align=left;fontSize=11;" value="&lt;br&gt;&lt;b&gt;Slide&lt;/b&gt;&lt;br&gt;- id: String&lt;br&gt;- name: String&lt;br&gt;- pages: List&amp;lt;SlidePage&amp;gt;&lt;br&gt;- currentPageIndex: int&lt;br&gt;+ getName/setName()&lt;br&gt;+ getPages()&lt;br&gt;+ addPage()&lt;br&gt;+ removePage()" vertex="1">
<mxGeometry height="140" width="200" x="350" y="50" as="geometry" />
</mxCell>
<mxCell id="slidepage" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;align=left;fontSize=11;" value="&lt;br&gt;&lt;b&gt;SlidePage&lt;/b&gt;&lt;br&gt;- id: String&lt;br&gt;- title: String&lt;br&gt;- pageContent: PageContent&lt;br&gt;+ getTitle/setTitle()&lt;br&gt;+ getPageContent()" vertex="1">
<mxGeometry height="130" width="200" x="650" y="50" as="geometry" />
</mxCell>
<mxCell id="pagecontent" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;fontSize=11;" value="&lt;b&gt;PageContent&lt;/b&gt;&lt;br&gt;- drawableObjects: List&lt;br&gt;+ addObject()&lt;br&gt;+ removeObject()&lt;br&gt;+ findObjectAt()&lt;br&gt;+ getDrawableObjects()" vertex="1">
<mxGeometry height="130" width="200" x="1010" y="70" as="geometry" />
</mxCell>
<mxCell id="drawableobject" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d4e6f1;strokeColor=#3498db;align=left;fontSize=11;" value="&lt;b&gt;DrawableObject&lt;/b&gt;&lt;br&gt;- x, y: double&lt;br&gt;- width, height: double&lt;br&gt;- id: String&lt;br&gt;- selected: boolean&lt;br&gt;+ getX/setX()&lt;br&gt;+ contains()&lt;br&gt;+ getTypeName()" vertex="1">
<mxGeometry height="150" width="220" x="920" y="470" as="geometry" />
</mxCell>
<mxCell id="textobject" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#c8e6c9;strokeColor=#66bb6a;align=left;fontSize=11;" value="&lt;b&gt;TextObject&lt;/b&gt;&lt;br&gt;- text: String&lt;br&gt;- fontFamily: String&lt;br&gt;- fontSize: double&lt;br&gt;- fontStyle: String&lt;br&gt;- textColor: String&lt;br&gt;+ getText/setText()&lt;br&gt;+ getLayoutLines()" vertex="1">
<mxGeometry height="130" width="200" x="390" y="1120" as="geometry" />
</mxCell>
<mxCell id="shapeobject" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#c8e6c9;strokeColor=#66bb6a;align=left;fontSize=11;" value="&lt;b&gt;ShapeObject&lt;/b&gt;&lt;br&gt;- shapeType: enum&lt;br&gt;- fillColor: String&lt;br&gt;- strokeColor: String&lt;br&gt;- strokeWidth: double&lt;br&gt;+ getShapeType()&lt;br&gt;+ setFillColor()" vertex="1">
<mxGeometry height="130" width="200" x="1340" y="910" as="geometry" />
</mxCell>
<mxCell id="imageobject" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#c8e6c9;strokeColor=#66bb6a;align=left;fontSize=11;" value="&lt;br&gt;&lt;b&gt;ImageObject&lt;/b&gt;&lt;br&gt;- imagePath: String&lt;br&gt;+ getImagePath()&lt;br&gt;+ setImagePath()" vertex="1">
<mxGeometry height="100" width="180" x="1520" y="490" as="geometry" />
</mxCell>
<mxCell id="controller" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#bbdefb;strokeColor=#1976d2;align=left;fontSize=10;" value="&lt;b&gt;Controller&lt;/b&gt;&lt;br&gt;&lt;i&gt;implements Initializable&lt;/i&gt;&lt;br&gt;- currentSlide: Slide&lt;br&gt;- drawingCanvas: DrawingCanvas&lt;br&gt;- commandHistory: CommandHistory&lt;br&gt;- themeManager: ThemeManager&lt;br&gt;+ initialize()&lt;br&gt;+ onNewSlide()&lt;br&gt;+ displayPageContent()" vertex="1">
<mxGeometry height="150" width="220" x="160" y="360" as="geometry" />
</mxCell>
<mxCell id="drawingcanvas" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#bbdefb;strokeColor=#1976d2;align=left;fontSize=10;" value="&lt;br&gt;&lt;b&gt;DrawingCanvas&lt;/b&gt;&lt;br&gt;&lt;i&gt;extends Pane&lt;/i&gt;&lt;br&gt;- canvas: Canvas&lt;br&gt;- pageContent: PageContent&lt;br&gt;- selectedObject: DrawableObject&lt;br&gt;- commandHistory: CommandHistory&lt;br&gt;+ redraw()&lt;br&gt;+ handleMousePressed()&lt;br&gt;+ setSelectedObject()" vertex="1">
<mxGeometry height="150" width="220" x="580" y="770" as="geometry" />
</mxCell>
<mxCell id="propertypanel" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#bbdefb;strokeColor=#1976d2;align=left;fontSize=10;" value="&lt;b&gt;PropertyPanel&lt;/b&gt;&lt;br&gt;&lt;i&gt;extends VBox&lt;/i&gt;&lt;br&gt;- objectTypeLabel: Label&lt;br&gt;- fontFamilyCombo: ComboBox&lt;br&gt;- textColorPicker: ColorPicker&lt;br&gt;- canvas: DrawingCanvas&lt;br&gt;+ updateProperty()&lt;br&gt;+ deleteSelectedObject()" vertex="1">
<mxGeometry height="150" width="220" x="650" y="250" as="geometry" />
</mxCell>
<mxCell id="presentationwindow" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#bbdefb;strokeColor=#1976d2;align=left;fontSize=10;" value="&lt;b&gt;PresentationWindow&lt;/b&gt;&lt;br&gt;- slide: Slide&lt;br&gt;- stage: Stage&lt;br&gt;- canvas: Canvas&lt;br&gt;- currentPageIndex: int&lt;br&gt;- currentTransition: TransitionEffect&lt;br&gt;+ show()&lt;br&gt;+ nextPage()&lt;br&gt;+ drawCurrentPage()" vertex="1">
<mxGeometry height="140" width="220" x="1520" y="710" as="geometry" />
</mxCell>
<mxCell id="command" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;align=left;fontSize=11;" value="&lt;b&gt;Command&lt;/b&gt;&lt;br&gt;+ execute()&lt;br&gt;+ undo()" vertex="1">
<mxGeometry height="100" width="160" x="20" y="1180" as="geometry" />
</mxCell>
<mxCell id="addcmd" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fce4d6;strokeColor=#ea6b66;align=left;fontSize=10;" value="&lt;br&gt;&lt;b&gt;AddObjectCommand&lt;/b&gt;&lt;br&gt;&lt;i&gt;implements Command&lt;/i&gt;&lt;br&gt;- pageContent: PageContent&lt;br&gt;- object: DrawableObject" vertex="1">
<mxGeometry height="100" width="200" x="130" y="950" as="geometry" />
</mxCell>
<mxCell id="deletecmd" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fce4d6;strokeColor=#ea6b66;align=left;fontSize=10;" value="&lt;b&gt;DeleteObjectCommand&lt;/b&gt;&lt;br&gt;&lt;i&gt;implements Command&lt;/i&gt;&lt;br&gt;- pageContent: PageContent&lt;br&gt;- object: DrawableObject" vertex="1">
<mxGeometry height="100" width="210" x="210" y="1300" as="geometry" />
</mxCell>
<mxCell id="modifycmd" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fce4d6;strokeColor=#ea6b66;align=left;fontSize=10;" value="&lt;br&gt;&lt;b&gt;ModifyObjectCommand&lt;/b&gt;&lt;br&gt;&lt;i&gt;implements Command&lt;/i&gt;&lt;br&gt;- object: DrawableObject&lt;br&gt;- oldState/newState" vertex="1">
<mxGeometry height="100" width="210" x="330" y="830" as="geometry" />
</mxCell>
<mxCell id="commandhistory" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;align=left;fontSize=10;" value="&lt;br&gt;&lt;b&gt;CommandHistory&lt;/b&gt;&lt;br&gt;- undoStack: Stack&lt;br&gt;- redoStack: Stack&lt;br&gt;+ execute()&lt;br&gt;+ undo()&lt;br&gt;+ redo()&lt;br&gt;+ canUndo/canRedo()" vertex="1">
<mxGeometry height="130" width="180" x="1160" y="680" as="geometry" />
</mxCell>
<mxCell id="theme" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f0f4c3;strokeColor=#c0ca33;align=left;fontSize=10;" value="&lt;b&gt;Theme&lt;/b&gt;&lt;br&gt;- name: String&lt;br&gt;- backgroundColor: Color&lt;br&gt;- menuBarColor: Color&lt;br&gt;- primaryColor: Color&lt;br&gt;- secondaryColor: Color&lt;br&gt;+ getters/setters" vertex="1">
<mxGeometry height="130" width="200" x="1300" y="50" as="geometry" />
</mxCell>
<mxCell id="thememanager" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f0f4c3;strokeColor=#c0ca33;align=left;fontSize=10;" value="&lt;b&gt;ThemeManager&lt;/b&gt;&lt;br&gt;&lt;i&gt;(Singleton)&lt;/i&gt;&lt;br&gt;- instance: ThemeManager&lt;br&gt;- themes: Map&amp;lt;String, Theme&amp;gt;&lt;br&gt;- currentTheme: Theme&lt;br&gt;+ getInstance()&lt;br&gt;+ switchTheme()" vertex="1">
<mxGeometry height="140" width="200" x="1600" y="300" as="geometry" />
</mxCell>
<mxCell id="edge1" edge="1" parent="1" source="presentation" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;" target="slide" value="包含">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge2" edge="1" parent="1" source="slide" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;" target="slidepage" value="包含">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge3" edge="1" parent="1" source="slidepage" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;" target="pagecontent" value="包含">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge4" edge="1" parent="1" source="pagecontent" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;" target="drawableobject" value="包含">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge5" edge="1" parent="1" source="textobject" style="endArrow=block;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;dashed=0;" target="drawableobject" value="继承">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge6" edge="1" parent="1" source="shapeobject" style="endArrow=block;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;dashed=0;" target="drawableobject" value="继承">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1070" y="975" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge7" edge="1" parent="1" source="imageobject" style="endArrow=block;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;dashed=0;" target="drawableobject" value="继承">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge11" edge="1" parent="1" source="controller" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;" target="drawingcanvas" value="使用">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="690" y="480" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge12" edge="1" parent="1" source="controller" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;" target="propertypanel" value="使用">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge13" edge="1" parent="1" source="drawingcanvas" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;" target="pagecontent" value="使用">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1120" y="845" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge14" edge="1" parent="1" source="propertypanel" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;" target="drawingcanvas" value="使用">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="760" y="585" />
<mxPoint x="720" y="585" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge15" edge="1" parent="1" source="presentationwindow" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;" target="slide" value="使用">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="450" y="630" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge16" edge="1" parent="1" source="addcmd" style="endArrow=block;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;dashed=1;" target="command" value="实现">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge17" edge="1" parent="1" source="deletecmd" style="endArrow=block;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;dashed=1;" target="command" value="实现">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge18" edge="1" parent="1" source="modifycmd" style="endArrow=block;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;dashed=1;" target="command" value="实现">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge19" edge="1" parent="1" source="commandhistory" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;" target="command" value="管理">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge20" edge="1" parent="1" source="controller" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;exitX=1.001;exitY=0.624;exitDx=0;exitDy=0;exitPerimeter=0;" target="commandhistory" value="使用">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge21" edge="1" parent="1" source="drawingcanvas" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;" target="commandhistory" value="使用">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="980" y="820" />
<mxPoint x="980" y="760" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge22" edge="1" parent="1" source="thememanager" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;" target="theme" value="管理">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge23" edge="1" parent="1" source="controller" style="endArrow=open;html=1;endSize=12;edgeStyle=orthogonalEdgeStyle;exitX=1.011;exitY=0.326;exitDx=0;exitDy=0;exitPerimeter=0;" target="thememanager" value="使用">
<mxGeometry relative="1" as="geometry">
<mxPoint x="390" y="410" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>