我正在为WPF中的AR Drone Quadcopter创建一个界面.
我在我的HUD上添加了一些东西以使其可用.
HUD上更先进的控制之一是人工地平线,它告诉飞行员飞行器当前与地平线的对齐.
我有这3个PNG



我将移动的第一个图像(工艺的当前间距)和旋转(当前的工艺卷).
我将把第二张图像放在第一张图片上,这张图片只围绕中心轴旋转,它有一定程度的刻度,可以更直观地显示工艺品的滚动.
最后一个我将放在第二个,这个图像只是一个视觉改进者.
然后我想掩盖第一张图像,这样你才能看到图像2中圆圈内的什么.
最后但并非最不重要的是,我想为其添加一个文本块并显示当前的高度
结果看起来像这样

我知道如何旋转和移动图像,但如何将图像放在彼此之上,如何屏蔽第一张图像?
编辑:感谢本我已经走到了这一步:

但我还需要翻译图像Y位置(飞机的俯仰)

当我添加translate转换时,我还翻译了Clip(Mask)如何在不移动蒙版的情况下翻译图像?
我有这个xaml
<Image Width="240" Height="240">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup>
<DrawingGroup>
<DrawingGroup.Transform>
<TransformGroup>
<RotateTransform Angle="-15" CenterX="120" CenterY="120" />
<TranslateTransform Y="-20" />
</TransformGroup>
</DrawingGroup.Transform>
<ImageDrawing ImageSource="Images\pNxVK.png" Rect="0,0,240,240" />
</DrawingGroup>
<DrawingGroup.ClipGeometry>
<EllipseGeometry Center="120,120" RadiusX="60" RadiusY="60" />
</DrawingGroup.ClipGeometry>
</DrawingGroup>
<DrawingGroup>
<DrawingGroup>
<!--<DrawingGroup.Transform>
<RotateTransform Angle="-15" CenterX="120" CenterY="120" />
</DrawingGroup.Transform>-->
<ImageDrawing ImageSource="Images\zUr8D.png" Rect="0,0,240,240" />
</DrawingGroup>
<ImageDrawing ImageSource="Images\XPZW9.png" Rect="0,0,240,240" />
</DrawingGroup>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
Run Code Online (Sandbox Code Playgroud)
xaml的结果是(正确的大小)

如果我取消注释上面的xaml中的旋转变换我得到这个(错误的大小)

在MVC中你可以做到
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy h:mm tt}"]
Run Code Online (Sandbox Code Playgroud)
这将转化为
10/12/2011 1:30 PM
这对于en-US用户来说是正确的
但是让我们说瑞典用户访问该网站(sv-SE)
然后我想要
2011-10-12 13:30
所以我不能使用格式字符串..如果我从模型中删除格式属性我会得到
2011年12月10日下午1:30:20为en-US和2011-10-12 13:30:20为sv-SE
如何在没有秒的情况下获得正确的格式?
我正在使用这篇文章让ninject与Asp.Net WebApi一起工作
http://www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api-source/
这打破了所有范围,例如InSingletonScope
编辑:答案在评论中
好吧,我大部分都弄明白了.问题是NinjectResolver的BeginScope方法返回一个新的NinjectScope,它将_kernel.BeginBlock()传递给构造函数.这会将实例从绑定中声明的范围重新关联到新的激活块.
因此,曾经作用于请求的内容现在作用于激活块.
为了解决这个问题,我改变了NinjectResolver:
public IDependencyScope BeginScope(){return new NinjectScope(_kernel); }
然后,为了防止NinjectScope处理内核本身,我在NinjectScope的Dispose块中注释掉了所有内容.
据我所知,这不应该产生太大影响.内置的缓存和收集机制将像往常一样工作,轮询GC并自动在缓存中部署实例.
我认为问题的核心在于WebApi本身正在尝试完成每个请求范围管理的工作,但Ninject已经有办法完成这项工作.这两种不同的范围机制似乎并不和谐.
我正在使用Avalondock 2.x作为我的一个开源项目,如果你关闭它时文档很脏,你应该可以取消关闭.
我正在使用Caliburn Micro和Coroutine,只有我能够解决它的方法是使用CM附加到事件
<i:EventTrigger EventName="DocumentClosing">
<cal:ActionMessage MethodName="DocumentClosing">
<cal:Parameter Value="$documentcontext" />
<cal:Parameter Value="$eventArgs" />
</cal:ActionMessage>
</i:EventTrigger>
Run Code Online (Sandbox Code Playgroud)
事件arg有取消属性.这个approuch的问题是它不是很MVVM友好,我已经创建了一个小帮手方法来Coroutinify这个像
public IEnumerable<IResult> Coroutinify(IEnumerable<IResult> results, System.Action cancelCallback)
{
return results.Select(r =>
{
if (r is CancelResult)
cancelCallback();
return r;
});
}
Run Code Online (Sandbox Code Playgroud)
用过像
public IEnumerable<IResult> DocumentClosing(ScriptEditorViewModel document, DocumentClosingEventArgs e)
{
return Result.Coroutinify(HandleScriptClosing(document), () => e.Cancel = true);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但它有点笨拙等,是否有更多MVVM方式关闭Avalondock文件取消能力?
编辑:源代码
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Shells/MainShellView.xaml#L29
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Shells/MainShellViewModel.cs#L110
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Result/ResultFactory.cs#L49
我正在考虑将该库升级到SignalR 2.0
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy
我希望它通过IAppBuilder接口支持2.0 Owin管道,而不是RouteCollection像SignalR 1.x那样使用。
问题是,如何从IAppBuilder获取路由集合?我需要它来注册处理我的自定义js脚本的自定义IHttpHandler(例如SignalR注册其中心脚本)
我的lib的1.x设置看起来像这样
public static class SignalRConfig
{
public static void Register(RouteCollection routes)
{
routes.MapHubs();
routes.MapEventProxy<Contracts.Events.Event>();
}
}
Run Code Online (Sandbox Code Playgroud)
我对2.0配置的目标是这样的
public static class SignalRConfig
{
public static void Configuration(IAppBuilder app)
{
app.MapSignalR();
app.MapEventProxy<Contracts.Events.Event>();
}
}
Run Code Online (Sandbox Code Playgroud)
我的依赖于RouteCollection的代码如下所示
public static class RouteCollectionExtensions
{
public static void MapEventProxy<TEvent>(this RouteCollection routes)
{
Bootstrapper.Init<TEvent>();
routes.Add(new Route(
"eventAggregation/events",
new RouteValueDictionary(),
new RouteValueDictionary() {{"controller", string.Empty}},
new EventScriptRouteHandler<TEvent>()));
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:看起来非常复杂,无法让Owin满足请求,我可以在SignalR 2.0中使用辅助方法来注册路由和该路由的处理程序吗?
更新: 这段代码看起来像是我在正确的轨道上
using Owin;
using SignalR.EventAggregatorProxy.Boostrap;
namespace SignalR.EventAggregatorProxy.Owin …Run Code Online (Sandbox Code Playgroud) 我有一个owin中间件,它在我的开发机器上的IIS7上工作(win7).但是当部署到2008服务器时,页面返回404
我像这样连接中间件
public static class AppBuilderExtensions
{
public static void InitTemplateStore(this IAppBuilder app, string templatePath, string fileMask)
{
TemplateStoreMiddleware.Init(templatePath, fileMask);
app.Map("/templates", subApp => subApp.Use<TemplateStoreMiddleware>());
}
}
Run Code Online (Sandbox Code Playgroud)
可以在此处找到使用中间件的代码
https://github.com/AndersMalmgren/Knockout.Bootstrap.Demo
该站点作为IIS上的默认网站下的虚拟应用程序托管
编辑:我是否需要添加默认角色之外的任何角色?
IIS正在使用StaticFile处理程序,其中offcourse是错误的,为什么会发生这种情况?
Module IIS Web Core
Notification MapRequestHandler
Handler StaticFile
Error Code 0x80070002
Requested URL http://localhost:80/knockout.bootstrap.demo/templates?root=shared
Physical Path C:\inetpub\knockout.bootstrap.demo\templates
Logon Method Anonymous
Logon User Anonymous
Run Code Online (Sandbox Code Playgroud) 我有一个使用FK ProductId有关系的实体,然后我使用复合键ProductId和VehicleId在同一个实体上有另一个关系.这不起作用.我明白了
在模型生成期间检测到一个或多个验证错误:
ProductId:Name:类型中的每个属性名称必须是唯一的.已定义属性名称"ProductId".
配置代码
public class BookingConfiguration : EntityTypeConfiguration<Booking>
{
public BookingConfiguration()
{
...
HasRequired(b => b.Product)
.WithMany(p => p.Bookings)
.Map(m =>
{
m.MapKey("ProductId");
});
HasRequired(b => b.Vehicle)
.WithMany(v => v.Bookings)
.Map(m =>
{
m.MapKey("ProductId","VehicleId");
});
}
}
Run Code Online (Sandbox Code Playgroud) 我们拥有12k tris(A货物集装箱)的资产,我们在Unity Asset商店找到了一个更好看的资产,拥有3.5k tris.然而,新资产的物理长度是旧资产的一半,因此为了保持相同的水平设计,我们需要为每个旧资产提供两个对象.
我们为对象勾选了静态批处理.
新资产与查看同一场景中同一位置的旧统计数据
tris: 800k vs 1.1m
verts 900k vs 1.4m
batches: 611 vs 490
setpass calls: 192 vs 167
Bonus
Lightmap: 150mb vs 200mb
Run Code Online (Sandbox Code Playgroud)
所以我们有更多的批次和绘制调用显然是因为对象数量较多.批量/ setpass调用中三重计数的减少是否值得增加?
我们的目标平台是SteamVR(台式电脑和HTC Vive/Rift),推荐规格为GTX 970和中端CPU