WFP3D繪圖

来源:https://www.cnblogs.com/wjygxjz/archive/2023/09/29/17736946.html
-Advertisement-
Play Games

WPF本身不支持直接的3D繪圖,但是它提供了一些用於實現3D效果的高級技術。 如果你想要在WPF中進行3D繪圖,你可以使用兩種主要的方法: WPF 3D:這是一種在WPF應用程式中創建3D圖形的方式。WPF 3D提供了一些基本的3D形狀(如立方體、球體和錐體)以及一些用於控制3D場景和對象的工具(如 ...


WPF本身不支持直接的3D繪圖,但是它提供了一些用於實現3D效果的高級技術。 如果你想要在WPF中進行3D繪圖,你可以使用兩種主要的方法:
  1. WPF 3D:這是一種在WPF應用程式中創建3D圖形的方式。WPF 3D提供了一些基本的3D形狀(如立方體、球體和錐體)以及一些用於控制3D場景和對象的工具(如相機、光源和材質)。
  在WPF中,3D對象模型的材質可以使用以下三種
  1. DiffuseMaterial:漫反射,反射場景光效果
  2. EmissiveMaterial:自發光,類似於電燈 
  3. SpecularMaterial:全反射,可以映射場景 貼圖
在WPF中,一個3D模型的材質,就是決定模型看起來是什麼樣子的一種很重要的元素,如粗糙度、顏色、發光度等   WPF 3D對象模型光源如下 AmbientLight:環境光-  提供環境光,會照亮所有的對象,而不考慮對象的位置或方向。 DirectionalLight:平行光  -  它像遠處的光源那樣照亮(如太陽光),只具有一個Direction屬性,沒有位置信息,因此不直接投射到任何特定的對象上,而是照亮場景中的所有對象。 PointLight:點光源 -  像近處的光源那樣照亮,具有一個位置並從該位置投射光,場景中的對象是根據對象相對於光源的位置和距離而被照亮的。 SpotLight:聚光燈  -  從PointLight繼承,它的照亮方式與PointLight類似,但是它既具有位置又具有方向。 相關屬性    Color:燈光顏色    Direction:光線方向(平行光、聚光燈)    Position:光源坐標(點光源、聚光燈)    Range:燈光範圍(點光源)    InnerConeAngle:內光柱照射角度(聚光燈)    OuterConeAngle:外光柱照射角度(聚光燈)  
屬性 說明 備註
MeshGemetry3D 網格標簽  
Positions 呈現3D圖形的標簽  Positions="0,0,0(x,y,z)     3,0,0      3,2,0      0,2,0" 一個面的4個點
TraiangleIndices 3 角形創建 TriangleIndices ="0,3,2(第一組) 0,1,2(第二組)" 設置Positions的3個點組成一個三角行
OrthographicCamera   正交相機(遠近比例都一樣-很少用)  
PerspectiveCamera     透視相機(近比例長遠比例小,符合我們正常觀察事物的視覺-常用)  
TextureCoordinates 設置平面對象與3D對象的映射關係-用來解決平面設置背景圖顯示問題-如果不設置這個屬性平面設置的背景圖不顯示 TextureCoordinates="1,1 1,0 0,0 0,1"

相機標簽對象屬性

屬性 說明 備註
Position 相機的空間坐標(X,Y,Z) Position="100,100,100" 設置視角x,y,z
LookDirection 觀察方向,向量,相機觀察口朝向 LookDirection="-2,-2,-2" 設置相機的觀看視角-相機觀察的方向
FieldOfView (透視相機屬性) / 視野範圍,一個值 FieldOfView="90" 設置相機與觀看物體的距離,離得遠觀看物體區域範圍大,離得近觀看物體區域範圍小
Width (正交相機屬性)(焦距),視野範圍 Width="50"
UpDirection 相機上方方向,控制相機觀察口旋轉 UpDirection="0,1,0" (x, y,z)設置相機視口的旋轉角度,斜著拍還是正著拍
FarPlaneDistance 遠景距離,大於這個距離的場景不渲染 FarPlaneDistance="1000" 設置相機遠處景色的渲染範圍,如果值設置的比較小,遠處景色是模糊的
NearPlaneDistance 近景距離,小於這個距離的場景不渲染 NearPlaneDistance="1" 設置相機近處的晶圓渲染範圍,如果值越大,近處景色是模糊的
<!--設置三維地球實例旋轉動畫-->
 <Window.Triggers>
    <EventTrigger RoutedEvent="Window.Loaded">
        <BeginStoryboard>
            <!--RepeatBehavior="Forever" 設置旋轉動畫一直旋轉-->
            <Storyboard RepeatBehavior="Forever">
                <!--Duration="0:0:7" 設置播放時長-->
                <!--Storyboard.TargetName="aar" 設置要旋轉的控制項-->
                <!--Storyboard.TargetProperty="Angle" 設置旋轉方式-->
                <!--From="0" 設置動畫起始值-->
                <!--To="360" 設置旋轉角度-->
                <DoubleAnimation Duration="0:0:7"
                             Storyboard.TargetName="aar"
                             Storyboard.TargetProperty="Angle"
                             From="0"
                             To="360"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Window.Triggers>
<Grid>
    <!--畫3D圖標簽-->
    <!--點動成線-線動成面-面動成體-->
    <Viewport3D>
        <!--第一步在3D世界通過相機來觀察這個世界,把這個世界呈現在平面圖上。-->
        <!--相機標簽-設置相機的相關參數-->
        <Viewport3D.Camera>
            <!-- PerspectiveCamera標簽-透視相機(近比例長遠比例小,符合我們正常觀察事物的視覺-常用)-->
            <!--Position="100,100,100" 設置視角x,y,z-->
            <!--LookDirection="-2,-2,-2" 設置相機的觀看視角-相機觀察的方向-->
            <!--FieldOfView="90" 調整相機焦距 設置相機與觀看物體的距離,離得遠觀看物體區域範圍大,離得近觀看物體區域範圍小 -->
            <!--UpDirection="0,1,0" (x, y,z)設置相機視口的旋轉角度,斜著拍還是正著拍 -->
            <!--FarPlaneDistance="1000" 設置相機遠處景色的渲染範圍,如果值設置的比較小,遠處景色是模糊的-->
            <!--NearPlaneDistance="1" 設置相機近處的晶圓渲染範圍,如果值越大,近處景色是模糊的-->
            <PerspectiveCamera Position="100,100,100"
                   LookDirection="-2,-2,-2"
                   FieldOfView="90"
                   UpDirection="0,1,0"
                   FarPlaneDistance="1000"
                   NearPlaneDistance="1">
            </PerspectiveCamera>
            <!--正交相機(遠近比例都一樣-很少用)-->
            <!--Width="50" 相當與透視相機的視野範圍屬性-->
            <!--<OrthographicCamera Position="100,100,100"
                    LookDirection="-2,-2,-2"
                    Width="50"
                    UpDirection="0,1,0"
                    FarPlaneDistance="1000"
                     NearPlaneDistance="1"/>-->
        </Viewport3D.Camera>
        <!--第二步在3D世界設置光源進來,沒有光源全是黑的呀-->
        <!--光源標簽-設置光源的相關屬性-->
        <ModelVisual3D>
            <!--光源內容標簽-->
            <ModelVisual3D.Content>
                <!--多個光源可以組合使用-會出現不同的效果-->
                <Model3DGroup>
                    <!--環境游標簽    -->
                    <!--Color="White"-設置環境光顏色 -->
                    <!--<AmbientLight Color="White"/>-->
                       
                    <!--平行光-設置某一個方向上照射的光-平行光不發散 -->
                    <!--Direction="-1,-1,-1" (x,y,z)三個方向照射的光 設置平行光的照射方向-->
                    <!--<DirectionalLight Color="White" Direction="-1,-1,-1"/>-->
                       
                    <!--點光源-點光源是向四面八方發散的光源 -->
                    <!--Position="100,100,100" (x,y,z) 設置光源點-->
                    <!--Range="200" 設置光源的照射範圍-->
                    <!--<PointLight Color="White" Position="100,100,100" Range="200"/>-->
                       
                    <!--射燈光源(聚光燈,手電筒筒)-某一個方向去發射光源-相當於手電筒筒有一個中心的光柱(比較亮的)以及兩遍發散的光源(相對較暗) -->
                    <!--InnerConeAngle="100" 設置中心範圍光柱的角度-->
                    <!--OuterConeAngle="40" 設置兩遍光源的範圍角度-->
                    <!--Position="50,50,50" 設置光源的中心位置-->
                    <!--Direction="-1,-1,-1" (x,y,z)三個方向照射的光 設置光源的照射方向-->
                    <SpotLight Color="Orange" InnerConeAngle="100"
               OuterConeAngle="40"
               Position="50,50,50"
               Direction="-1,-1,-1"/>
                </Model3DGroup>
            </ModelVisual3D.Content>
        </ModelVisual3D>
        <!--3D圖形的第一個面 可以把所有的面放在一起寫-->
        <!--3DUIElement標簽-固定寫法-->
        <ModelUIElement3D>
            <ModelUIElement3D.Model>
                <!--GeometryModel3D網格標簽-->
                <GeometryModel3D>
                    <!--第三步物體需要呈現出來需要材質-->
                    <!--3D的材質 標簽-->
                    <GeometryModel3D.Material>
                        <MaterialGroup>
                            <!--漫反射的一種材質 材質是與網格屬性標簽組合在一起使用的-->
                            <!--DiffuseMaterial 慢反射材質標簽-->
                            <!--Brush 設置材質顏色或圖片-->
                            <!--<DiffuseMaterial Brush="Orange"/>-->
                            <!--3D面設置背景圖-需要在網格標簽中設置TextureCoordinates="0,1 0,0 1,0 1,1"屬性,背景圖顯示方向,才能顯示出背景圖 -->
                            <DiffuseMaterial>
                                <DiffuseMaterial.Brush>
                                    <ImageBrush ImageSource="Arrow.png"/>
                                </DiffuseMaterial.Brush>
                            </DiffuseMaterial>
                            <!--自發光-->
                            <!--<EmissiveMaterial Brush="Red"/>-->
                            <!--<SpecularMaterial Brush="Blue"/>-->
                        </MaterialGroup>
                    </GeometryModel3D.Material>
                    <!--網格標簽-->
                    <GeometryModel3D.Geometry>
                        <!-- 呈現3D圖形的標簽  Positions="0,0,0(x,y,z)     3,0,0      3,2,0      0,2,0" 一個面的4個點-->
                        <!--TriangleIndices ="0,2,3(第一組-這裡的坐標點需要逆時針順序) 0,1,2(第二組)" 設置Positions的3個點組成一個三角行 -->
                        <!--這裡如果呈現的是三角行而不是四邊行的畫,是因為TriangleIndices="0,2,3 0,1,2"的畫點順序需要逆時針順序-->
                        <!--TextureCoordinates 設置平面對象與3D對象的映射關係-用來解決平面設置背景圖顯示問題-如果不設置這個屬性平面設置的背景圖不顯示-->
                        <MeshGeometry3D Positions="0,0,0     3,0,0      3,2,0      0,2,0"
                                 TriangleIndices="0,2,3 0,1,2"
                                        TextureCoordinates="1,1 1,0 0,0 0,1"/>  <!--箭頭向下-->
                        <!--TextureCoordinates="1,1 0,1 0,0 1,0"/> 箭頭向左-->
                        <!--TextureCoordinates="0,1 1,1 1,0 0,0"/> 箭頭向右-->
                        <!--TextureCoordinates="0,1 0,0 1,0 1,1"/>--><!--  箭頭向上-->
                    </GeometryModel3D.Geometry>
                </GeometryModel3D>
            </ModelUIElement3D.Model>
        </ModelUIElement3D>
        <!--3D圖形的第二個面 可以把所有的面放在一起寫 這裡沒有放在一起寫是因為可以給每個面設置不同的顏色-->
        <!--3DUIElement標簽-固定寫法-->
        <ModelUIElement3D>
            <ModelUIElement3D.Model>
                <!--GeometryModel3D網格標簽-->
                <GeometryModel3D>
                    <!--第三步物體需要呈現出來需要材質-->
                    <!--3D的材質 標簽-->
                    <GeometryModel3D.Material>
                        <MaterialGroup>
                            <!--漫反射的一種材質 材質是與網格屬性標簽組合在一起使用的-->
                            <!--DiffuseMaterial 慢反射材質標簽-->
                            <!--Brush 設置材質顏色或圖片-->
                            <DiffuseMaterial Brush="Red"/>
                            <!--<DiffuseMaterial>
                     <DiffuseMaterial.Brush>
                         <ImageBrush ImageSource="Arrow.png"/>
                     </DiffuseMaterial.Brush>
                 </DiffuseMaterial>-->
                            <!--自發光 標簽-用於設置在沒有光源的情況下可以看見自發光顏色-在有光源的情況下自發光顏色會影響到材質顏色的顯示 -->
                            <!--<EmissiveMaterial Brush="Green"/>-->
                            <!--全反射標簽 目前只是瞭解一下-->
                            <!--<SpecularMaterial Brush="Blue"/>-->
                        </MaterialGroup>
                    </GeometryModel3D.Material>
                    <!--網格標簽-->
                    <GeometryModel3D.Geometry>
                        <!-- 呈現3D圖形的標簽  Positions="0,0,0(x,y,z)     3,0,0      3,2,0      0,2,0" 一個面的4個點-->
                        <!--TriangleIndices ="0,2,3(第一組-這裡的坐標點需要逆時針順序) 0,1,2(第二組)" 設置Positions的3個點組成一個三角行 -->
                        <!--這裡如果呈現的是三角行而不是四邊行的畫,是因為TriangleIndices="0,2,3 0,1,2"的畫點順序需要逆時針順序-->
                        <MeshGeometry3D Positions="3,2,1     3,2,0      3,0,0      3,0,1"
                      TriangleIndices="0,3,1    1,3,2"/>
                    </GeometryModel3D.Geometry>
                </GeometryModel3D>
            </ModelUIElement3D.Model>
        </ModelUIElement3D>
        <!--三維地球實例-->
        <!--3DUIElement標簽-固定寫法-->
        <ModelUIElement3D>
            <!--3D圖像旋轉標簽-->
            <ModelUIElement3D.Transform>
                <!--旋轉標簽分組-->
                <Transform3DGroup>
                    <!--設置旋轉中心-->
                    <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                        <!--設置旋轉角度-->
                        <RotateTransform3D.Rotation>
                            <!--設置沿著x軸旋轉 -90度-->
                            <AxisAngleRotation3D Axis="1,0,0" Angle="-90"/>
                        </RotateTransform3D.Rotation>
                    </RotateTransform3D>
                    <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                        <RotateTransform3D.Rotation>
                            <!--沿著Y軸旋轉-通過後臺可設置地球旋轉-->
                            <AxisAngleRotation3D Axis="0,1,0" x:Name="aar"/>
                        </RotateTransform3D.Rotation>
                    </RotateTransform3D>
                </Transform3DGroup>
            </ModelUIElement3D.Transform>
            <!--3D標簽-->
            <ModelUIElement3D.Model>
                <!--GeometryModel3D網格標簽-->
                <GeometryModel3D x:Name="gm">
                    <!--3D的材質 標簽-->
                    <GeometryModel3D.Material>
                        <!--設置3D材質使用圖片-->
                        <DiffuseMaterial>
                            <DiffuseMaterial.Brush>
                                <ImageBrush ImageSource="Earth.jpg"/>
                            </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                    </GeometryModel3D.Material>
                </GeometryModel3D>
            </ModelUIElement3D.Model>
        </ModelUIElement3D>
    </Viewport3D>
</Grid>

  後臺關於3D地球的代碼

public MainWindow()
{
    InitializeComponent();
    // 綁定載入事件
    this.Loaded += MainWindow_Loaded;
}
/// <summary>
/// 窗體載入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    this.gm.Geometry = this.SetEarth(180, 180, 50);
}
/// <summary>
/// 生成三維地球演算法
/// 圓弧的計算公式
/// </summary>
/// <param name="numx">緯度方向切多少份</param>
/// <param name="numz">精度方向切多少份</param>
/// <param name="r">地球半徑</param>
/// <returns></returns>
private MeshGeometry3D SetEarth(int numx, int numz, double r = 3)
{
    MeshGeometry3D mesh = new MeshGeometry3D();
    double dTh = 2 * Math.PI / numx;
    double dPhi = Math.PI / numz;
    double X(double th, double phi) => r * Math.Sin(phi) * Math.Cos(th);
    double Y(double th, double phi) => r * Math.Sin(phi) * Math.Sin(th);
    double Z(double phi) => r * Math.Cos(phi);
    // Make the points.
    for (int i = 0; i <= numx; i++)  // 緯度方向迴圈次數
        for (int j = 0; j <= numz; j++) // 精度方向迴圈次數
        {   // 這裡使用三角函數進行計算的
            var th = i * dTh;
            var phi = j * dPhi;
            // 坐標點-用於畫三角形的坐標點
            mesh.Positions.Add(new Point3D(X(th, phi), Y(th, phi), Z(phi)));
            // 用於建立與圖片的映射關係
            mesh.TextureCoordinates.Add(new Point(th, phi));
        }
    // 生成三角形-每三個坐標點組織一個面出來
    for (int i = 0; i < numx; i++)
        for (int j = 0; j < numz; j++)
        {
            int i1 = i * (numz + 1) + j;
            int i2 = i1 + 1;
            int i3 = i2 + (numz + 1);
            int i4 = i3 - 1;
            mesh.TriangleIndices.Add(i1);
            mesh.TriangleIndices.Add(i2);
            mesh.TriangleIndices.Add(i3);
            mesh.TriangleIndices.Add(i1);
            mesh.TriangleIndices.Add(i3);
            mesh.TriangleIndices.Add(i4);
        }
    return mesh;
}

  代碼實例效果圖:

這個3D動畫地球是可以旋轉的

 3D圖片用於輔助尋找3d坐標點順序

 

3D面設置背景圖顯示方向  通過TextureCoordinates屬性設置箭頭的顯示方向 TextureCoordinates="1,1 1,0 0,0 0,1"/>  <!--箭頭向下--> <!--TextureCoordinates="1,1 0,1 0,0 1,0"/> 箭頭向左--> <!--TextureCoordinates="0,1 1,1 1,0 0,0"/> 箭頭向右--> <!--TextureCoordinates="0,1 0,0 1,0 1,1"/>--><!--  箭頭向上-->

 

 本文章大半部分素材來自於朝夕教育,技術整理的不好。。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 針對改動範圍大、影響面廣的需求,我通常會問上線了最壞情況是什麼?應急預案是什麼?你帶開關了嗎?。當然開關也是有成本的,接下來本篇跟大家一起交流下高頻發佈支撐下的功能開關技術理論與實踐結合的點點滴滴。 ...
  • 在前面幾天中,我們學習了Dart基礎語法、可迭代集合,它們是Flutter應用研發的基本功。今天,我們繼續學習Flutter應用另一個必須掌握知識點:非同步編程(即Future和async/await)。它類似於Java中的FutureTask、JavaScript中的Promise。它是後續Flut... ...
  • 一、直充內充(充值方式) 直充: 包裝套餐直接充值到上游API系統。【PID/Smart】 (如:支付寶、微信 話費/流量/語音/簡訊 等 充值系統)。 內充(套餐打包常見物聯卡系統功能): 套餐包裝 適用於不同類型套餐 如 流量、簡訊、語音 等。 (目前已完善流量邏輯) 二、套餐與計費產品 計費產 ...
  • QStandardItemModel 類作為標準模型,主打“類型通用”,前一篇水文中,老周還沒提到樹形結構的列表,本篇咱們就好好探討一下這貨。 還是老辦法,咱們先做示例,然後再聊知識點。下麵這個例子,使用 QTreeView 組件來顯示數據,使用的列表模型比較簡單,只有一列。 #include <Q ...
  • 本文主要涉及的問題:用ElementTree和XPath讀寫XML文件;解決ElementTree新增元素後再寫入格式不統一的問題;QTableWidget單元格設置控制項 ...
  • 第一題 下列代碼輸入什麼? public class Test { public static Test t1 = new Test(); { System.out.println("blockA"); } static { System.out.println("blockB"); } publi ...
  • 從今年(2023)三月份開始,Github開始強制用戶開啟兩步驗證2FA(雙因數)登錄驗證,毫無疑問,是出於安全層面的考慮,畢竟Github賬號一旦被盜,所有代碼倉庫都會毀於一旦,關於雙因數登錄的必要性請參見:別讓你的伺服器(vps)淪為肉雞(ssh暴力破解),密鑰驗證、雙向因數登錄值得擁有。 雙因 ...
  • 一、XML概述 XML(可擴展標記語言)是一種用於描述數據的標記語言,旨在提供一種通用的方式來傳輸和存儲數據,特別是Web應用程式中經常使用的數據。XML並不預定義標記。因此,XML更加靈活,並且可以適用於廣泛的應用領域。 XML文檔由元素(element)、屬性(attribute)和內容(con ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...