MESCIUS SPREAD for Windows Forms 17.0J > SPREADデザイナガイド > シェイプの設計 > シェイプの共通設定 > 頂点の編集 |
Spread.NETを使用すると、APIメンバーまたはユーザー操作を使用してシェイプの頂点を編集できます。本機能により、既存のシェイプを要件に応じてカスタムシェイプに変更できます。
シェイプは次を含みます:
シェイプでの編集点は3種類あります:スムージングする、頂点で線分を伸ばすと頂点を??基準にする。
スムージングする: 同じ長さの2つの線分を結合します。 [Shift]キーを押しながら、頂点に接続されているコントロールポイントのいずれかをドラッグします。ドラッグを停止すると、頂点がスムージングされます。
頂点で線分を伸ばす: 長さの異なる2つの線分を結合します。[Ctrl]キーを押しながら、頂点に接続されているハンドルのいずれかをドラッグします。ドラッグを停止すると、頂点で線分を伸ばされます。
頂点を??基準にする: 2つの線分を結合し、1つの線分は異なる方向に進みます。[Alt]キーを押しながら、頂点に接続されているハンドルのいずれかをドラッグします。ドラッグを停止すると、頂点が??基準にされます。[Alt]キーを押しながらノードとコントロールポイントを移動すると、異なる動作が表示されます。
C# |
コードのコピー
|
---|---|
// EnhancedShapeEngineを有効にします。 fpSpread1.Features.EnhancedShapeEngine = true; // FivePointedStarシェイプを追加します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes.AddShape(GrapeCity.Spreadsheet.Drawing.AutoShapeType.FivePointedStar, 100, 100, 100, 100); // シェイプを編集します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes[0].IsEditing = true; // FivePointedStarでのノードの数を取得します。 var c = fpSpread1.AsWorkbook().ActiveSheet.Shapes[0].Nodes.Count.ToString(); MessageBox.Show(c); // インデックスで指定されたノードの編集の種類を設定します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes[0].Nodes.SetEditingType(0, GrapeCity.Spreadsheet.Drawing.EditingType.Smooth); // インデックスで指定されたノードに続く線分の種類を設定します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes[0].Nodes.SetSegmentType(0, GrapeCity.Spreadsheet.Drawing.SegmentType.Curve); // インデックスで指定されたノードの場所を設定します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes[0].Nodes.SetPosition(0, 50, 50); // フリーフォームオブジェクトを作成します。 IFreeFormBuilder freeform = fpSpread1.AsWorkbook().ActiveSheet.Shapes.BuildFreeform(EditingType.Corner, 160, 10); freeform.AddNodes(SegmentType.Curve, EditingType.Corner, 180, 30, 200, 50, 250, 100); freeform.AddNodes(SegmentType.Curve, EditingType.Auto, 280, 10); freeform.AddNodes(SegmentType.Curve, EditingType.Auto, 280, 200); freeform.AddNodes(SegmentType.Line, EditingType.Auto, 160, 10); freeform.ConvertToShape(); |
VB |
コードのコピー
|
---|---|
' EnhancedShapeEngineを有効にします。 fpSpread1.Features.EnhancedShapeEngine = True ' FivePointedStarシェイプを追加します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes.AddShape(GrapeCity.Spreadsheet.Drawing.AutoShapeType.FivePointedStar, 100, 100, 100, 100) ' シェイプを編集します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes(0).IsEditing = True ' FivePointedStarでのノードの数を取得します。 Dim c = fpSpread1.AsWorkbook().ActiveSheet.Shapes(0).Nodes.Count.ToString() MessageBox.Show(c) ' インデックスで指定されたノードの編集の種類を設定します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes(0).Nodes.SetEditingType(0, GrapeCity.Spreadsheet.Drawing.EditingType.Smooth) ' インデックスで指定されたノードに続く線分の種類を設定します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes(0).Nodes.SetSegmentType(0, GrapeCity.Spreadsheet.Drawing.SegmentType.Curve) ' インデックスで指定されたノードの場所を設定します。 fpSpread1.AsWorkbook().ActiveSheet.Shapes(0).Nodes.SetPosition(0, 50, 50) ' フリーフォームオブジェクトを作成します。 Dim freeform As IFreeFormBuilder = fpSpread1.AsWorkbook().ActiveSheet.Shapes.BuildFreeform(EditingType.Corner, 160, 10) freeform.AddNodes(SegmentType.Curve, EditingType.Corner, 180, 30, 200, 50, 250, 100) freeform.AddNodes(SegmentType.Curve, EditingType.Auto, 280, 10) freeform.AddNodes(SegmentType.Curve, EditingType.Auto, 280, 200) freeform.AddNodes(SegmentType.Line, EditingType.Auto, 160, 10) freeform.ConvertToShape() |
頂点やコントロール点を右クリックすると、頂点追加・削除のオプションを提供するコンテキストメニューが表示され、頂点をスムージングする、頂点で線分を伸ばすや頂点を??基準にするのオプションのいずれかも選択できます。シェイプの編集を終了するには、[頂点編集の終了]オプションも選択できます。
同様に、線分を右クリックして線分(赤色線や輪郭)のコンテキストメニューを表示します。コンテクストメニューは、頂点の追加、セグメントの削除、直線や曲線セグメントの選択などのオプションを提供します。コンテキストメニューが表示した後、[パスを開く]や[パスを閉じる]オプションも選択できます。
BeforeRightClickイベントをハンドルすることで、シェイプのコンテキストメニューをカスタマイズできます。次のコードを使用して、デフォルトコンテキストメニューの表示を停止しています。
C# |
コードのコピー
|
---|---|
fpSpread1.Features.EnhancedShapeEngine = true; IShape ss = fpSpread1.AsWorkbook().ActiveSheet.Shapes.AddShape(AutoShapeType.Rectangle, 300, 130, 115, 115); this.fpSpread1.BeforeRightClick += FpSpread1_BeforeRightClick; private void FpSpread1_BeforeRightClick(object sender, FarPoint.Win.Spread.BeforeRightClickEventArgs e) { // BeforeRightClickイベントをハンドルすることで、シェイプのコンテキストメニューの表示を停止します。 e.Cancel = true; } |
VB |
コードのコピー
|
---|---|
Friend Class SurroundingClass Private Sub EditShape_CustomizeShapeBeforeRightClick_Load(ByVal sender As Object, ByVal e As EventArgs) fpSpread1.Features.EnhancedShapeEngine = True Dim ss As IShape = fpSpread1.AsWorkbook().ActiveSheet.Shapes.AddShape(AutoShapeType.Rectangle, 300, 130, 115, 115) Me.fpSpread1.BeforeRightClick += AddressOf FpSpread1_BeforeRightClick End Sub Private Sub FpSpread1_BeforeRightClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.BeforeRightClickEventArgs) ' BeforeRightClickイベントをハンドルすることで、シェイプのコンテキストメニューの表示を停止します。 e.Cancel = True End Sub End Class |
シェイプに頂点を追加するには、シェイプの赤色の輪郭を右クリックしてコンテキストメニューを表示し、[頂点の追加]オプションを選択するか、[CTRL]キーを押しながらシェイプの赤色輪郭をクリックします。
C# |
コードのコピー
|
---|---|
// ノードを追加します。
fpSpread1.AsWorkbook().ActiveSheet.Shapes[0].Nodes.Insert(0, GrapeCity.Spreadsheet.Drawing.SegmentType.Curve, GrapeCity.Spreadsheet.Drawing.EditingType.Corner, 50, 100, 50, 130, 100, 100);
|
VB |
コードのコピー
|
---|---|
' ノードを追加します。
fpSpread1.AsWorkbook().ActiveSheet.Shapes(0).Nodes.Insert(0, GrapeCity.Spreadsheet.Drawing.SegmentType.Curve, GrapeCity.Spreadsheet.Drawing.EditingType.Corner, 50, 100, 50, 130, 100, 100)
|
シェイプでの頂点を削除するには、ノードやコントロールポイントを右クリックしコンテキストメニューを表示し、[頂点の削除]オプションを選択するか、[CTRL]キーを押しながらノードやコントロールポイントをクリックします。
C# |
コードのコピー
|
---|---|
// ノードを削除します。
fpSpread1.AsWorkbook().ActiveSheet.Shapes[0].Nodes.Delete(1);
|
VB |
コードのコピー
|
---|---|
' ノードを削除します。
fpSpread1.AsWorkbook().ActiveSheet.Shapes(0).Nodes.Delete(1)
|