同步仿真框架并接入AMESim气动组件
This commit is contained in:
1 parent
420bafeb4e
commit
db4bdb4b70
109 files changed
+26920
-420
No files matched your search
+4257
-279
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,53 @@
|
||||
import { useLayoutEffect } from "react";
|
||||
import { useReactFlow, useStore } from "@xyflow/react";
|
||||
|
||||
type AutoFitViewProps = {
|
||||
enabled?: boolean;
|
||||
expectedNodeCount: number;
|
||||
minZoom?: number;
|
||||
padding?: number;
|
||||
requestKey: number | string;
|
||||
};
|
||||
|
||||
export function AutoFitView({
|
||||
enabled = true,
|
||||
expectedNodeCount,
|
||||
minZoom = 0.1,
|
||||
padding = 0.18,
|
||||
requestKey,
|
||||
}: AutoFitViewProps) {
|
||||
const expectedNodesAreMeasured = useStore((state) => {
|
||||
if (expectedNodeCount <= 0 || state.nodeLookup.size !== expectedNodeCount) {
|
||||
return false;
|
||||
}
|
||||
for (const node of state.nodeLookup.values()) {
|
||||
if (
|
||||
!node.measured.width ||
|
||||
!node.measured.height ||
|
||||
node.measured.width <= 0 ||
|
||||
node.measured.height <= 0
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
const { fitView } = useReactFlow();
|
||||
|
||||
useLayoutEffect(() => {
|
||||
if (!enabled || !expectedNodesAreMeasured) {
|
||||
return;
|
||||
}
|
||||
|
||||
void fitView({ duration: 0, minZoom, padding });
|
||||
}, [
|
||||
enabled,
|
||||
expectedNodesAreMeasured,
|
||||
fitView,
|
||||
minZoom,
|
||||
padding,
|
||||
requestKey,
|
||||
]);
|
||||
|
||||
return null;
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,43 @@
|
||||
export type WorkspaceView = "modeling" | "results";
|
||||
|
||||
type WorkspaceViewTabsProps = {
|
||||
activeView: WorkspaceView;
|
||||
hasResults: boolean;
|
||||
hasUnreadResults?: boolean;
|
||||
onViewChange: (view: WorkspaceView) => void;
|
||||
};
|
||||
|
||||
export function WorkspaceViewTabs({
|
||||
activeView,
|
||||
hasResults,
|
||||
hasUnreadResults = false,
|
||||
onViewChange,
|
||||
}: WorkspaceViewTabsProps) {
|
||||
return (
|
||||
<div aria-label="工作区视图" className="workspace-view-tabs" role="tablist">
|
||||
<button
|
||||
aria-selected={activeView === "modeling"}
|
||||
className={activeView === "modeling" ? "active" : ""}
|
||||
onClick={() => onViewChange("modeling")}
|
||||
role="tab"
|
||||
type="button"
|
||||
>
|
||||
建模
|
||||
</button>
|
||||
<button
|
||||
aria-label={hasUnreadResults ? "结果,有新的仿真结果" : "结果"}
|
||||
aria-selected={activeView === "results"}
|
||||
className={activeView === "results" ? "active" : ""}
|
||||
onClick={() => onViewChange("results")}
|
||||
role="tab"
|
||||
title={hasUnreadResults ? "有新的仿真结果" : undefined}
|
||||
type="button"
|
||||
>
|
||||
结果
|
||||
{hasResults && hasUnreadResults ? (
|
||||
<span aria-hidden="true" className="result-available-dot" />
|
||||
) : null}
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
+1982
-76
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user