diff --git a/entry/src/main/ets/pages/CustomStyle/StyleButton.ets b/entry/src/main/ets/pages/CustomStyle/StyleButton.ets index 0f322364..e15e0188 100644 --- a/entry/src/main/ets/pages/CustomStyle/StyleButton.ets +++ b/entry/src/main/ets/pages/CustomStyle/StyleButton.ets @@ -45,25 +45,26 @@ export struct EventBtn { } } + //菜单目录按钮 //功能目录菜单,主要用于针对单一按钮多个功能形式 @ComponentV2 export struct MenuBtn { @Param menuBtn: Array|undefined=undefined; + @Local iconState:boolean=false; @Builder - EventMenu(_btnMenus:Array){ + EventMenu(){ Menu() { - ForEach(_btnMenus, (item: TitleButton, index: number) => { + ForEach(this.menuBtn, (item: TitleButton, index: number) => { MenuItem({ startIcon: $r('app.media.'+item.eIcon), content: item.eName }) .width('150') - .margin({ top: 0, left: 0, bottom: 0, right: 0 - }) + .margin({ top: 0, left: 0, bottom: 0, right: 0 }) }) } } build() { if(this.menuBtn!=undefined){ - EventBtn({eventBtn:this.menuBtn[0]}).bindMenu(this.EventMenu(this.menuBtn)) + EventBtn({eventBtn:this.menuBtn[0]}).bindMenu(this.EventMenu) } } } diff --git a/entry/src/main/ets/pages/CustomStyle/StyleComboBox.ets b/entry/src/main/ets/pages/CustomStyle/StyleComboBox.ets new file mode 100644 index 00000000..675c5909 --- /dev/null +++ b/entry/src/main/ets/pages/CustomStyle/StyleComboBox.ets @@ -0,0 +1,59 @@ +import { TitleButton } from "../LayoutInterface/Interface/TitleButtonInterface"; + +@ComponentV2 +export struct TextComboBox { + @Param menu: Array = new Array; + @Local selectIndex:number=0; + @Builder + EventMenu() { + Menu() { + ForEach(this.menu, (item: TitleButton, index: number) => { + MenuItem({ content: item.eName }) + .width('150') + .margin({ + top: 0, + left: 0, + bottom: 0, + right: 0 + }).onClick(()=>{ + this.selectIndex=index; + }) + }) + } + } + build() { + Row() { + Text(this.menu[this.selectIndex].eName) + .bindMenu(this.EventMenu) + } + } +} +@ComponentV2 +export struct TextInputComboBox { + @Param menu: Array = new Array; + @Local selectIndex:number=0; + @Builder + EventMenu() { + Menu() { + ForEach(this.menu, (item: TitleButton, index: number) => { + MenuItem({ content: item.eName }) + .width('150') + .margin({ + top: 0, + left: 0, + bottom: 0, + right: 0 + }).onClick(()=>{ + this.selectIndex=index; + }) + }) + } + } + build() { + Row() { + TextInput({placeholder:this.selectIndex.toString()}) + .bindMenu(this.EventMenu) + .type(InputType.Number) + } + } +} diff --git a/entry/src/main/ets/pages/CustomStyle/StyleDialog.ets b/entry/src/main/ets/pages/CustomStyle/StyleDialog.ets new file mode 100644 index 00000000..092781f1 --- /dev/null +++ b/entry/src/main/ets/pages/CustomStyle/StyleDialog.ets @@ -0,0 +1,25 @@ +import { TitleButton } from "../LayoutInterface/Interface/TitleButtonInterface"; +import {TitleViewMenu} from "../LayoutInterface/Layout/TitleViewData" +import { Popup } from "@kit.ArkUI"; + +//视图切换弹窗 +@CustomDialog +export struct ViewDialog { + controller: CustomDialogController; + build(){ + Row({ space:2 }) { + GridRow({ columns: 3 ,gutter: 5 }) { + ForEach(TitleViewMenu, (item: TitleButton, index?: number | undefined) => { + GridCol({ span: 1 }) { + Row() { + Image($r('app.media.' + item.eIcon)) + .width('35vp') + .height('35vp') + .objectFit(ImageFit.Contain) + } + } + }) + } + } + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index e2651720..e1cc4593 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -3,16 +3,25 @@ import { edgeColors } from '@kit.ArkUI'; import {TitleTab} from './TitleTabLayout/TitleTab' import {LeftSideTab} from './leftSideTab' import {ModelViewTab} from './modelViewTab' +import {TitleColumnSub} from './TitleTabLayout/TitleColumnSub' const DOMAIN = 0x0000; @Entry @Component struct Index { + build() { //OpenCAX主界面整体布局,采用多行布局 - Flex({ direction: FlexDirection.Column }) { + Column({space:1}) { //头部导航功能区 TitleTab().height('auto').borderWidth('1vp') + //工具栏 + Row() { + TitleColumnSub(); + }.height('4%') + .width('100%') + .borderWidth('1vp') + .align(Alignment.Start) Row() { //左侧边导航区 LeftSideTab().borderWidth('1vp').width('20%'); @@ -25,6 +34,7 @@ struct Index { .align(Alignment.Center) }.height('80%') .padding(1) + .padding(1) Column(){ Text('状态栏').height('100%').width('100%') }.height('5%').borderWidth('1vp') diff --git a/entry/src/main/ets/pages/LayoutInterface/Layout/TitleSelectionMode.ets b/entry/src/main/ets/pages/LayoutInterface/Layout/TitleSelectionMode.ets new file mode 100644 index 00000000..d680cb4e --- /dev/null +++ b/entry/src/main/ets/pages/LayoutInterface/Layout/TitleSelectionMode.ets @@ -0,0 +1,15 @@ +import { TitleButton } from "../Interface/TitleButtonInterface"; +import { TitleModelType } from "./TitleModelType"; + +export let SelectionMode:Array=[ + {eModel:[TitleModelType.BASE],eName:"实体特征",eNamed:"",eIcon:"",eTips:"正三轴测图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"曲线特征",eNamed:"",eIcon:"",eTips:"前视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"加工特征",eNamed:"",eIcon:"",eTips:"前视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"基准",eNamed:"",eIcon:"",eTips:"正等测图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"边",eNamed:"",eIcon:"",eTips:"前视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"面",eNamed:"",eIcon:"",eTips:"左视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"线",eNamed:"",eIcon:"",eTips:"右视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"视图",eNamed:"",eIcon:"",eTips:"前视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"图像",eNamed:"",eIcon:"",eTips:"俯视图",eEvent:""}, +] + diff --git a/entry/src/main/ets/pages/LayoutInterface/Layout/TitleViewData.ets b/entry/src/main/ets/pages/LayoutInterface/Layout/TitleViewData.ets new file mode 100644 index 00000000..3c6e1732 --- /dev/null +++ b/entry/src/main/ets/pages/LayoutInterface/Layout/TitleViewData.ets @@ -0,0 +1,15 @@ +import { TitleButton } from "../Interface/TitleButtonInterface"; +import { TitleModelType } from "./TitleModelType"; + +export let TitleViewMenu:Array=[ + {eModel:[TitleModelType.BASE],eName:"正三轴测图",eNamed:"",eIcon:"base_view_tfr_tri",eTips:"正三轴测图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"俯视图",eNamed:"",eIcon:"base_view_top",eTips:"俯视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"正等测图",eNamed:"",eIcon:"base_view_tfr_iso",eTips:"正等测图",eEvent:""}, + + {eModel:[TitleModelType.BASE],eName:"左视图",eNamed:"",eIcon:"base_view_left",eTips:"左视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"前视图",eNamed:"",eIcon:"base_view_front",eTips:"前视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"右视图",eNamed:"",eIcon:"base_view_right",eTips:"右视图",eEvent:""}, + + {eModel:[TitleModelType.BASE],eName:"后视图",eNamed:"",eIcon:"base_view_back",eTips:"后视图",eEvent:""}, + {eModel:[TitleModelType.BASE],eName:"仰视图",eNamed:"",eIcon:"base_view_bottom",eTips:"仰视图",eEvent:""}, +] \ No newline at end of file diff --git a/entry/src/main/ets/pages/TitleTabLayout/TitleColumnSub.ets b/entry/src/main/ets/pages/TitleTabLayout/TitleColumnSub.ets new file mode 100644 index 00000000..81e5e655 --- /dev/null +++ b/entry/src/main/ets/pages/TitleTabLayout/TitleColumnSub.ets @@ -0,0 +1,53 @@ +import { TextComboBox,TextInputComboBox } from "../CustomStyle/StyleComboBox"; +import { TitleButton } from "../LayoutInterface/Interface/TitleButtonInterface"; +import { ViewDialog } from "../CustomStyle/StyleDialog" +import { TitleViewMenu } from "../LayoutInterface/Layout/TitleViewData"; +import {SelectionMode} from "../LayoutInterface/Layout/TitleSelectionMode" +@ComponentV2 +export struct TitleColumnSub { + //Title下的子行的功能 + @Local layerArray: Array = []; + @Local dX:number=0; + @Local dY:number=0; + @Local viewDialog:CustomDialogController|undefined=undefined; + + private ViewDialog(): CustomDialogController { + return new CustomDialogController({ + builder: ViewDialog(), // 确保 ViewDialog 组件已正确定义 + width: '130vp', + height: '118vp', + borderWidth: 1, + cornerRadius: 5, + isModal: true, + alignment: DialogAlignment.TopStart, + offset: { dx: this.dX, dy: this.dY }, + }); + } + build(){ + Row({space:5}){ + Image($r('app.media.base_seetings')) + .height(25) + .width(25) + .padding(1) + Text('拾取类型过滤器:') + TextComboBox({menu:SelectionMode}) + .width('100vp') + .borderWidth(1) + .borderColor(Color.Grey) + .borderRadius(5) + Text('图层:') + TextInputComboBox({menu:this.layerArray}).width('10%') + Button('坐标轴') + Image($r('app.media.' + TitleViewMenu[0].eIcon)).onClick((event) => { + this.dX=event.windowX + this.dY=event.windowY + if(this.viewDialog==undefined){ + this.viewDialog=this.ViewDialog(); + } + this.viewDialog.open(); + }).width('35vp') + .height('35vp') + Button('显示类型') + }.margin({ top: 1, left: 1, bottom: 1, right: 1 }) + } +} \ No newline at end of file diff --git a/entry/src/main/resources/base/media/base_view_back.bmp b/entry/src/main/resources/base/media/base_view_back.bmp new file mode 100644 index 00000000..e933954a Binary files /dev/null and b/entry/src/main/resources/base/media/base_view_back.bmp differ diff --git a/entry/src/main/resources/base/media/base_view_bottom.bmp b/entry/src/main/resources/base/media/base_view_bottom.bmp new file mode 100644 index 00000000..32aa8e9b Binary files /dev/null and b/entry/src/main/resources/base/media/base_view_bottom.bmp differ diff --git a/entry/src/main/resources/base/media/base_view_front.bmp b/entry/src/main/resources/base/media/base_view_front.bmp new file mode 100644 index 00000000..c6560edb Binary files /dev/null and b/entry/src/main/resources/base/media/base_view_front.bmp differ diff --git a/entry/src/main/resources/base/media/base_view_left.bmp b/entry/src/main/resources/base/media/base_view_left.bmp new file mode 100644 index 00000000..dd542638 Binary files /dev/null and b/entry/src/main/resources/base/media/base_view_left.bmp differ diff --git a/entry/src/main/resources/base/media/base_view_right.bmp b/entry/src/main/resources/base/media/base_view_right.bmp new file mode 100644 index 00000000..62be7a05 Binary files /dev/null and b/entry/src/main/resources/base/media/base_view_right.bmp differ diff --git a/entry/src/main/resources/base/media/base_view_tfr_iso.bmp b/entry/src/main/resources/base/media/base_view_tfr_iso.bmp new file mode 100644 index 00000000..36d1dd5f Binary files /dev/null and b/entry/src/main/resources/base/media/base_view_tfr_iso.bmp differ diff --git a/entry/src/main/resources/base/media/base_view_tfr_tri.bmp b/entry/src/main/resources/base/media/base_view_tfr_tri.bmp new file mode 100644 index 00000000..4dd14793 Binary files /dev/null and b/entry/src/main/resources/base/media/base_view_tfr_tri.bmp differ diff --git a/entry/src/main/resources/base/media/base_view_top.bmp b/entry/src/main/resources/base/media/base_view_top.bmp new file mode 100644 index 00000000..50145278 Binary files /dev/null and b/entry/src/main/resources/base/media/base_view_top.bmp differ