#geometry #winapi #direct-x #direct2d #2d #memory-layout #graphics

geoms

针对Microsoft平台优化,与DirectX和Direct2D具有相同内存布局的几何基元类型

2个版本

0.0.1 2022年12月10日
0.0.0 2022年12月9日

#7 in #direct2d

MIT许可

32KB
478

geoms

Documentation MIT licensed Build Status

Microsoft平台的几何库 - 一组针对原生API(Win32Direct2DDirect3D)优化的几何基元类型。

该库的目标是提供一种符合Rust语言习惯但无成本的接口,用于在Microsoft图形API中常用的几何类型。与优秀的::num_traits库集成,允许几何类型用任意数值类型表示,并允许在更高层次类型的不同数值表示之间进行转换。

→ 文档

可选功能

  • 如果启用feature "d2d",则某些基元可以直接转换为Direct2D结构。
  • 如果启用feature "win32",则某些基元可以直接转换为Win32结构。

用法

要使用geoms,请将以下内容添加到您的Cargo.toml

[dependencies]
geoms = "0.0.1"

要启用对原生Microsoft类型的可选转换,激活适当的功能。例如,为Direct2D支持

[dependencies]
geoms = { version = "0.0.1", features = ["d2d"] }

示例

use ::geoms::d2::{Rect2D, Point2D, Size2D};
use ::windows::Win32::Graphics::Direct2D::Common::D2D_RECT_F;

// Construct our Rust rectangle, 100x20 pixels at point 10,10
let rect = Rect2D::with_size_and_origin(
    Size2D { width: 100.0, height: 20.0 },
    Point2D { x: 10.0, y: 10.0 },
);

// Convert our Rust rectangle into a Direct2D rectangle. This merely
// transmutes under the hood as the memory layouts are the same.
let d2d_rect: D2D_RECT_F = rect.into();

// Confirm our Direct2D rectangle has the expected properties.
assert_eq!(rect.left, 10.0);
assert_eq!(rect.right, 110.0);

// Cast our entire rect to a u32 representation of the same primitive:
let u_rect = rect.cast::<u32>();
assert_eq!(u_rect.left, 10);
assert_eq!(u_rect.right, 110);

当前状态

只有少数几个基元被实现,以满足个人项目需求。API是不稳定的,预计会发生变化。

许可

本项目采用MIT许可

贡献

除非您明确声明,否则您提交给本项目并有意包含在内的任何贡献,都应按MIT许可,不附加任何额外条款或条件。

依赖关系

~0.1–38MB
~527K SLoC