仮面's profile宇宙仮面の C# 研究室.Live SpacePhotosBlogListsMore ![]() | Help |
|
January 26 ASP.NET ルーティング 続き on 2003 Serverこの前の ASP.NET ルーティングは、VS2008 + Vista ASP.NET開発サーバーであっさり動きました。 ところが、2003 Server で試してみると動かない。 ???ということで調べてみると、 IIS の Web サイトのプロパティ → ホームディレクトリ タブ → 構成ボタンを押し下げます。 すると、アプリケーションの構成ダイアログが表示されます。 ここで、ワイルドカード アプリケーション マップで、挿入ボンタンを押す。 c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll を指定し、 ファイルの存在を確認する チェックボックスを外す。 これにより該当しないファイル拡張子の場合、aspnet_isapi.dll で、ルーティングが追加されていないかどうか確認するようになりました。 Culminis : 1/22/2009 Announcing the APAC Regional Boardシアトルでルームシェアしたインド人の Ashwin からのチャットで、次のお知らせをもらった。 http://thevoice.culminis.com/APAC/Lists/Posts/Post.aspx?ID=4 北端さんが DAL (Director-at-Large): で日本代表として参加されているとのこと。 プロファイルは http://new.culminisconnections.com/BOD/APAC.aspx?PageView=Shared January 06 ASP.NET ルーティングMSDN を読んでいたら、ASP.NET ルーティングということで、URLの書き換え方法が載っていた。 http://msdn.microsoft.com/ja-jp/library/cc668201.aspx 昔調べた方法から、IIS7 対応もあり、だいぶ変わっているようなので調べてみた。そうしたら、ええ~~、こんな簡単にできようになっちゃたんだー!と感動して、ためしに動かしてみようとしました。すると、CategoryRouteHandler がありませんと怒られる。そりゃそうだ、どこにもそんなコードがない。あれ??ということで調べてみると、どっとねっとふぁんBlog の小野さんが で丁寧に解説してあった。さすが師匠wと感動する一方、やっぱりハンドラ書かないといけないのね。orz LinqDataSource によるメモリ内コレクションのデータへの接続http://msdn.microsoft.com/ja-jp/library/bb547113.aspx Default.aspx.cs にMoviewLibraryクラスを追加。 using System; namespace LinqDataSource } public class MovieLibrary public MovieLibrary() public string[] AvailableGenres GridViewを追加。新しいデータソースを選択。 LINQを選択。 データソースの構成ダイアログで、MoviewLibraryを選択。 データの選択の構成ダイアログで、テーブル、Select, GroupBy, Where, OrderBy を指定可能。 実行すればこのとおり。 生成されたWPFコードは、 <asp:GridView ID="GridView1" runat="server" DataSourceID="LinqDataSource1"> 列名までしっかり処理されている。もう少し複雑なテーブルで試してみると、これがずいぶん便利だということに気が付く。 January 05 Linqでファイルを作成日順でソートMSDNのサンプルそのままだけど、ちょっと便利。 private void Form1_Load(object sender, EventArgs e)
{
string startFolder = @"C:\My Documents\My Pictures\";
// Take a snapshot of the file system.
IEnumerable fileList = GetFiles(startFolder);
//Create the query
IEnumerable fileQuery =
from file in fileList
where file.Extension == ".jpg"
orderby file.Name
select file;
// Create and execute a new query by using the previous
// query as a starting point. fileQuery is not
// executed again until the call to Last()
var files =
(from file in fileQuery
orderby file.CreationTime
select new { file.FullName, file.CreationTime });
}
// This method assumes that the application has discovery
// permissions for all folders under the specified path.
static IEnumerable GetFiles(string path)
{
if (!System.IO.Directory.Exists(path))
throw new System.IO.DirectoryNotFoundException();
string[] fileNames = null;
List files = new List();
fileNames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
foreach (string name in fileNames)
{
files.Add(new FileInfo(name));
}
return files;
}
January 03 XAML Data BindingExpression Blend で TextBlockのプロパティ→共通プロパティ→ Text の右側の小さな四角をクリック すると、次のようなメニューが表示されるので、データバインドを選択する。 データバインドの作成ダイアログが表示されるので、 要素プロパティタブ→シーン要素から textBox1を選択、プロパティよりTextを選択し、完了。 生成されるXAMLコード <TextBox Name="textBox1" VerticalAlignment="Top" />
Path を指定しない場合、既定でオブジェクト全体にバインドされます。 Mode は、OneWay, TwoWay, OneTime, OneWayToSource, Default TwoWay OneWay OneTime OneWayToSource Default TwoWay時のソースの更新時期(UpdateSourceTrigger)は、Default, Explicit, LostFocus, PropertyChanged <TextBox Name="textBox1" Text="{Binding Path=Text, ElementName=textBox2, Mode=TwoWay, UpdateSourceTrigger=Default}"/> ZAM3Dが生成するXAMLをC#で実装すると ー リソースモデルリソースモデルはこんな感じ。 private void Sample()
{
this.viewPort3D1.Name = "ZAM3DViewport3D";
viewPort3D1.ClipToBounds = true;
viewPort3D1.Width = 400;
viewPort3D1.Height = 300;
ResourceDictionary resourceDictionary = new ResourceDictionary();
////
MaterialGroup materialGroup = new MaterialGroup();
DiffuseMaterial diffuseMaterial = new DiffuseMaterial();
diffuseMaterial.Brush = new SolidColorBrush(Color.FromRgb(0xd3, 0xc8, 0xad));
materialGroup.Children.Add(diffuseMaterial);
SpecularMaterial specularMaterial = new SpecularMaterial();
specularMaterial.SpecularPower = 93f;
specularMaterial.Brush = new SolidColorBrush(Color.FromRgb(0x33, 0x33, 0x33));
materialGroup.Children.Add(specularMaterial);
resourceDictionary.Add("ER___Default_MaterialMR1", materialGroup);
////
Transform3DGroup transform3DGroup = new Transform3DGroup();
TranslateTransform3D translateTransform3D = new TranslateTransform3D(0f, 0f, 0f);
ScaleTransform3D scaleTransform3D = new ScaleTransform3D(1f, 1f, 1f);
AxisAngleRotation3D axisAngleRotation3D = new AxisAngleRotation3D(new Vector3D(0f, 1f, 0f), 0f);
RotateTransform3D rotateTransform3D = new RotateTransform3D();
rotateTransform3D.Rotation = axisAngleRotation3D;
TranslateTransform3D translateTransform3D2 = new TranslateTransform3D(0f, 0f, 0f);
transform3DGroup.Children.Add(translateTransform3D);
transform3DGroup.Children.Add(scaleTransform3D);
transform3DGroup.Children.Add(rotateTransform3D);
transform3DGroup.Children.Add(translateTransform3D2);
resourceDictionary.Add("SceneTR7", transform3DGroup);
////
Transform3DGroup transform3DGroupBox = new Transform3DGroup();
TranslateTransform3D translateTransform3DBox = new TranslateTransform3D(0f, 0f, 0f);
ScaleTransform3D scaleTransform3DBox = new ScaleTransform3D(1f, 1f, 1f);
AxisAngleRotation3D axisAngleRotation3DBox = new AxisAngleRotation3D(new Vector3D(0f, 1f, 0f), 0f);
RotateTransform3D rotateTransform3DBox = new RotateTransform3D();
rotateTransform3DBox.Rotation = axisAngleRotation3DBox;
TranslateTransform3D translateTransform3DBox2 = new TranslateTransform3D(0, 0, 0);
transform3DGroupBox.Children.Add(translateTransform3DBox);
transform3DGroupBox.Children.Add(scaleTransform3DBox);
transform3DGroupBox.Children.Add(rotateTransform3DBox);
transform3DGroupBox.Children.Add(translateTransform3DBox2);
resourceDictionary.Add("BoxOR9TR8", transform3DGroupBox);
////
MeshGeometry3D meshGeometry3D = new MeshGeometry3D();
TypeConverter i32ColConv = TypeDescriptor.GetConverter(typeof(Int32Collection));
meshGeometry3D.TriangleIndices = (Int32Collection)i32ColConv.ConvertFromString("0,1,2 2,3,0 4,5,6 6,7,4 8,9,10 10,11,8 12,13,14 14,15,12 16,17,18 18,19,16 20,21,22 22,23,20");
TypeConverter vector3DColConv = TypeDescriptor.GetConverter(typeof(Vector3DCollection));
meshGeometry3D.Normals = (Vector3DCollection)vector3DColConv.ConvertFromString("0,0,-1 0,0,-1 0,0,-1 0,0,-1 0,0,1 0,0,1 0,0,1 0,0,1 0,-1,0 0,-1,0 0,-1,0 0,-1,0 1,0,0 1,0,0 1,0,0 1,0,0 0,1,0 0,1,0 0,1,0 0,1,0 -1,0,0 -1,0,0 -1,0,0 -1,0,0 ");
TypeConverter point3DColConv = TypeDescriptor.GetConverter(typeof(Point3DCollection));
meshGeometry3D.Positions = (Point3DCollection)point3DColConv.ConvertFromString("-0.5,-0.5,-0.5 -0.5,0.5,-0.5 0.5,0.5,-0.5 0.5,-0.5,-0.5 -0.5,-0.5,0.5 0.5,-0.5,0.5 0.5,0.5,0.5 -0.5,0.5,0.5 -0.5,-0.5,-0.5 0.5,-0.5,-0.5 0.5,-0.5,0.5 -0.5,-0.5,0.5 0.5,-0.5,-0.5 0.5,0.5,-0.5 0.5,0.5,0.5 0.5,-0.5,0.5 0.5,0.5,-0.5 -0.5,0.5,-0.5 -0.5,0.5,0.5 0.5,0.5,0.5 -0.5,0.5,-0.5 -0.5,-0.5,-0.5 -0.5,-0.5,0.5 -0.5,0.5,0.5 ");
resourceDictionary.Add("BoxOR9GR10", meshGeometry3D);
////
PerspectiveCamera camera = new PerspectiveCamera();
camera.FarPlaneDistance = 10f;
camera.LookDirection = new Vector3D(2.05609, -1.21509, -2.52021);
camera.UpDirection = new Vector3D(0f, 1f, 0f);
camera.NearPlaneDistance = 2f;
camera.Position = new Point3D(-2.05609, 1.21509, 2.52021);
camera.FieldOfView = 39f;
viewPort3D1.Camera = camera;
////
ModelVisual3D modelVisual3D = new ModelVisual3D();
Model3DGroup model3DGroup = new Model3DGroup();
model3DGroup.Transform = (Transform3D)resourceDictionary["SceneTR7"];
//////
AmbientLight ambientLight = new AmbientLight(Color.FromRgb(0x33, 0x33, 0x33));
model3DGroup.Children.Add(ambientLight);
DirectionalLight directionalLight1 = new DirectionalLight(Colors.White, new Vector3D(-0.6f, -0.5f, -0.6f));
model3DGroup.Children.Add(directionalLight1);
DirectionalLight directionalLight2 = new DirectionalLight(Colors.White, new Vector3D(0.6f, -0.5f, -0.6f));
model3DGroup.Children.Add(directionalLight2);
////
MeshGeometry3D meshGeometry3D2 = (MeshGeometry3D)resourceDictionary["BoxOR9GR10"];
GeometryModel3D geometryModel3D = new GeometryModel3D();
geometryModel3D.Geometry = meshGeometry3D2;
geometryModel3D.Material = resourceDictionary["ER___Default_MaterialMR1"] as Material;
geometryModel3D.BackMaterial = (Material)resourceDictionary["ER___Default_MaterialMR1"];
model3DGroup.Children.Add(geometryModel3D);
modelVisual3D.Content = model3DGroup;
this.viewPort3D1.Children.Add(modelVisual3D);
} ZAM3Dが生成するXAMLをC#で実装するとインラインモデルは、こんな感じ。 private void Sample2()
{
this.viewPort3D1.Name = "ZAM3DViewport3D";
viewPort3D1.ClipToBounds = true;
viewPort3D1.Width = 400;
viewPort3D1.Height = 300;
PerspectiveCamera camera = new PerspectiveCamera();
camera.FarPlaneDistance = 10f;
camera.LookDirection = new Vector3D(2.05609, -1.21509, -2.52021);
camera.UpDirection = new Vector3D(0f, 1f, 0f);
camera.NearPlaneDistance = 2f;
camera.Position = new Point3D(-2.05609,1.21509,2.52021);
camera.FieldOfView = 39f;
viewPort3D1.Camera = camera;
ModelVisual3D modelVisual3D = new ModelVisual3D();
Model3DGroup model3DGroup = new Model3DGroup();
modelVisual3D.Content = model3DGroup;
Transform3DGroup transform3DGroup = new Transform3DGroup();
TranslateTransform3D translateTransform3D = new TranslateTransform3D(0f, 0f, 0f);
ScaleTransform3D scaleTransform3D = new ScaleTransform3D(1f, 1f, 1f);
AxisAngleRotation3D axisAngleRotation3D = new AxisAngleRotation3D(new Vector3D(0f, 1f, 0f), 0f);
RotateTransform3D rotateTransform3D = new RotateTransform3D();
rotateTransform3D.Rotation = axisAngleRotation3D;
transform3DGroup.Children.Add(translateTransform3D);
transform3DGroup.Children.Add(scaleTransform3D);
transform3DGroup.Children.Add(rotateTransform3D);
model3DGroup.Transform = transform3DGroup;
//////
AmbientLight ambientLight = new AmbientLight(Color.FromRgb(0x33, 0x33, 0x33));
model3DGroup.Children.Add(ambientLight);
DirectionalLight directionalLight1 = new DirectionalLight(Colors.White, new Vector3D(-0.6f, -0.5f, -0.6f));
model3DGroup.Children.Add(directionalLight1);
DirectionalLight directionalLight2 = new DirectionalLight(Colors.White, new Vector3D(0.6f, -0.5f, -0.6f));
model3DGroup.Children.Add(directionalLight2);
//////
Model3DGroup model3DGroupBox = new Model3DGroup();
Transform3DGroup transform3DGroupBox = new Transform3DGroup();
TranslateTransform3D translateTransform3DBox = new TranslateTransform3D(0f, 0f, 0f);
ScaleTransform3D scaleTransform3DBox = new ScaleTransform3D(1f, 1f, 1f);
AxisAngleRotation3D axisAngleRotation3DBox = new AxisAngleRotation3D(new Vector3D(0f, 1f, 0f), 0f);
RotateTransform3D rotateTransform3DBox = new RotateTransform3D();
rotateTransform3DBox.Rotation = axisAngleRotation3DBox;
TranslateTransform3D translateTransform3DBox2 = new TranslateTransform3D(0,0,0);
transform3DGroupBox.Children.Add(translateTransform3DBox);
transform3DGroupBox.Children.Add(scaleTransform3DBox);
transform3DGroupBox.Children.Add(rotateTransform3DBox);
transform3DGroupBox.Children.Add(translateTransform3DBox2);
model3DGroupBox.Transform = transform3DGroupBox;
/////
GeometryModel3D geometryModel3D = new GeometryModel3D();
MaterialGroup materialGroup = new MaterialGroup();
DiffuseMaterial diffuseMaterial = new DiffuseMaterial();
diffuseMaterial.Brush = new SolidColorBrush(Color.FromRgb(0xd3, 0xc8, 0xad));
materialGroup.Children.Add(diffuseMaterial);
SpecularMaterial specularMaterial = new SpecularMaterial();
specularMaterial.SpecularPower = 93f;
specularMaterial.Brush = new SolidColorBrush(Color.FromRgb(0x33, 0x33, 0x33));
materialGroup.Children.Add(specularMaterial);
geometryModel3D.Material = materialGroup;
////
GeometryModel3D geometryModel3DBack = new GeometryModel3D();
MaterialGroup materialGroupBack = new MaterialGroup();
DiffuseMaterial diffuseMaterialBack = new DiffuseMaterial();
diffuseMaterialBack.Brush = new SolidColorBrush(Color.FromRgb(0xd3, 0xc8, 0xad));
geometryModel3DBack.Material = materialGroupBack;
materialGroupBack.Children.Add(diffuseMaterialBack);
SpecularMaterial specularMaterialBack = new SpecularMaterial();
specularMaterialBack.Brush = new SolidColorBrush(Color.FromRgb(0x33, 0x33, 0x33));
specularMaterialBack.SpecularPower = 93f;
materialGroupBack.Children.Add(specularMaterialBack);
geometryModel3D.BackMaterial = materialGroupBack;
////
MeshGeometry3D meshGeometry3D = new MeshGeometry3D();
TypeConverter i32ColConv = TypeDescriptor.GetConverter(typeof(Int32Collection));
meshGeometry3D.TriangleIndices = (Int32Collection)i32ColConv.ConvertFromString("0,1,2 2,3,0 4,5,6 6,7,4 8,9,10 10,11,8 12,13,14 14,15,12 16,17,18 18,19,16 20,21,22 22,23,20");
TypeConverter vector3DColConv = TypeDescriptor.GetConverter(typeof(Vector3DCollection));
meshGeometry3D.Normals = (Vector3DCollection)vector3DColConv.ConvertFromString("0,0,-1 0,0,-1 0,0,-1 0,0,-1 0,0,1 0,0,1 0,0,1 0,0,1 0,-1,0 0,-1,0 0,-1,0 0,-1,0 1,0,0 1,0,0 1,0,0 1,0,0 0,1,0 0,1,0 0,1,0 0,1,0 -1,0,0 -1,0,0 -1,0,0 -1,0,0 ");
TypeConverter point3DColConv = TypeDescriptor.GetConverter(typeof(Point3DCollection));
meshGeometry3D.Positions = (Point3DCollection)point3DColConv.ConvertFromString("-0.5,-0.5,-0.5 -0.5,0.5,-0.5 0.5,0.5,-0.5 0.5,-0.5,-0.5 -0.5,-0.5,0.5 0.5,-0.5,0.5 0.5,0.5,0.5 -0.5,0.5,0.5 -0.5,-0.5,-0.5 0.5,-0.5,-0.5 0.5,-0.5,0.5 -0.5,-0.5,0.5 0.5,-0.5,-0.5 0.5,0.5,-0.5 0.5,0.5,0.5 0.5,-0.5,0.5 0.5,0.5,-0.5 -0.5,0.5,-0.5 -0.5,0.5,0.5 0.5,0.5,0.5 -0.5,0.5,-0.5 -0.5,-0.5,-0.5 -0.5,-0.5,0.5 -0.5,0.5,0.5 ");
geometryModel3D.Geometry = meshGeometry3D;
model3DGroupBox.Children.Add(geometryModel3D);
////
model3DGroup.Children.Add(model3DGroupBox);
modelVisual3D.Content = model3DGroup;
this.viewPort3D1.Children.Add(modelVisual3D);
} January 01 リソースのストリーボードをプレイする方法久々にWPFを触ったら、こんなことも忘れている・・・ Storyboard sb = (Storyboard)this.Resources["Storyboard1"]; か、
Storyboard sb = (Storyboard )this.FindResource("Storyboard1"); C++/CLI によるScreen Saver スケルトンコードWindows Mobile の Today のプラグインを実装しようと思うと、WnProc を実装する必要があり、C#だけでは実装できない。 http://msdn.microsoft.com/en-us/library/ms839442.aspx に、Creating a Pocket PC Today Screen Plug-in with the .NET Compact Framework という方法も載っているが、これだと共有メモリを使ってHTMLをレンダリングさせる方法なので、かえって見通しが悪そう。これなら、直接C++/CLIで実装して、一部を C#で書いたほうが楽そう。ただ、TodayのプラグインがC++/CLIで実装可能かどうか・・・C++/CLIでも実装可能なら、一部を C# で書くことも可能なので、ちょっと込み入った実装もだいぶ楽になるはず。 少し調べていたら、 http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html に「いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005」の記事があり、C++/CLI によるScreen Saver のサンプルがあったので、試してみた。 結果はWinProc をC++/CLIで動かすことができる。ということは、おそらく Windows Mobile の Today のプラグインも同様に動くと思われると、思ったが、スマートデバイスのプロジェクトテンプレートでは、C++/CLI がサポートされないみたい orz ピーデー 川俣 晶さんがアップしているコードを VS2008用にちょっと修正したので、とりあえずメモ。
#include <stdafx.h> #using <mscorlib.dll> using namespace System; |
|
|