gardenpath 関数を 1 つにまとめる

gardenpath 関数は、庭園の歩道を描くために、ユーザが AutoCAD のコマンド プロンプトまたはユーザ インタフェースから実行する主要なカスタム関数です。

gardenpath 関数を実行すると、ユーザ入力を取得し、次にその入力に基づいて庭園の歩道を描画する一連のセカンダリ関数が実行されます。gardenpath 関数がこれらのセカンダリ関数にアクセスするようにするためには、これらのセカンダリ関数を gard npath 関数の実行前にロードしておく必要があります。AutoLISP の load 関数を使用して LSP ファイルをロードし、このファイルに格納されている関数を、ユーザおよび AutoCAD にロードされているその他の AutoLISP 関数が使用できるようにします。

gardenpath 関数を格納する LSP ファイルを作成する

次に、gardenpath 関数を格納するために使用する LSP ファイルを作成し、gardenpath 関数によって使用されるセカンダリ関数を含む LSP ファイルをロードする方法を説明します。

Windows
  1. 次のいずれかの操作を行います。
    • (Windows 7) [スタート]ボタン [すべてのプログラム] [アクセサリ] [メモ帳]をクリックします。
    • (Windows 8) [スタート]画面で、note と入力し、[メモ帳]をクリックします。
  2. メモ帳で、[ファイル]メニュー [名前を付けて保存]を選択します。
  3. [名前を付けて保存]ダイアログ ボックスで、[ドキュメント] (または[マイ ドキュメント])フォルダに移動し、GardenPath フォルダをダブルクリックして現在のフォルダにします。
  4. [ファイル名]テキスト ボックスに、gpmain.lsp と入力します。
  5. [ファイルの種類]ドロップダウン リストをクリックし、[すべてのファイル(*.*)]を選択します。
  6. [文字コード]ドロップダウン リストをクリックし、[ANSI]を選択します。[保存]をクリックします。

    LSP ファイルは閉じないでください。

Mac OS
  1. [Finder]で、Mac OS のメニュー バーから[移動]メニュー [アプリケーション]を選択します。
  2. [アプリケーション]ウィンドウで、[テキストエディット]をダブルクリックします。
  3. テキストエディットで、Mac OS のメニュー バーから[テキストエディット]メニュー [環境設定]を選択します。
  4. [環境設定]ダイアログ ボックスで、次の操作を行います。
    • [標準テキスト]をオンにします。
    • [スマート引用符]オプションをオフにします。
    • [スマート ダッシュ記号]オプションをオフにします。
    • [スマート リンク]オプションをオフにします。
    • [閉じる]ボタンをクリックします。
  5. Mac OS のメニュー バーから[ファイル]メニュー [保存]を選択します。
  6. [名称未設定]ダイアログ ボックスで、[書類]フォルダに移動し、GardenPath フォルダを選択して現在のフォルダにします。
  7. [別名で保存]テキスト ボックスに、gpmain.lsp と入力します。[保存]をクリックします。
  8. ファイル拡張子 .lsp を使用するように求めるプロンプトが表示されたら、[.LSP を使用]をクリックします。

    LSP ファイルは閉じないでください。

セカンダリ LSP ファイルをロードする

次に、gpmain.lspファイルが AutoCAD にロードされたときに load 関数を使用して utils.lspgpdraw.lspgp-io.lsp ファイルをロードする方法を説明します。

  1. メモ帳またはテキストエディットのエディタ領域に、次のように入力します。
    (load "utils.lsp" "\nutils.lsp was not loaded successfully.")
    (load "gpdraw.lsp" "\ngpdraw.lsp was not loaded successfully.")
    (load "gp-io.lsp" "\ngp-io.lsp was not loaded successfully.")
  2. LSP ファイルを保存します。

gardenpath 関数を定義する

次の手順では、gardenpath という名前の関数を定義できます。この関数は、次のセカンダリ関数を指定した順序で実行します。

  1. gp:getPathInput
  2. gp:getTileInput
  3. gp:getBorderStyleInput
  4. gp:calcPathBoundary
  5. gp:calcTiles

gardenpath 関数は、いずれの引数も受け入れず、値も返しません。

  1. メモ帳またはテキスト エディットのエディタ領域で、1 つ前の文の最後の右括弧の後ろで、[Enter]を 2 回押します。その後、次のように入力します。
    (defun c:gardenpath ( / osmode-old cmdecho-old gp_PathData
                            gp_TileData gp_BorderStyle tileList
                        )
    
      ; Begin undo recording
      (command "._undo" "_be")
    
      ; Turn off object snapping
      (setq osmode-old (getvar "OSMODE"))
      (setvar "OSMODE" 0)
    
      ; Turn off command echoing
      (setq cmdecho-old (getvar "CMDECHO"))
      (setvar "CMDECHO" 0)
      
      ; Prompt the user the input that will define the path
      ; Store the path data 
      (if (setq gp_PathData (gp:getPathInput))
        (if (setq gp_TileData (gp:getTileInput))
          (if (setq gp_BorderStyle (gp:getBorderStyleInput))
            (progn
    
              ; Append the results of gp:getPointInput, gp:getTileInput,
              ; and gp:getBorderStyle into a single list
              (setq gp_PathData (append gp_PathData
                                        gp_TileData
                                        gp_BorderStyle
                                )
              )
    
              ; Get the boundary list returned by the gp:calcPathBoundary function.
              ; The list of boundary points is expressed as the DXF values 12
              ; through 15.
              (setq gp_pathData (append gp_pathData 
                                        (cadr (gp:calcPathBoundary gp_PathData))
                                )
              )
    
              ; Add the tiles within the path boundary
              (prompt (strcat "\nThe path required "
                              (itoa
                                (length
                                  (setq tileList (gp:calcTiles gp_PathData))
                                )
                              )
                              " tiles."
                      )
              )
    
              ; Add the tiles to the path data
              (setq gp_PathData (append (list (cons 100 tileList))
                                              gp_PathData
                                )
              )
            )
            (prompt "\nFunction cancelled.")
          )
          (prompt "\nIncomplete information to draw tiles.")
        )
        (prompt "\nIncomplete information to draw boundary.")
      )
    
      ; Restore the previous values of OSMODE and CMDECHO
      (setvar "OSMODE" osmode-old)
      (setvar "CMDECHO" cmdecho-old)
      
      ; End undo recording
      (command "._undo" "_e")
    
     (princ)
    )
  2. LSP ファイルを保存します。

短縮された関数名を実装する

次の手順では、gardenpath 関数を実行する、短縮された名前を持つ新しい関数を実装できます。短縮された名前は、コマンド プロンプトに対して直接入力することができます。

  1. メモ帳またはテキスト エディットのエディタ領域で、c:gardenpath 関数の最後の右括弧の後ろで、[Enter]を 2 回押します。その後、次のように入力します。
    (defun c:gp ( / )(c:gardenpath))
  2. LSP ファイルを保存します。

使用可能な関数名を表示する

次の手順では、ユーザがコマンド プロンプトに対して直接入力することができる関数名を一覧表示するメッセージを表示できます。
  1. メモ帳またはテキスト エディットのエディタ領域で、1 つ前の文の最後の右括弧の後ろで、[Enter]を 2 回押します。その後、次のように入力します。
    (prompt "\nType GARDENPATH or GP to draw a garden path.")
    (princ)
  2. LSP ファイルを保存します。