Script談話室バックナンバー2007

Re3:ダイアログの設定    与太郎
Fri Dec 14 17:14:55 2007

>何十行もあるのでできればコピーは避けたいと思っています。
修正で苦労したくなければ、当然コピーは避けないといけません。
11:の内容をサブルーチン(procedure or function)にすれば、
10:からでも11:からでも呼び出せます。
たとえ一箇所から一度しか呼ばれなくても、長い処理ならサブルーチン化するべきです。


Re2:ダイアログの設定    タニ
Fri Dec 14 13:39:35 2007

>与太郎様

いつもご指導ありがとうございます。

ダイアログのOKボタンを押してもエラーメッセージを出して、
ダイアログを終了させない方法でご指導頂いた件でご報告します。

下記のようにitem:=-1;というスクリプトを追加することで
解決しました。

__DialogEvent(item);
__case item of
__ ・
__ ・
__  OKButton:
__ BEGIN
__ IF (条件文) THEN
__ BEGIN
__     AlrtDialog('リストを選択してください。');
__     item:=-1;
__    END;
__ ・
__end;{case}

現在は以下の問題で悩んでおりご指導いただけないでしょうか。

以下のスクリプトで、10:をクリックした際に、条件によっては
11:のスクリプトも実行したいのですが、可能でしょうか。
11:のスクリプトをコピーすれば問題ないのですが、
何十行もあるのでできればコピーは避けたいと思っています。

__DialogEvent(item);
__case item of
__ ・
__ ・
__  10:
__ BEGIN
__ IF (条件文) THEN
__ BEGIN
__     {ここに11:を実行するスクリプトを入力}
__    END;
__  END;
__ ・
__ ・
__ ・
__  11:
__ BEGIN
__     {スクリプトを入力}
__  END;
__ ・
__ ・
__ ・
__end;{case}

ご指導をお願いいたします。


Re:ダイアログの設定    石男
Mon Dec 10 20:34:59 2007

>与太郎さん
スクリプトを使わない普通のユーザーになってしまいまして(笑)
ダイアログを作るのが面倒になったのでDialogBuilderを使うようになりました。
結構便利ですよ。


Re:ダイアログの設定    与太郎
Sun Dec 9 23:39:21 2007

石男さん、おひさしぶりです。
ダイアログはあんまり作らないので、アドバイス頂けると助かります。

>タニさん
ダイアログのイベントループから抜け出す条件を工夫すれば可能ですよ。
repeat
__DialogEvent(item);
__case item of
__ ・
__ ・
__ ・
__end;{case}
until (item = OKButton) | (item = CancelButton);
だと、OKボタンを押すと無条件でループを終了します。
until ((item = OKButton) & (アイテムが選択された)) | (item = CancelButton);
のようにして下さい。



DialogBuilder5   石男
Sat Dec 8 20:13:58 2007

ご無沙汰しております、何やらダイアログネタが多いようなので、ご本家のツールを
紹介します。もちろん、英語版なのですが動くはずです(笑)DialogBuilder5という
ダイアログを作ってくれるツールです。多分ロックが掛かっていないと思うので
中身を覗くとプログラムの勉強にもなると思いますよ。
http://www.nemetschek.net/support/custom/vscript/vstool.php


ダイアログの設定    タニ
Fri Dec 7 15:00:51 2007

>与太郎様

いつもご指導頂きありがとうございます。

ご指導頂いたファイルの入出力に関しては試行錯誤中です。
またご報告させていただきます。

今回、ご指導頂きたいのは、ダイアログの「OK」ボタンの設定に関してです。

現在、ダイアログにリストを表示させそのリストから1つ選択し「OK」ボタンを
押すことでスクリプトを実行するものを作成しています。

リストから1つも選択していない状態で「OK」ボタンを押した際、
アラートダイアログ「リストから1つ選択してください。」を表示させ、
アラートダイアログの「OK」を押すと元のダイアログに戻る設定にしたいのですが、元のダイアログに戻らずにそのままスクリプトが実行されてしまいます。

「OK」ボタンを押してもダイアログに戻る方法はあるのでしょうか。
無い頭を絞ってDialogEvent(ItemID);やWait(Seconds);を
試してみましたがだめでした。

ご指導をお願いいたします。


Re2:Plug-Inフォルダ内のファイルへの入出力(追加)    与太郎
Mon Dec 3 11:44:16 2007

>BuildResourceList(type,folderIndex,subFolderName,numItems);
>上記の「type」の欄にはリソースリストに入れるリソースの種類の番号
>を明記するようですが、リソースの種類の番号がよくわかりません。
>対応表がどこかにあるのでしょうか。

(たぶん)Object Type だと思います。
図形の番号を入れたときどうなる(1:何も起きない/2:爆発する)かは判りません。


Re:Plug-Inフォルダ内のファイルへの入出力(追加)    与太郎
Mon Dec 3 9:59:38 2007

VectorScriptで読み書き出来るのはテキストファイルだけです。
ワークシートの内容をタブ区切りなどのテキストファイルにして下さい。

VectorScriptでは一度に1つのテキストファイルしか開けません。
ファイルはOpen、Append、ReWriteの3つのモードで開けます。
Open は読み込みモードです。
Append は書き込み(追加)モードです。データは既存ファイルの末尾に追加されます。
ReWrite は書き込み(上書き)モードです。データは既存ファイルに上書きされます。
新しくファイルを作る場合はAppendとReWriteのどちらでも構いません。
読み書きが終わったファイルは必ずCloseで閉じます。

ファイルのデータは先頭から最後まで順番にしか読み書き出来ません。
ファイルの一部だけ書き換えたいときは全体を読み込んで変更し、新しい内容で上書きします。

タブ区切りテキストを読み込むときに、空白のデータは読み飛ばされます。
そうなるとRead項目とデータがずれてしまいます。
また、空白で始まる文字列は、読み込むときに先頭の空白が全部消えます。
これを回避するには、
1. StdReadLnで行全体を読んで自分でデータに分割する。
2. 文字データや空白を書き出すときに " などで囲んでおく。
3. 1行を1個のデータとし、StdReadLnで読み込む。
などの方法があります。


procedure WriteTab;
{ レイヤ名、縮尺、図形数をファイルに書き出す。 }
const
__LayerList = 'LayerList.txt';
var
__hL__:handle;
begin
__hL:= FLayer;
__ReWrite(LayerList);
____Write('Layer Name'); Tab(1);
____Write('Scale'); Tab(1);
____WriteLn('Num of Objs');
____while hL <> nil do begin
______Write(GetLName(hL)); Tab(1);
______Write(GetLScale(hL)); Tab(1);
______WriteLn(NumObj(hL));
______hL:= NextLayer(hL);
____end;
__Close(LayerList);
__Message('「', LayerList, '」を書き出しました。');
end;
Run(WriteTab);


procedure ReadTab;
{ ファイルを読み込む。 }
{ 結果はデバッガで確認してください }
{$DEBUG}
const
__LayerList = 'LayerList.txt';
__MaxArray = 7;
var
__i__:integer;
__nm__:array[0..MaxArray] of string;
__scl__:array[1..MaxArray] of real;
__n__:array[1..MaxArray] of longint;
__dt__:array[0..MaxArray] of string;
begin
__Open(LayerList);
____ReadLn(nm[0]); { タイトル行空読み }
____i:= 1;
____while (not EOF(LayerList)) & (i <= MaxArray) do begin
______ReadLn(nm[i], scl[i], n[i]);
______i:= i + 1;
____end;
__Close(LayerList);
__Open(LayerList);
____StdReadLn(dt[0]); { タイトル行 }
____i:= 1;
____while (not EOF(LayerList)) & (i <= MaxArray) do begin
______StdReadLn(dt[i]);
______i:= i + 1;
____end;
__Close(LayerList);
end;
Run(ReadTab);


Plug-Inフォルダ内のファイルへの入出力(追加)    タニ
Mon Dec 3 9:51:18 2007

>与太郎様

Plug-Inフォルダ内のファイルへの入出力に関して、
以前、ご指摘頂いたImportResourceToCurrentFileのスクリプトを
調べてみましたが、よくわかりませんでした。

BuildResourceList(type,folderIndex,subFolderName,numItems);

上記の「type」の欄にはリソースリストに入れるリソースの種類の番号
を明記するようですが、リソースの種類の番号がよくわかりません。
対応表がどこかにあるのでしょうか。

とりあえず手探りでいろいろとやってみてはいますが。。。

以上、よろしくお願いいたします。


Plug-Inフォルダ内のファイルへの入出力    タニ
Fri Nov 30 13:09:09 2007

>与太郎様

毎回いろいろと相談に乗っていただきありがとうございます。

以前より進めているオリジナルツールの作成に関して、
Plug-Inフォルダにあらかじめ保存した.mcdファイルからワークシート情報を
取り込んだり書き込んだりする方法で悩んでいます。

開いているファイルからは、

database:=GetObject('ワークシート名');

でワークシートのハンドルを設定し、情報を取り込んだり書き込んだりしています。
Plug-Inフォルダ内の.mcdファイルに保存してあるワークシートのハンドルを設定し
読み込み・書き込みすることは可能なのでしょうか。

Open(C:€Program Files€VectorWorks125J100€Plug-Ins€ファイル名.mcd);
Read(???); や Write(???);
Close(C:€Program Files€VectorWorks125J100€Plug-Ins€ファイル名.mcd);

上記のスクリプトでファイルのデータを読み書きできるようですが、
「???」の箇所が何を意味しているのか良く分かりません。
「???」でワークシートのデータを取り込むことができるのでしょうか。

以上、ご指導をお願いいたします。

※以前ご指導頂いた、「ダイアログの前回の設定の保持」は、
ワークシートに書き出し、読み込む方法で解決することができました。
ありがとうございました。



ビューポート⇔アクティブレイヤ間でビュー情報をやり取りする。    与太郎
Tue Nov 27 18:13:56 2007

ビューポートのビュー設定がやりにくいので、デザインレイヤとビューポートの間でビュー情報をや
り取りするスクリプトを書いてみました。

スクリプトは2つ使います。
ビューポート/アクティブレイヤのビュー情報をテキストファイルに保存するスクリプトと、
テキストファイルのビュー情報をビューポート/アクティブレイヤに適用するスクリプトです。
ビューポートを選択していればビューポート、そうでなければアクティブレイヤが対象になります。


procedure GetViewInfo;
{ ビューポート/アクティブレイヤのビュー情報を保存する }
const
OutputFile = 'View Info.txt';
ViewPortObj = 122;
var
result:boolean;
h:handle;
offsetX, offsetY, offsetZ:real;
rotX, rotY, rotZ:real;
s:string;
begin
h:= FSActLayer;
if GetType(h) = ViewPortObj then begin
s:= 'ビューポート';
end
else begin
h:= ActLayer;
s:= 'アクティブレイヤ';
end;
result:= GetViewMatrix(h, offsetX, offsetY, offsetZ, rotX, rotY, rotZ);
ReWrite(OutputFile);
WriteLn(offsetX);
WriteLn(offsetY);
WriteLn(offsetZ);
WriteLn(rotX);
WriteLn(rotY);
WriteLn(rotZ);
Close(OutputFile);
AlrtDialog(Concat(s, 'のビュー情報を「', OutputFile, '」に保存しました。'));
end;
Run(GetViewInfo);


procedure SetViewInfo;
{ ビューポート/アクティブレイヤのビュー情報を設定する }
const
InputFile = 'View Info.txt';
ViewPortObj = 122;
var
result:boolean;
h:handle;
offsetX, offsetY, offsetZ:real;
rotX, rotY, rotZ:real;
s:string;
begin
h:= FSActLayer;
Open(InputFile);
ReadLn(offsetX);
ReadLn(offsetY);
ReadLn(offsetZ);
ReadLn(rotX);
ReadLn(rotY);
ReadLn(rotZ);
Close(InputFile);
if GetType(h) = ViewPortObj then begin
s:= 'ビューポート';
end
else begin
h:= ActLayer;
s:= 'アクティブレイヤ';
end;
result:= SetViewMatrix(h, offsetX, offsetY, offsetZ, rotX, rotY, rotZ);
if GetType(h) = ViewPortObj then
UpdateVP(h);
ReDrawAll;
AlrtDialog(Concat('「', InputFile, '」のビュー情報を', s, 'に適用しました。'));
end;
Run(SetViewInfo);

使い方:
1. リソースパレットで新しいVectorScriptコマンドを2つ作って、上のスクリプトをコピペします。
1. デザインレイヤに戻って、ウォークスルー、視点回転、視点移動などでアングルを調整して下さい。
2. 「GetViewInfo」を実行して下さい。(アクティブレイヤのビュー情報を「View Info.txt」に保存します)
3. シートレイヤでビューポートを選択して下さい。
4. 「SetViewInfo」を実行して下さい。(「View Info.txt」の情報をビューポートに適用します)

ビューポートのビューがアクティブレイヤと同じになります。
ビューポートの投影方法、レンダリングはデータパレットで設定して下さい。


Re3:ダイアログボックスの表示設定    与太郎
Wed Nov 21 22:39:28 2007

プラグインツールとプラグインオブジェクトのうち、1点型オブジェクトに限って、アイコンをク
リック(選択)しただけでスクリプトが実行されるみたいです。
理由は、シンボル配置ツールのように、オブジェクト配置時にオブジェクトの輪郭を点線で表示さ
せるためです。
輪郭を表示させるためにはオブジェクトの形状が確定していなければならず、
オブジェクトの形状を確定するためにはスクリプトを実行する必要がある、というわけです。

それはおいといて、
ダイアログを開くだけで図形を生成しないスクリプトは、オブジェクトのスクリプトとしてはあり
えないので、プラグインツールかプラグインメニュー、またはスクリプトコマンドで試して下さい。

ところで、
3個のパラメータを指定してもなお複数の選択肢が残るから、ダイアログが必要なのでしょうけど、
4個目(そして5個目)のパラメータでダイアログが不要になるような方法はないでしょうか。
と、ものぐさな与太郎は考えてしまいます。


Re:Re:ダイアログボックスの表示設定    タニ
Wed Nov 21 10:39:27 2007

>与太郎様

いつもご返答頂きありがとうございます。

>■問題点1
現在作成しているプラグインツールは以下のアドレスに公開されていたものを
コピーし、内容を作り変えて作成しています。基本的な構造は変えていません。

http://ww2.tiki.ne.jp/~nakanaka/VectorScript_data/testModanDialog.html

スクリプトはページの最下部からダウンロードでき、それを1点型オブジェクト
にコピーして、ツールパレットから選択できるようにしました。
確かにツールパレットのアイコンをクリックするとダイアログボックスが表示されます。
スクリプト自体にそのような設定がされているようでもないのですが。
一度確認していただけませんでしょうか。

問題点2・3に関してはアドバイスを参考に少し試してみます。

以下は参考にしたスクリプトをコピーしたものです。
よろしくお願いいたします。

{*******************************************************************************
作成者:メニューモダンダイアログの例(c)2002 N_Home
目的:モダンダイアログのソース公開
機能:各種アイテムの設置

開発環境:PowerBookG4/500MHz MacOS 9.2.1
VectorWorks9.0.1
*******************************************************************************}
PROCEDURE test_modandialog;
CONST
kOkButton = 1;{OK ボタン}
kCancelButton = 2;{CANCEL ボタン}
kIntfield= 5;{整数型編集フィールド番号}
kPulldown= 6;{プルダウンメニュー番号}
kGroupBox= 7;{グループボックス番号}
kCheckBox= 8;{チェックボックス番号}
kImage= 9;{画像番号}
kColorPalette= 10;{カラーパレット番号}
kSlider= 11;{スライダー番号}
kListBox= 12;{リストボックス番号}
kRadioButton1= 13;{ラジオボタン1番号}
kRadioButton2= 14;{ラジオボタン2番号}
kStaticText= 15;{編集できないフィールド番号}

VAR
dialogid, result:LONGINT;{ダイアログ番号,最後に押されたボタンの種類(OK=1,Cancel=2 )}
verify:BOOLEAN;{作成したレイアウトの整合性}
aInt,pulldownNumber:INTEGER;{整数型編集フィールドに入力されている数値,選択している項目番号}
pulldownString:STRING;{プルダウンメニュー項目名}
checkBoxCondition:BOOLEAN;{チェックボックスの選択状態}
colorPaletteData,sliderData:LONGINT;{カラーパレットのデータ}
listBoxNumber:INTEGER;{リストボックスの選択している項目番号}
listBoxString:STRING;{リストボックスの項目名}
rButtonCondition1,rButtonCondition2:BOOLEAN;{ラジオボタンの選択状態}
staticTextStr:STRING;{編集できないフィールドへの文字}

{*******************************************************************************
mDaialogCallbackモダンダイアログの内部機能を設定

*******************************************************************************}
PROCEDURE mDaialogCallback (VAR key:LONGINT; Value:LONGINT);
BEGIN
CASE key OF
{ダイアログ初期化 (ダイアログが開くとき)}
SetupDialogC:
BEGIN
{各アイテムの初期を設定する}
{ポップアップメニューの初期設定}
InsertChoice(kPulldown, 0, 'あ');{ポップアップメニューに項目を追加}
InsertChoice(kPulldown, 1, 'い');{:引数(アイテム番号,挿入する前の項目番号,メニュー番号}
InsertChoice(kPulldown, 2, 'う');
{チェックボックスの初期設定}
SetItem(kCheckBox,TRUE);{チェックボックスをTUREにする}
{カラーパレットの初期設定}
SetControlData(dialogID,kColorPalette,16711680);{赤を初期値設定}
{リストボックスの初期設定}
InsertChoice(kListBox,0,'福岡');
InsertChoice(kListBox,1,'大阪');
InsertChoice(kListBox,2,'東京');
SelChoice(kListBox,0,TRUE);
END;
{Ok ボタンが押された}
kOkButton:
BEGIN
{-----編集フィールドの情報取得-----}
{ここで、各最終入力値を取得し、問題があればダイアログ終了しないために Key に -1をセット}
{GetEditInteger:整数型編集フィールドに入力されている数値を取得し正しければTRUE}
IF NOT GetEditInteger(dialogID, kIntfield, aInt) THEN
BEGIN
key := -1;
END ELSE
BEGIN
IF aInt < 0 THEN {マイナス値を受付けないようにしたいとき}
BEGIN
key := -1;
{SetEditInteger:整数型の編集フィールドkIntfieldに数値0を設定します。}
SetEditInteger(dialogID, kIntfield, 0 );
END;
END;
IF key = -1 THEN
BEGIN
SysBeep;
END ELSE
BEGIN
{-----ポップアップメニューの情報取得-----}
{GetSelChoice:ポップアップメニューの選択された項目番号と項目名を返します。
:引数(アイテム番号,0,選択している項目番号,メニュー項目名}
GetSelChoice(kPulldown, 0, pulldownNumber, pulldownString);
{-----チェックボックスの情報取得-----}
checkBoxCondition :=ItemSel(kCheckBox);
{-----カラーパレットの情報取得-----}
GetControlData(dialogID,kColorPalette,colorPaletteData);
{-----スライダの情報取得-----}
GetControlData(dialogID,kSlider,sliderData);
{-----リストボックスの情報取得-----}
GetSelChoice(kListBox, 0, listBoxNumber, listBoxString);
{-----ラジオボタンの情報取得-----}
rButtonCondition1 := ItemSel(kRadioButton1);
rButtonCondition2 := ItemSel(kRadioButton2);
END;
END;
{CANCEL ボタンが押された}
kCancelButton:
BEGIN
{CANCEL ボタンが押された時の処理}
END;
{'プルダウンメニューが操作された' }
kPulldown:
BEGIN
{プルダウンメニューが操作された時の処理}
END;
{'数値が入力された' }
kIntfield:
BEGIN
{入力値を制限したいときなどはここでチェック}
IF GetEditInteger(dialogID, kIntfield, aInt) THEN
BEGIN
IF aInt > 10 THEN
BEGIN
SetEditInteger(dialogID, kIntfield, 10 );
END;
END;
END;
{チェックボックスが押された}
kCheckBox:
BEGIN
IF ItemSel(kCheckBox) THEN{チェックボックスの状況によって画像を替える}
BEGIN
SetControlData(dialogID,kImage,11001);
END ELSE
BEGIN
SetControlData(dialogID,kImage,11000);
END;
END;
END;{end CASE}
END;{end callback}

{*******************************************************************************
メインプログラム部
*******************************************************************************}
BEGIN
{CreateLayout:ダイアログのレイアウトを作成し、ダイアログID を返します}
dialogid:=CreateLayout('Test Modan Dialog', TRUE, 'OK', 'CANCEL');
{整数型編集フィールドの設置}
CreateEditInteger(dialogID, kIntfield, 0, 10);
SetFirstLayoutItem(dialogID, kIntfield);
{プルダウンメニューの設置}
CreatePullDownMenu(dialogID, kPulldown, 10);
SetRightItem(dialogID, kIntfield, kPulldown, 5, 0);
{グループボックスの設置}
CreateGroupBox(dialogID,kGroupBox,'グループボックス',TRUE);
SetBelowItem(dialogID, kIntfield, kGroupBox, 0, 0);
{チェックボックスの設置}
CreateCheckBox(dialogID, kCheckBox,'CHECK');
SetFirstGroupItem(dialogID, kGroupBox, kCheckBox);
{画像の設置}
IF SetVSResourceFile('TestModanDialog') THEN{リソースファイルを開く}
BEGIN
CreateControl(dialogID,kImage,1,'画像',11001);
SetRightItem(dialogID, kCheckBox, kImage, 5, 0);
END;
{カラーパレットの設置}
CreateControl(dialogID,kColorPalette,2,'カラー',0);
SetBelowItem(dialogID, kGroupBox, kColorPalette, 0, 0);
{スライダーの設置}
CreateControl(dialogID,kSlider,3,'スライダー',10);
SetBelowItem(dialogID, kColorPalette, kSlider, 3, 0);
{リストボックスの設置}
CreateListBox(dialogID,kListBox,30,3);
SetBelowItem(dialogID, kSlider, kListBox, -3, 0);
{ラジオボタンの設置}
CreateRadioButton(dialogID,kRadioButton1,'ラジオボタン1');
SetBelowItem(dialogID, kListBox, kRadioButton1, 0, 0);
CreateRadioButton(dialogID,kRadioButton2,'ラジオボタン2');
SetBelowItem(dialogID, kRadioButton1, kRadioButton2, 0, 0);
{編集出来ないフィールドの設置}
GetResourceString(staticTextStr,11000,1);{リソースファイル'STR#'から文字列を読みとる}
CreateStaticText(dialogID,kStaticText,staticTextStr,28);
SetBelowItem(dialogID, kRadioButton2, kStaticText, 0, 0);
{ヘルプフィールドの設定}
SetHelpString(kIntfield,'0〜10までの数値を入力してください');
SetHelpString(kCheckBox,'チェックすると画像が表示されます');
SetHelpString(kColorPalette,'システムカラーパレットでの設定です');
SetHelpString(kSlider,'0〜10までの数値範囲です');
SetHelpString(kRadioButton1,'ラジオボタンは1つしか選択できないですね');
SetHelpString(kRadioButton2,'ラジオボタンは1つしか選択できないですね');
SetHelpString(kStaticText,'たまには、のぞいてね');
{作成したレイアウトの整合性をチェックします。}
verify:=VerifyLayout(dialogID);
IF verify THEN
BEGIN
{指定したダイアログID とサブルーチン名で、ダイアログイベントループを実行
:引数(ダイアログ番号,サブルーチン名):返値(最後に押されたボタンの種類)}
result:=RunLayoutDialog(dialogID, mDaialogCallback); {モダンダイアログイベントループに突入}

{メッセージ表示}
Message('OK or CANCEL:', result, ' 入力値:', aInt
,' プルダウン:', pulldownNumber, '(',pulldownString, ')'
,' チェック:',checkBoxCondition
,' カラー:',colorPaletteData
,' スライダー:',sliderData
,' リストボックス:', listBoxNumber, '(',listBoxString, ')'
,' ラジオボタン1:',rButtonCondition1
,' ラジオボタン2:',rButtonCondition2);
END;
END;

RUN(test_modandialog);
{*******************************ここまで ****************************************}


Re:ダイアログボックスの表示設定    与太郎
Tue Nov 20 23:41:45 2007

>タニさん

1〜3の操作をプラグイン・ツールで行い、
その結果、4でプラグイン・オブジェクトが生成されると理解しましたが、
それで合ってますか?

>■問題点1
>1点型オブジェクトツールを選択した際に、
>いきなりダイアログボックスが表示されてしまう。
ツールパレット上のアイコンをクリック(選択)しただけではスクリプトは実行されないはずです。
なにか誤解があるようです。

>■問題点2
>前回の設定を保持して表示する方法があるのでしょうか。
設定値の保存も初期値の設定も自動ではやってくれなません。
ダイアログ項目の初期値に前回の値を使用したいなら、
1. 設定値をテキストファイル、ワークシート、レコードなどに保存。
2. ダイアログ生成時にコントロールアイテムの値やプルダウンメニューの選択項目を設定値に変更。
ということになります。

>■問題3
>配置された文字をダブルクリックして再設定できるようにしたい。
>ボタンをクリックすることでダイアログが表示され再設定できるようにしたい。
特定のイベントに対応するスクリプトを書けば可能です。
「ヘルプ」―「VectorScript Guide」―「VectorScriptオブジェクト」―「オブジェクトのオプション
を設定する」―「スクリプトの実行オプションを設定する」の他には日本語の資料がないので、
Script談話室バックナンバーの Fri Sep 17 14:51:24 2004 〜 Tue Oct 5 18:12:27 2004、
http://www.nemetschek.net/ の「Support」―「Tech Forum」―「VectorWorks VectorScript」、
http://www.vectorlab.info/ の「VectorScript」―「Events」を御覧下さい。

再設定用のプラグイン・メニューを作って右クリックメニューに登録する方法もあります。


ダイアログボックスの表示設定    タニ
Mon Nov 19 14:21:37 2007

現在、以下の流れの機能を持つ1点型オブジェクトを作成しております。

1.図面上の選択が解除された状態で1点型オブジェクトツールを選択
2.図面上の任意の点をクリックするとダイアログボックスが表示
3.ダイアログボックス内の3つのプルダウンを順に選択すると
リストボックスの項目が絞り込まれ、最終的にリストボックスの項目を選択しOKボタンをクリック。
4.最初に図面上でクリックした任意の点にリストで選択した項目が文字(厳密には
1点型オブジェクト)で配置される。

現在、以下の問題に悩んでおります。
アドバイスをお願いいたします。

■問題点1
1点型オブジェクトツールを選択した際に、
いきなりダイアログボックスが表示されてしまう。
図面上の任意の点をクリックしてからダイアログを
表示させたいのですが。

■問題点2
ダイアログで設定した内容が保持されず、
ツールを選択するたびに毎回初期設定の状態で表示されてしまう。
また、ツールを選択した状態でも、任意の点をクリックするたびに
初期設定の状態で表示されてしまう。
前回の設定を保持して表示する方法があるのでしょうか。

■問題3
配置された文字をダブルクリックして再設定できるようにしたい。
現在は文字をダブルクリックしても「この図形に編集用画面はありません。」
と表示されてしまう。
また、文字を選択した際のデータパレットにボタンを設定し、
ボタンをクリックすることでダイアログが表示され再設定できるようにしたい。
イメージは図面枠ツールのような感じ。
パラメータタイプの設定に図面枠ツールのようなボタンの項目が
無いように思いますが、特別な設定がいるのでしょうか。

分かりにくい記述で申し訳ありません。
不明点は質疑していただければ、お答えさせていただきます。
1つでも解決方法をアドバイスいただければ助かります。

以上、よろしくお願いいたします。


Re:Re2:ダイアログボックスの設定    タニ
Mon Nov 19 13:39:19 2007

>与太郎様

早速のお返事ありがとうございます。

与太郎様のアドバイス通りにダイアログのイメージ設定と
ワークシートのハンドル接続を行ったところうまく行きました。
いつも本当にありがとうございます。

現在、試行錯誤しながらオリジナルツールを作成していますが。
まだまだ完成にはほど遠い状況です。
一つ一つ問題を解決しながら完成を目指したいと思いますので、
今後もご指導をお願いいたします。



辺長スタンプについて    哲也
Mon Nov 19 11:43:57 2007

初めて 投稿します
鈴木 義之/すずき よしゆき/ARcoating 様
が作られた 「辺長スタンプ」使わさせていただいています。
ただ、一つ不満なのが 面積表示の単位が「m2」となってしまうことです。 
単位を「m2」から「・」に変えたいのですが、
スクリプトの 「m2」 を単純に「・」に変えてもだめなようです。
面積が 表示されなくなりました。
環境は vectorworks WINDOWS版 V11.5 WINXP です。

どなたか方法をご存じの方、ご教授お願いいたします。
初歩的な質問で、申し訳ありません。


Re2:ダイアログボックスの設定    与太郎
Fri Nov 16 20:45:34 2007

ただし、
プラグインで使うダイアログで、VWのファイル内のイメージリソースを使えない場合は、ResEditなどで
MacintoshのPICTリソースを作る必要があります。

Script談話室バックナンバーの Wed Jan 5 17:05:02 2005 〜 Thu Jan 6 9:52:20 2005 で話題になって
いますが、ResEditはインテルMacやWinでは動きません。

Ver.12で追加されたImportResourceToCurrentFileでアクティブドキュメントにVWのリソースを取り込め
るみたいなので、あらかじめイメージリソースがあるVWファイルをプラグインフォルダにでも入れてお
いて、一旦アクティブドキュメントに取り込んでからダイアログに表示出来るかも知れませんが、
やったことがないのでよく判りません。


Re:ワークシートのハンドル接続    与太郎
Fri Nov 16 19:49:51 2007

イメージリソースと同様に、
GetObject('WSの名前')でWSのハンドルを取得出来ます。
VWのリソースには必ず名前が付いているので、GetObjectでハンドルを得られます。

テキストファイル(タブ区切りテキスト、カンマ区切りテキスト等)のデータを読み込むことは可能です。
Refference Manualの「入出力(File I/O)」にサブルーチンが載っています。


Re:ダイアログボックスの設定    与太郎
Fri Nov 16 19:30:56 2007

ダイアログを作るのは手間なので推測で書きます。

Ver.12以降だとCreateImageControlを使えます。
CreateImageControl
 (dialogID :LONGINT;
  componentID :LONGINT;
  iWidth :INTEGER;
  iHeight :INTEGER;
  hImage :HANDLE
  );
の、hImageがイメージリソースのハンドルです。
イメージリソースは、VWのリソースブラウザで作ります。
取り込む画像は、QuickTimeが対応しているフォーマットなら大丈夫なはずです。
イメージリソースのハンドルは、GetObject('リソースの名前')で取得出来ます。

画像を変更するには、SetImageControlHandleで別のイメージリソースのハンドルを設定して、
そのあとRefreshItemで更新すればいいのではないでしょうか。


ワークシートのハンドル接続    タニ
Fri Nov 16 12:59:53 2007

先ほどとは別の質疑ですが、
VectorScriptでワークシートのハンドル接続を行う場合、

database:=ActSSheet;
或いは
database:=GetTopVisibleWS;

というプログラムがあるようですが、
どちらもワークシートを開いた状態でないと接続されません。

あらかじめ作成したワークシートをデータベースとして、
ワークシートを閉じた状態からハンドル接続はできないのでしょうか。

或いはデータベースをワークシート以外で代用できたりするのでしょうか。
(ハードディスク上のファイルをデータベースとして接続するとか)

以上、プログラムに詳しくないため独学でツールを作っております。
ご指導をお願いいたします。


ダイアログボックスの設定    タニ
Fri Nov 16 12:05:50 2007

VectorScriptでダイアログボックスを作成しています。
以下の設定の仕方が分かる方は教えていただけないでしょうか。

■ダイアログボックスの画像配置
 ダイアログボックスにリストボックスを配置し、リストの選択によって
 右側に設定したイメージが変化する機能を設定したいのですが、
 画像の設定がよく分かりません。

 完成イメージは図形の整列機能のダイアログボックスや
 メニューバーのモデル内にある屋根作成のダイアログボックスの感じです。

 CreateControl(dialogID,itemID,controlKind,name,data);

 上記のプログラムを利用するのかと思いますが、
 画像データの取り込みの設定が良く分かりません。
 また、画像の形式や保存場所なども良く分かりません。

 調べてみるとリソースを利用し、リソースファイル作成のために
 特別なソフトがいるみたいですが。

 教えてください。




Re3:ハンドル接    与太郎
Thu Aug 30 2:00:38 2007

PIOの中なら、いずれの図形も自分で描くわけですから、
ハンドルを取りやすいような順番で図形を描けば話は単純になります。
h0をh1とh2で切り欠くなら、h1, h2, h0の順に描けば、
最初のClipSurface実行後は、h2以降のハンドルが切り欠かれた図形になります。
それをさらに切り欠けばいいわけです。

ClipSurface(h0, h1);
n:= 0;
h:= NextObj(h2);
while h <> nil do begin
__n:= n + 1;
__h3[n]:= h;
__h:= NextObj(h);
end;
for i:= 1 to n do
__ClipSurface(h3[i], h2);

(First)NIL-図形1-図形2-図形3-図形4-[図形5]-NIL(Last) ・・・・・・切り欠く前
h1・・・図形3
h2・・・図形4
h0・・・図形5(切り欠かれる図形)
(First)NIL-図形1-図形2-図形3-図形4-[図形6-図形7]-NIL(Last) ・・・最初の切り欠き後
n・・・・・2
h3[1]・・・図形6(切り欠かれた図形1)
h3[2]・・・図形7(切り欠かれた図形2)



Re:Re:ハンドル接続    タニ
Wed Aug 29 22:00:55 2007

>与太郎様

ハンドル接続の件、ClipSurfaceによって作成される図形の階層が
うまく拾えず、PrevObjとNextObjでも苦戦しています。

1つの図形を2箇所(あるいは2つの図形で)切り欠くことは可能でしょうか。
説明不足でしたが、以下の方法しか思いつかなかったために困っています。

ClipSurface(STAGEA,BASEA);
STAGEB:=LNewObj;
ClipSurface(STAGEB,BASEB);

よろしくお願いいたします。


Re:ハンドル接続    与太郎
Wed Aug 29 11:53:40 2007

ClipSurface(切り欠き)で生成される図形は1個とは限らないので、LNewObjではハンドルが取れません。
ClipSurfaceを実行すると、元の図形に置き換わって新しい図形が挿入されます。
ですから、最初にPrevObjとNextObjで前後の図形ハンドルを調べておいて、
ClipSurface実行後にその間の図形ハンドル(複数の場合もあり)を探し出すことになります。

「バックナンバー」-「2005年・Script談話室」-「図形の数」に同様な話題があります。
ただし、ClipSurfaceとIntersectSurfaceでは、図形が生成される位置や、元の図形が残るかどうかが違います。


ハンドル接続    タニ
Tue Aug 28 20:23:37 2007

プラグインオブジェクトを作成していますが、
以下のハンドル接続がどうしてもうまく行きません。

ClipSurface(STAGEA,BASEA);
STAGEB:=LNewObj;

何か根本的な間違いがあるのでしょうか。
分かる方、教えてください。


Re4:シンボルを挿入点を基準に反転   nds
Thu Aug 16 21:23:01 2007

管理人様、お手数をお掛けして申し訳ありません。
お気遣いに感謝します。

与太郎様、更なる情報に感謝します。
いろいろと構想が膨らんできました。ありがとうございます。

これからもよろしくお願いします。


業務連絡    管理人
Thu Aug 16 18:41:17 2007

管理人です。
まことに勝手ながら、ndsさんの書き込みの末尾のメールアドレスを削除させていただきました。
関連して、与太郎さんの書き込みも再書き込みさせて頂きました。
談話室などに書き込んだメールアドレスに迷惑メールが殺到することがあるためです。
ご了承下さい。


Re3:シンボルを挿入点を基準に反転    与太郎
Thu Aug 16 18:36:12 2007

シンボル描画時に反転したいのでしたら、

CallTool(-209);
h:= FSActLayer;
if h <> nil then begin
{ この間で反転 }
end;{if}

のように、シンボルツールで描いた後すぐに反転する方法もあります。


Re:シンボルを挿入点を基準に反転   nds
Thu Aug 16 18:35:52 2007

与太郎様、早速のご返答ありがとうございます。
スクリプトの流れをイメージすることができました。

展開図や矩計図の建具断面等のシンボルをこれまでは反転した物を別にシンボル登録していたのですが、
シンボルが多くなって選ぶのが大変になってきたため、反転タイプのシンボルはなくして、
シンボルを配置してから挿入点を基準に反転させようと考えた次第です。

以前はいろいろとスクリプトを作ったのですが。
スクリプトを作るのも久しぶりなのでうまくできるか不安ですが、
ご教授いただいたことをもとに、手始めに、
シンボルを1個だけ選択した時のスクリプトからトライしたいと思います。
(複数選択されている場合、エラーメッセージを出すように設定する必要がありそうですが)

質問ばかりですみませんが、
以前、ミニキャドの時代にA&Aで提供していた、シンボル配置ツール
(ツールを選択してからマウスをプレスすると、シンボルがポップアップメニューのように画面に表示されて、そこからシンボルを選択し配置する)
そのような物もできますでしょうか。

自己紹介が遅れましたが、
当方、青森にて、設計事務所を営んでいます。
ミニキャド5の頃からのユーザーです。
これからもよろしくお願いします。


Re:シンボルを挿入点を基準に反転    与太郎
Thu Aug 16 12:58:10 2007

可能です。FlipHorかFlipVerでシンボルを反転出来ますが、
GetSymLocで反転前と反転後の座標を調べて、HMoveで挿入点の位置を元に戻す必要があります。

複数のシンボルを選択して各々のシンボル挿入点を基点に反転させるには、
最初に全ての選択シンボルのハンドルを配列に保存しておいて、一個ずつ選択しながら反転します。

選択したグループの中にあるシンボルも反転するときは、
DoMenuTextByNameで選択したグループに入り、全てのシンボルを反転した後でグループを出ます。
この場合は、グループ図形のハンドルも配列に保存しておきます。

回転しているシンボルを反転する場合は、
角度をゼロにしてから反転して再び元の角度に戻す、といった工夫が必要かもしれません。


シンボルを挿入点を基準に反転   nds
Thu Aug 16 8:47:03 2007

選択したシンボルを挿入点を基準に反転させるスクリプトを作ることは可能でしょうか。
Mac版のVer.12.5を使用しています。

よろしくお願いします。


プラグインオブジェクトのパラメータ設定    タニ
Fri Jul 27 16:49:15 2007

プラグインオブジェクトのパラメータの設定について教えてください。

パラメータの型でラジオボタンを選択した際に、
データパレットの項目を2列で表示したいのですが、
特別な設定がいるのでしょうか。

現在は設定の際に項目毎に改行しているため、
データパレットには縦1列でラジオボタンが並んでいます。

ご存知の方、よろしくお願いいたします。


Re:線をクリックして、その長さを記入したい    スクリプト初心者
Mon Jul 23 13:44:24 2007

クマ様

ありがとうございます。いま、確認して大感激です。解読挑戦します!!
わからない部分があったら、また質問させていただくかも知れません。
どうぞ、よろしくお願いします。


パラメータの可視性    タニ
Fri Jul 20 9:27:40 2007

>与太郎様

早速のご返答ありがとうございます。
教えていただいたことを参考に試してみたところ、
うまく機能させることができました。

今後もご指導をお願いいたします。
ありがとうございました。


Re:パラメータの可視性    与太郎
Thu Jul 19 20:56:54 2007

GetCustomObjectInfoのパラメータには何も設定する必要はありません。
何故パラメータが非表示に出来ないかと言うと、
最初にパラメータを無効にしているため、表示のON/OFFを受け付けないからでしょう。
EnableParamterとSetParameterVisibilityの行を入れ替えればいいと思います。
というか、パラメータを非表示にしたら、わざわざ無効にする必要はないような気がします。

GetCustomObjectInfoは、4つの変数にプラグインオブジェクト(PIO)の情報を返します。
1)objNameは、図形(描画された個々のPIO)の名前です。PIO(定義)の名前ではありません。
2)objHdは、描画された個々のPIOのハンドルです。いわゆる図形ハンドルです。
3)recHdは、PIOのパラメータリストとして使われているレコードの初期値(レコード定義)へのハンドルです。
4)wallHDは、ドアや窓のようにPIOが壁に挿入されているときの、元の壁のハンドルです。
PIOの名前は、GetName(recHd)で調べます。


パラメータの可視性の設定    タニ
Thu Jul 19 18:32:56 2007

プラグインオブジェクトを作成し利用しているのですが、
パラメータの可視性の設定の件で困っています。

BEGIN
...
resultsStatus := GetCustomObjectInfo(objName,objHd,recHd,wallHD);
IF resultStatus THEN BEGIN
EnableParamter(objHD, `Space Width'. FALSE);
SetParameterVisibility(objHd, `Space Depth'. FALSE);
...
END;
END;

以上のプログラムのGetCustomObjectInfo(objName,objHd,recHd,wallHD)で
objName,objHd,recHd,wallHDに何を設定したらいいか分かりません。

objNameはプラグインコマンドの名前?
objHdはHANDLEですが、あらかじめ何かをHANDLEとして設定する必要がある?
recHd,wallHDもHANDLEですが、意味が分かりません。

分かる方がおられましたら教えていただけないでしょうか。


Re:線をクリックして、その長さを記入したい    クマ
Thu Jul 19 12:39:02 2007

昔を思い出し、懐かしくて、書込ます。
最初に作りたいと思ったのがまさにこれ。
ほぼその時のものです(・・・・遠い目)。
文中の{ }を削除すると、イイことがあります。
{************************* 線分長スタンプ ここから ***************************}
PROCEDURE LLength;

var
LStr: STRING;
h:HANDLE;
j:INTEGER;
L,a,x,y:real;
begin
DSelectAll;
GetPt(x,y);
h:=PickObject(x,y);
L:=HLength(h);
a:=HAngle(h);
if a>95
then
a:=a-180;
if a<-85
then
a:=a-180;
LStr:=Num2Str(0,L);
{j:=Len(LStr)+1;
if j>4 then begin
j:=j-3;
Insert(',',LStr,j);
end;}
TextOrigin(x,y);
BeginText;
LStr
EndText;
Rotate(a);
Redraw;
DSelectAll;
end;
run(LLength);
{************************* 線分長スタンプ ここまで ***************************}

もう1つ、
これは、ここの古いスクリプトを見て、うまいこと考えるなぁと思ったものの一部。
(少し変えてます)
PROCEDURE DrawDim;

Var
x1, y1, x2, y2:REAL;

BEGIN
PenSize(0);
GetPt(x1,y1);
GetPt(x2,y2);
MoveTo(x1, y1);
LineTo(x2, y2);
DimText;
END;
run (DrawDim);

スクリプト初心者さん、頑張って読解いて下さい。いろんなところに応用がききます。


線をクリックして、その長さを記入したい    スクリプト初心者
Wed Jul 18 21:59:05 2007

Win版のVer.10を使用しています。
線をクリックして、その長さを文字で記入したいのです。
できれば、文字の角度をその都度変更できたりすると、ベストです。
こんなことって、スクリプトでできますか?
どう記述していいものやら、途方にくれています。
教えてください!よろしくお願いします。


RE:インクルードファイルの件    管理人
Fri Jul 13 9:21:24 2007

vvさん、ご報告ありがとうございます。
また、クラブの財産がひとつ増えました。


  vv
Fri Jul 13 8:53:20 2007

インクルードファイルの件で、その後自己解決いたしました。

問題点は・・・
図面ファイル内のスクリプトパレットに登録してあるスクリプトと、
プラグインメニューのスクリプトでは、インクルードファイルの、
相対アドレス参照先がことなるようです。


図面ファイル内のスクリプトパレットに登録してあるスクリプトは、
VectorWorksディレクトリ(アプリケーションがあるディレクトリ)を
基準アドレスとし、
プラグインメニューのスクリプトでは
VectorWorksディレクトリ内のPlug-Insディレクトリを
基準アドレスとするようです

例えば、
{$INCLUDE exp.vss}
と記入した場合、
図面ファイル内のスクリプトパレットに登録してあるスクリプトは
VectorWorksディレクトリの exp.vssをインクルードし、
プラグインメニューのスクリプトでは
VectorWorks→Plug-Insディレクトリの exp.vssをインクルード するようです。

以上、もしかしたら常識的なことだったかも知れませんが、自己解決したので、ご報告です。
お騒がせしました。


  vv
Fri Jul 13 3:32:15 2007

こんばんは。
インクルードファイルの件で、教えていただけると助かります。
{$INCLUDE exp.vss}
という記述を使って、VectorWorksアプリケーションがあるディレクトリ内の
インクルードファイルを読む場合に、
図面ファイル内のスクリプトパレットに登録してあるスクリプトからは、
インクルードファイルを読み込めるのに、同じスクリプトを
メニューとして登録すると、インクルードファイルを読めませんと
エラーがでます。
メニューに登録するスクリプトは、インクルードさせることは出来ないのでしょうか?
よろしくお願いします。


環境
Windows2000 VW11.5


エディターウインドウの文字化け    マックン
Sun Jul 8 20:09:58 2007

いつもお世話になります。
VWのスクリプト編集画面を表示した際にほとんどの場合、日本語部分が文字化けしてしまいます。
フォントの設定を直しても改善されません。
同じファイルでもその時々で表示が正常だったり化けたりでまったく見当がつきません。
何が原因かわかる方はいらっしゃるでしょうか。
Mac OS10.4
VW12
です。


Re:ワークシートの少数点    与太郎
Fri Jul 6 19:17:02 2007

小数点以下の切り捨てはINT()で計算します。

切り上げ関数はExcelにも無いようなので、当然VWにもありませんが...
引数(A)より大きな値(B)から(A)を引いた値の小数点以下を切り捨てて、その結果を(B)から引いて
やれば一応切り上げも計算できます。
たとえば、A=10.5、B=100として、
100 - 10.5 = 89.5
INT(89.5) = 89
100 - 89 = 11
で、10.5を切り上げた値(11)が得られます。
ただし、この方法だとAがB以上の場合は切り捨てになるので、実際はB=INT(A)+1とします。
同じく A = 10.5 の場合、
B = INT(10.5) + 1 = 11
11 - 10.5 = 0.5
INT(0.5) = 0
11 - 0 = 11
となり、ちゃんと10.5を切り上げた値が得られます。
ワークシートで(A1)の値を切り上げるときは、
=INT(A1)+1-INT(INT(A1)+1-A1) と入力します。

あるいは、小数点以下を先に求めて,ゼロでなければ1を足すという方法もあります。
=IF(A1-INT(A1)=0,INT(A1),INT(A1)+1)
こちらのほうが精度は良いです。

どちらの方法でも、値がマイナスなら式を変えないといけません。


ワークシートの少数点    ワークシート初心者
Thu Jul 5 11:02:16 2007

ワークシートの少数点の設定を切り捨て/切り上げ等に設定できるのでしょうか?
できるのであれば設定の方法を教えてください


Re10:V12のデータをV9に一括変換    与太郎
Fri Jun 29 21:33:47 2007

>ケンケンさん
やっぱりEnterキーも自動で押してくれたほうがいいですよねえ。

AppleScriptでキーを打ったりボタンを押したりするのが可能になった経緯は、
>VectorScriptで制御化不能だったことを可能にする    与太郎
>Thu Jun 14 21:22:35 2007
のリンク先に載っています。

要は、System EventsからVWにキーコードを送れるということです。
しかし、単純に
tell application "System Events"
__tell process "VectorWorks11.5"
____keystroke "s" {using command down, option down} --「書き出し」にCmd+Opt+Sを割り当てる
____keystroke return --デフォルトボタン
____keystroke "w" --「閉じる」
__end tell
end tell
とやってもうまくいきません。
VWを追い越さないようにタイミングを合わせる必要があります。


V12のデータをV9に一括変換    ケンケン
Fri Jun 29 13:15:04 2007

与太郎 さん
あの後、プラグインメニューとAppleScriptの連携で、一括変換を完全自動化出来ました。
もっさりもっさりとファイル変換をこなします。

と書かれていますがどのようにすれば完全自動化になるんでしょうか?
エンターキーは手動でおさえないといけないのでしょうか?
よろしくお願い致します。



Re:Re:プラグインコマンドの保存先   totoro
Wed Jun 27 10:46:17 2007

Windowsなら
以下にリンクするショートカットを作っておけば
隠しファイル状態でも、Plug-insのフォルダを
ショートカットから開くことができますよ。

"C:\Documents and Settings\%username%\Application Data\Nemetschek\VectorWorks\12\Plug-ins"


Re:Re:プラグインコマンドの保存先    タニ
Mon Jun 25 19:25:09 2007

与太郎様

早速のご返答ありがとうございました。
VW12.5のVWHelpで確認したところ、以下のページで確認することが出来ました。

VectorScript Guide >> VectorScript プラグインを使用する
>> プラグインを作成して使用する >> プラグインが機能する方法

尚、私のパソコンでは、
「C:\Documents and Settings\username\Application Data」
のApplication Dataが隠しファイルになっていたため、
存在に気づきませんでした。

ありがとうございました。

なにぶんVectorScriptを触りながら勉強しているため、
行き詰ったときに調べる手段がなく困っていました。
このようなホームページがあることを知り大変助かります。

今後もご指導お願いいたします。


Re:プラグインコマンドの保存先    与太郎
Mon Jun 25 12:59:04 2007

下のほうでも少し触れられていますが、
Win2000なら「Documents and Settings」フォルダ内、
Mac OSXなら「Users」フォルダ内を探せば見つかるはずです。

プラグインの共有といえば、VW12からはプラグインの保存先が別のフォルダのショートカット(エイ
リアス)でも構わないようです。サーバ上のフォルダでも良いのかどうかはわかりませんが。

VectorScript Guide >> VectorScriptの概要 >> 新機能 >> プラグインのパス拡張
に載っています。


プラグインコマンドの保存先    タニ
Mon Jun 25 0:19:57 2007

作業の効率化をしようとVectorScriptで1点型オブジェクトを作成して
仕事で活用しています。
以前、VWのVer.11.5で作成したときはプラグインオブジェクトのプログラムファイルが
VWのPlug-insフォルダ内に作成されましたが、VW12.5で新たに1点型オブジェクトを
作成しても、VWのPlug-insフォルダ内に見つかりません。
社内でツールを共有したいのですが、プログラムファイルがどこに保存されているか
ご存知の方がおられましたら、ご返答をお願い致します。


Re:複数ベクターデータをDXF書出しの自動化    ティミー
Thu Jun 21 19:52:38 2007

与太郎様

VectorScriptではできませんか。。。
Windows Script Hostというのがあるのですね。遠い道のりになりそうですが、
紹介していただいたサイトを見てみます。

ありがとうございました。


Re:複数ベクターデータをDXF書出しの自動化    与太郎
Thu Jun 21 10:31:48 2007

VectorScriptでは複数のファイルを選択して...という操作は出来ません。また、ダイアログが開
いた時点で実行が中断してしまいます。(ボタンを押せないため)
Windowsなら、Windows Script HostからVWにキーコードを送ることで、メニューコマンドを実行して、
ダイアログのボタンを押すことは可能なようです。

Windows Script Hostに関するサイト
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/


複数ベクターデータをDXF書出しの自動化    ティミー
Wed Jun 20 20:45:53 2007

初めて投稿します。
複数のベクターのデータをDXFで書き出したいのですが、読み込みも一つづつ、書出しも一つづつと同じ事の繰り返しなのでなにか自動化出来ないものかと思 い書き込みしています。
フォルダー指定で読み込み、DXF書出しの自動化スクリプトできないものでしょうか?
または何かのソフトで一括変換なるものがあれば教えていただきたいのですが。

以上よろしくご教授おねがいします。
Vector10/win2000


Re6:GetUnits()関数のテストのお願い   masafumi
Sat Jun 16 10:40:57 2007

kumaさん、与太郎さん、有り難うございます。
エクスプローラで検索しましたら出てきました。
Windows 2000ですとDocuments and Settingsフォルダ内のPlug-Insフォルダーの中に有りました。
こんな所まで参照しているのですね。

>初期設定 name=km
>初期設定 squareName= sq km

これは恐らくスクリプトを2回以上実行した結果ではないでしょうか。

「 for i:=1 to 10 do 」としていましたから、最後の Units(i); には Units(10); が入っています。

>Units(10) name=km
>Units(10) squareName= sq km

となっていますから、2回目は設定単位が「Km」になっていると想像しています(違うかな・・・)。


Re5:GetUnits()関数のテストのお願い    与太郎
Fri Jun 15 23:24:48 2007

確かにファイル名で検索したら見つかりました、OSXのユーザーフォルダの奥底に。
最初の2行は、
初期設定 name=km
初期設定 squareName= sq km
でした。
起動時に開くファイルが違うからでしょうか?


Re4:GetUnits()関数のテストのお願い   kuma
Fri Jun 15 21:37:57 2007

結果だけ貼りつけます。
最初、あると思っていたPlug-Insフォルダー内に見当らなかったので、再度実行しました。
見つかった場所は、ユーザーフォルダー内のPlug-Insの中でした。

初期設定 name=km
初期設定 squareName= sq km
Units(1) name="
Units(1) squareName= sq ft
Units(2) name="
Units(2) squareName= sq in
Units(3) name='
Units(3) squareName= sq ft

Units(4) name=yd
Units(4) squareName= sq yd
Units(5) name=mi
Units(5) squareName= sq mi
Units(6) name=オm
Units(6) squareName= sq オm

Units(7) name=mm
Units(7) squareName= sq mm
Units(8) name=cm
Units(8) squareName= sq cm
Units(9) name=m
Units(9) squareName= sq m



Re3:GetUnits()関数のテストのお願い   masafumi
Fri Jun 15 19:17:26 2007

補足です。

fileName:='C:\Program Files\VW125J100_DEMO\Plug-Ins\01_UnitsTest.txt';

とフルパスを指定しますと、エクスプローラで「01_UnitsTest.txt」が見えるようになりました。
同様に

fileName:='D:\Test\01_UnitsTest.txt';

としても、ちゃんと見えます。手を抜くな!ってことですかね。(^_^;)


Re2:GetUnits()関数のテストのお願い   masafumi
Fri Jun 15 18:35:04 2007

与太郎さん、有り難うございます。

>デモ版のVW12ではファイルを書き出せませんでした。

デモ版とは思い付きもしませんでした。(^_^;)
早速ダウンロードして、色々さわってみました。

拙者作のフリーソフトをご利用の方に教えて頂きましたが「01_UnitsTest.txt」ですが、
エクスプローラには表示されませんが、なんと・・・プラグインコマンド編集画面には表
示されます。「ツール」→「スクリプト」→「プラグインコマンド」で確認出来ます。
エクスプローラには表示されないんですねぇ。検索にも引っかからないようで、教えて頂
いた時は何のことか良く理解できませんでした。(^_^;)

プラグインコマンドとして認識されているってこと?。

実行してみてわかったことですが、「 for i:=1 to 10 do 」では最後が書き出されないですね。
これを「 for i:=1 to 12 do 」と変更しての結果は下記のようになりました。

起動直後の 'name' には相変わらず何も入っていませんねぇ。

-------------------------------------------------
初期設定 name=
初期設定 squareName= sq mm
Units(1) name="
Units(1) squareName= sq ft
Units(2) name="
Units(2) squareName= sq in
Units(3) name='
Units(3) squareName= sq ft

Units(4) name=yd
Units(4) squareName= sq yd
Units(5) name=mi
Units(5) squareName= sq mi
Units(6) name=オm
Units(6) squareName= sq オm

Units(7) name=mm
Units(7) squareName= sq mm
Units(8) name=cm
Units(8) squareName= sq cm
Units(9) name=m
Units(9) squareName= sq m

Units(10) name=km
Units(10) squareName= sq km
Units(11) name=。
Units(11) squareName=
Units(12) name=。
Units(12) squareName=
-------------------------------------------------


Re:GetUnits()関数のテストのお願い    与太郎
Fri Jun 15 13:10:15 2007

デモ版のVW12ではファイルを書き出せませんでした。
12ユーザの方、よろしくお願いします。


GetUnits()関数のテストのお願い   masafumi
Fri Jun 15 1:36:15 2007

こんばんは、masafumiです。ご無沙汰しております。

Ver12になって単位に「Km」等が追加されたようで、Units() 関数が変更になっているようですね。
私は未だVer10.5なので、確認出来ません(涙)。
そこで皆さまにお願いです。Ver12で下記のスクリプトを実行して頂けないでしょうか。
起動直後のGetUnits()関数の内容も知りたいので、VectorWorksを起動後、単位を変更しない状態
で実行して頂きたいのです。実行後「Plug-Ins」フォルダ内に「01_UnitsTest.txt」と言うテキス
トファイルが出来ます(たぶん出来ると思います)。(^_^;
このファイルの内容をここに貼り付けて頂ければ有りがたいです。

あっ、それから・・・スクリプトを実行しますと単位が変更されますから、実行後に単位をいつも
使用している単位に戻してください。
お手数をお掛けしますが、よろしくお願いします。

{************************* 単位テスト ここから ***************************}
procedure chk_GetUnits;
var
i:Integer;
fraction,display:LONGINT;
format:INTEGER;
upi:REAL;
name,squareName:STRING;
fileName:String;
str:String;
begin
fileName:='Plug-Ins\01_UnitsTest.txt';
GetUnits(fraction,display,format,upi,name,squareName);
str:=Concat('初期設定 name=',name,chr(13));
str:=Concat(str,'初期設定 squareName=',squareName,chr(13));
Rewrite(fileName);
for i:=1 to 10 do
begin
Units(i);
GetUnits(fraction,display,format,upi,name,squareName);
str:=Concat(str,'Units(',i,') name=',name,chr(13));
str:=Concat(str,'Units(',i,') squareName=',squareName,chr(13));
if (i Mod 3) = 0 then
begin
WriteLn(str);
str:='';
end;
end;
Close(fileName);
end;
Run(chk_GetUnits);
{***************************** ここまで **************************}


VectorScriptで制御化不能だったことを可能にする    与太郎
Thu Jun 14 21:22:35 2007

最近知ったのですが、「System Events」というアプリを通してイベントを送ってやれば、AppleScript
非対応のアプリでも、AppleScriptでメニューコマンドを実行したり、ボタンをクリックしたり、キー
を押したり出来るということです。
「System Events」は、OS10.2の途中からシステムに導入されていて、常にバックグラウンドで走って
いるので、OSXならこの機能を標準で使えます。

詳しくはこちら
http://www.tidbits.com/tb-issues/lang/jp/TidBITS-jp-670.html#lnk3


中途半端な2バイト文字対応    与太郎
Thu Jun 14 20:37:55 2007

VW12.5からユニコードに対応したようで、文字図形に関するサブルーチンに変更があったようです。
具体的には、GetTextFont, GetTextSize, GetTextStyle, SetTextFont, SetTextSize, SetTextStyle,
GetTextLengthのパラメータや返り値がバイト単位から文字数単位に変わっています。
しかしChar型が1バイトのままなので、Copy, Pos, Lenは相変わらずバイト単位です。
というわけで、VW2.5では文字の位置はバイト、文字属性の位置は文字数で指定しないといけない状況
になっています。文字図形の一部分だけ属性を変えるスクリプトは、実行すると属性の位置がずれたり
エラーになるので、VW12.5用に書き直す必要があります。

この機会にChar型を2バイトに拡張して、Copy, Len, Posも2バイト文字に対応する選択肢もあったと
思いますが、それはそれで問題を引き起こしたでしょう。例えば、「断面-01」, 「断面-02」のように
先頭が「断面」の文字を見つけるために、
if Copy(GetText(h), 1, 4) = '断面' then としていたら、文字数単位だと「断面-0」と「断面」を比
べることになるので、先頭が「断面」の文字は見つかりません。
if Copy(GetText(h), 1, Len('断面')) = '断面' then とするか、「断面」を定数か変数にして
if Copy(GetText(h), 1, Len(danmen)) = danmen then とすればバイト単位でも文字数単位でも関係な
いですが、私自身も一番最初のように書いてるのがけっこうあります。まさかchar型が2バイト文字に
対応するとは思ってませんから。
とはいえ、将来のことも考えればchar型の2バイト化もありだと思うのですが、仕様を勝手に変えられ
るのも困りもの。コンパイルオプションで切り替えるように出来ればいいですね。

現状のスクリプトによる文字図形編集には、文字と文字属性の関係がずれてしまうという問題もありま
す。標準装備の「文字検索/置換...」コマンドでさえ、この問題を抱えています。
「この文字は赤です」という文字図形があって、「赤」だけ赤色に設定しているとき、「この文字は」を
「これは」に置換えると、赤色の位置は変わらないので「これは赤です」の「す」が赤になってしまい
ます。
この現象は、文字コードと文字属性を一体化した変数型を導入して、ConcatやCopyで文字と文字属性を
同時に編集できるようにすれば解消可能だと思います。処理が重くなったりする懸念はありますが、そ
こはVWの中の人に頑張ってもらうということで。


V12のデータをV9に一括変換    ケンケン
Mon Jun 11 17:51:47 2007

ありがとうございました。
「__」をタブに置き換えてから保存できました。

また、わからないときはご教授ください。
ありがとうございました。m(_ _)m



Re:3点指示による円弧の作図    与太郎
Mon Jun 11 12:42:16 2007

始点〜中心と終点〜中心の距離が等しくないと、矛盾なく円弧が描けません。
3点の内、どの2点を優先させるかによって、やりかたが変わってきます。
たとえば中心と始点を優先すると、下のような描き方になります。

function ArcBy3Pts(xC, yC, xSt, ySt, xEd, yEd:real):handle;
var
__result__:handle;
__r, aSt, aEd, aArc__:real;
__v__:vector;
begin
__r:= Distance(xC, yC, xSt, ySt);
__if r = 0 then
____result:= nil
__else begin
____v.x:= xSt - xC; v.y:= ySt - yC; aSt:= Vec2Ang(v);
____v.x:= xEd - xC; v.y:= yEd - yC; aEd:= Vec2Ang(v);
____if aEd <= aSt then
______aEd:= aEd + 360;
____aArc:= aEd - aSt;
____Arc(-r, r, r, -r, aSt, aArc);
____result:= LNewObj;
____HMove(result, xC, yC);
__end;
__ArcBy3Pts:= result;
end;{ArcBy3Pts}


3点指示による円弧の作図    マックン
Sun Jun 10 16:33:00 2007

いつもお世話になります。
スクリプトにて円弧を作図したいのですが、円光の始点と終点と中心の3カ所の座標を指示して作図させることは可能でしょうか。
よろしくお願いいたします。


Re7:V12のデータをV9に一括変換    与太郎
Fri Jun 8 18:48:09 2007

on open 〜 end openまでをテキストエディタにコピーして、「__」をタブに置き換えてから、
スクリプトエディタに貼り付けます。
アプリケーションとして保存できませんか?


V12のデータをV9に一括変換    ケンケン
Fri Jun 8 14:55:39 2007

与太郎さん ダメでした。
下記をアップルスクリプトで保存するとエラーが出ました。

"end"があるべきところですがunkown tokenが見つかりました。
が出て保存が出来ませんでした。

どの様にすれば宜しいのでしょうか。
ご教授、よろしくお願い致します。


Re5:V12のデータをV9に一括変換    与太郎
Fri Jun 8 14:13:00 2007

あの後、プラグインメニューとAppleScriptの連携で、一括変換を完全自動化出来ました。
もっさりもっさりとファイル変換をこなします。


V12のデータをV9に一括変換    ケンケン
Fri Jun 8 8:32:36 2007

与太郎さん、早急の対応ありがとうございます。
一度、操作させていただきます。

また何かありましたらご教授ください。


Re3:V12のデータをV9に一括変換    与太郎
Thu Jun 7 19:47:01 2007

取り出しコマンドにショートカットキーを割り当てれば少しは楽になるのでは、と思ったら、
「このメニュー内でショートカットキーを割り当てることは出来ません。」とVWに言われてしまいました。
ショートカットキーを割り当てたければ、下の1行スクリプトをプラグインメニュー化する必要があります。

DoMenuTextByName('Export Previous File Version', 1);{VW9を取り出す}

あまりに芸が無いので、取り出し後ファイルを閉じるようにします。

DoMenuTextByName('Export Previous File Version', 1);{VW9を取り出す}
DoMenuTextByName ( 'Close', 0 );{閉じる}

これをプラグインメニュー化して、作業画面でメニューに登録し、ショートカットキーを割り当てます。
このスクリプトを実行すると、取り出しコマンドを実行してダイアログを表示してくれますが、
「保存」ボタンは自動的に押してくれないので、自分でボタンを押すか、Enterキーを押す必要があります。

このスクリプトを使ってファイル変換をすると、下のような具合になるでしょう。

以下をファイルの数だけ繰り返す。
__VW12のファイルを開く。
__ショートカットキーでスクリプトを実行。
__「保存」ボタンをクリック。(またはEnterキーを押す)
以上。

百個くらいならともかく、千個のファイルでこれをやるのは大変です。
試しにAppleScriptでもやってみます。

on open | selectFiles |
__tell application "Finder"
____repeat with | currFile | in | selectFiles |
______set | filePath | to (| currFile | as string)
______if folder | filePath | exists then
______else
________open | currFile |
________tell application "VectorWorks11.5"
__________DoScript "
____________DoMenuTextByName('Export Previous File Version', 1);{VW9を取り出す}
____________DoMenuTextByName ( 'Close', 0 );{閉じる}
__________"
________end tell
______end if
____end repeat
__end tell
end open

"VectorWorks12"の部分は、環境によって変わるかも知れません。
スクリプトエディタでこれをアプリケーションとして保存するとドロップレットになるので、
複数のファイルを一度に処理出来ます。(Enterキーは自分で押さないといけませんが)

AppleScriptのドロップレットを使った変換作業は下のような具合になります。

VW12を起動しておく。
複数のVW12のファイルをドロップレットに落とす。
以下をファイルの数だけ繰り返す。
__ダイアログが出たら「保存」ボタンをクリック。(またはEnterキーを押す)
以上。

いずれにしろ、終了までモニタの前に張り付いてる必要はありますが、
どちらが楽で早いかは問うまでもないでしょう。


V12のデータをV9に一括変換    ケンケン
Thu Jun 7 12:23:15 2007

ファイル数は100から1000数ほどです。
入稿によって違いますが。

DoMenue....メニューコマンドとはなんでしょうか?
よろしくお願いいたします。


re:V12のデータをV9に一括変換    マックン
Thu Jun 7 0:27:02 2007

DoMenue....でメニューコマンドを実行させれば良いと思います。
ただ、どのくらいのファイル数を変換させるかわかりませんが、少なめなら地道に手作業で行うのもまたひとつの方法だと思います。


V12のデータをV9に一括変換    ケンケン
Wed Jun 6 16:53:50 2007

題名が間違えてしまいました。

手動ではV12のデータを手動でV9に保存出来るのですが。
V12のデータを一括変換またはスクリプトでV9のデータに連続変換出来ないのでしょうか。
初心者で申し訳ありません。
よろしくご教授お願いいたします。


手動ではV12データをV9ミニクチ    ケンケン
Wed Jun 6 16:49:14 2007

V12のデータを一括変換またはスクリプトでV9のデータに変換出来ないのでしょうか。
初心者で申し訳ありません。
よろしくご教授お願いいたします。


Re7:多角形について    がんだるふ
Fri Jun 1 21:30:47 2007

>さらっと流してしまいました。
いえいえとんでもないです。
こうゆう掲示板で思いを伝える難しさは、他のサイトで
痛い目をしましたから。(私が悪いのですが・・・)

>元の多角形の頂点の座標を読み、閉じた多角形を新しく作り、元の多角形を削除することになります。
>必要なら、元の図形の名前、属性、レコードも再現しないといけません。

あちゃー!? 確かに言われるとうりですね。そこまで考えて無かったです。
ただ、「自己交差ポイントはグリットに乗っていない事が多い」ので、
図形の書き直しまではスクリプトに求めようと思っていませんでした。

ここは、設計者の思いもあるでしょうから書き直しを求めるメッセージで
伝えればいいのかなと言うくらい軽く考えていました。
多角形が開いている図形は、「多角形に変換」の処理で閉じるので問題視していません。

>そしてプログラマも間違うという事実・・・
そのとうりです。初めから100点満点は望んでいません。
まず、「やってみようよ!」位でやろうとして、つまずいてしまいました。

今日、とりあえず今まで私が調査した内容について、回覧メールを設計者に発信しました。
Wed May 30 9:27:03 2007 で書き込んだ ベクターデータ・・・です

最近、設計者に訴えているのが「面」についてです。
例えば日の丸図形があって、丸が面なのか、穴なのか そこから始めないと
いけない状態です。 また、愚痴でしたね。失礼しました^^;


Re6:多角形について    与太郎
Fri Jun 1 18:26:57 2007

すいません、
私の中での優先度というか興味が「多角形の開閉 < 多角形の自己交差」だったもんで、
さらっと流してしまいました。

スクリプトで多角形を閉じようとすると、
元の多角形の頂点の座標を読み、閉じた多角形を新しく作り、元の多角形を削除することになります。
必要なら、元の図形の名前、属性、レコードも再現しないといけません。
で、スクリプトを書く手間とデータパレットのチェックボックスをクリックする手間を比べてみるに、
とりあえずクリックでいいか、と思ったのでした。

自己交差を調べるには、
普通にやると最悪多角形の全ての辺を交差判定する必要があります。
VWでは、「抜き取り」コマンドを実行して元の多角形と抜き取った図形を比べて、出来た図形の数や
面積の違いで判定出来ます。
いずれにしろ単純ではないですが、こちらはスクリプトを書くしか方法はないです。

「人は間違える」
はい、そのとおりです。そしてプログラマも間違うという事実も受け止めないといけません。


Re5:多角形について    がんだるふ
Wed May 30 22:13:17 2007

与太郎さんたびたびすみません。

>回路パターンの多角形は必ず閉じていて、・・・
そうなんです、電子部品でイメージが沸き難くければ
プリント基板をイメージして、小型化したものが電子部品です。

確かに与太郎さんの言われる方法もそうなんですが
この方法と私が初めに書いた方法(多角形に変換)
どちらもデータパレットの「多角形を閉じる」にチェックが
入っていればOKなのは知っています。

ですが、「人のやること」です。「人は間違える」「人は忘れる」
と言う前提で考えると「人に頼る方法」を出来るだけ避けたいです。
毎回やることの「ルーティンワークのマクロ化」がそもそもの発想です。

因みに「人は間違える」・・・はあのTOYOTAの工程設計に使用されている
考え方だそうです。 なので「人」を否定しているわけではありません。

これって高望みでしょうか?


Re4:多角形について    与太郎
Wed May 30 16:15:39 2007

回路パターンの多角形は必ず閉じていて、自己交差はありえないということですね。
グループ解除後なら、選択マクロで多角形だけを選択して,データパレットで「多角形を閉じる」
をチェックすれば、全ての多角形を閉じられます。


Re:多角形について    がんだるふ
Wed May 30 9:45:45 2007

追記です。

最近感じているのですが、VectorWorksはMSOFFICEに例えると「EXCEL」
私の使用しているCAD α-SXは「ACCESS」に良く似ている。

OFFICEソフトもそうなのですが、どちらも良い点・悪い点?があり
個性だと思うので、上手くdxfで共有させたいです。


Re:多角形について    がんだるふ
Wed May 30 9:27:03 2007

与太郎さん特に指名した訳ではなかったのですが、直接の回答有難うございます。

約2年前から今のCADを使う仕事に変わり、20名強の設計者から作図依頼を受けています。
VectorWorksが大半なんですが、それ以外のCADも複数あり、dxfファイル変換後では
調整が難しく、設計者側のCADで対応しようと思って取り組みだしたら

PASCALに似たVectorScriptを見ているのですが
昔 MZ-80 (パソコン)の時代のBASIC で遊んでいた以来
プログラムには触れていなかった程度なので殆ど「超初心者」です。

ご提示のVectorScript Referenceではないのですが、Beginner's Guideを印刷し
掲示板にある求めたいプログラムに近い物を解読しようかと只今勉強中です。

-----------------------------------------------------------------------
今回2Dに限定しての相談ですが、実際にはdxfファイルは
3Dシュミレーションでも使用します。
なお、電子データ(dxf)は電子部品関係で使用します。

>閉じてなかったら始点と終点の間に辺を追加するのでしょうか?
そのとうりです。 以前それで問題になりました。
回路構成が出来ていない為信号が出ませんでした。

私の使用しているCADでは、ポリゴンを抽出するプライベートコマンドを使い
抽出し「面」属性にすることは簡単なのですが、「自己交差」は処理出来ません。

ベクターデータ・ラスターデータ・dxf・CAD などを調査し、レイヤに意味を持たせ
設計者と共有化を図っていこうと取り組んでいる現状です。

一番ネックなのは海外の設計者で、VectorWorksのバージョンが「9」だと言うことです

>ハンドルの知識は必須です。
そうですか挑戦してみます。
まずは、VectorScript Reference から・・・

半分以上愚痴ですがご容赦願います。
とりあえずお礼まで。


Re:多角形について    与太郎
Tue May 29 17:38:35 2007

とりあえず、メニューコマンドの実行はDoMenuTextByNameで出来ます。
詳しくは、VectorScript Referenceの「Additional Resources 付録」>>
「VectorScript Appendix」>>「Appendix H - DoMenuTextByName Selectors」を御覧下さい。
ただ、メニューコマンド内のダイアログ操作は自動化出来ません。

DXF変換の設定のほとんどは、VWが新しければSetObjectPref???で変更出来ます。
これもVectorScript Referenceに載っています。

>「閉じていない」図形は閉じる
閉じてなかったら始点と終点の間に辺を追加するのでしょうか?

「自己交差図形」は、
その図形で「抜き取り」をして、出来た図形が複数なら自己交差していると判ります。
グループ解除後なら「発見次第、メッセージと対象図形を選択されている状態に」するのは簡単です。

VW超初心者さんということで、どこからどこまで説明したらいいのか迷っています。
ハンドルの知識は必須です。


多角形について    がんだるふ
Mon May 28 14:16:17 2007

こんにちは昨年、VwctorWorks談話室に書き込んだ者です。
普段、VwctorWorksを使わない超初心者です。
中間ファイル(dxf)を介して別なCADで作図をしていますが、
やはり臭い物は元から・・・
そう言ったイメージを持ってしまいました。

EXCELのようにマクロの登録(操作をマクロ化)出来ればいいんですが
標準機能では無いので、スクリプトで行いたいと思いました。

そこで条件を2Dに限定しての相談です。
VW:WINDOWS XP です。
バージョン:9〜12
多角形のみを対象とし、「閉じていない」図形は閉じる
長方形・円は閉図形なので対象外としました。

一番問題なのが「自己交差図形」です。
2D図形では異常図形でしかありません。
発見次第、メッセージと対象図形を選択されている状態に出来ないものか
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ここは他の方法でも良いのですが

以下現行dxf変換処理手順

【変換前処理】
全選択
グループ化解除(CTRL+U)
 ** よく判りませんが設計者は10回位操作しています。 **
不要情報消去(全てチェックON)
多角形に変換

【変換処理】
-- クラス/レイヤ変換 --
ファイル形式:DXF(テキスト)
バージョン:2000/2000i/2002 又は 14/LT98/LT97
DXF/DWGの画層として:レイヤを取り出す
非表示のレイヤを:取り出さない

-- 2D・3D・線の太さ --
チェックボックス全てOFF

ダイアログボックスで保存ファイル名を指定して保存(変換)
--- ここまで ---

>Re:四角形の傾き   与太郎
>email:  Mon Dec 13 14:10:56 2004
>全部の辺の長さと角度をしらべて、幅、高さ、角度を返す関数です。

等も参考にしているのですが、今ひとつ理解できていません。
何かヒントがあればいいのですが


クラス属性のコピー    うし。
Fri May 18 12:22:39 2007

すごい!すごい!すごいです!!
ショート勝手でほんとに一発に・・・。
あぁ。感動です。

でもすみません。
VW11からは、普通にあるんですね。
私はVW10なもので・・・。(書き忘れました)

大変助かりました。
ありがとうございます。

何でも出来るんですね。
はまりそうです!!
・・・まだまだ私には難しいですけど。


Re:クラス属性のコピー    与太郎
Thu May 17 19:44:12 2007

VW11から、スポイトツールに「クラス属性を使用」が追加されています。

で終わるのも何ですんで、スクリプトも書いときます。

procedure SetAttrsByClass;
{ 選択図形をクラス属性に設定する。 }
const
SelectedObjects = 2;
TraverseShallow = 0;
EditableLayers = 4;

function SetAttrs(h:handle):boolean;
begin
SetFillColorByClass(h);
SetFPatByClass(h);
SetLSByClass(h);
SetLWByClass(h);
SetMarkerByClass(h);
SetPenColorByClass(h);
SetAttrs:= false;
end;{SetAttrs}

begin{main}
ForEachObjectInLayer(SetAttrs, SelectedObjects, TraverseShallow, EditableLayers);
end;
Run(SetAttrsByClass);

スクリプトはVectorScriptコマンドとしてコマンドパレットから実行出来ますが、頻繁に使うならメ
ニューから実行したいです。
メニューから実行するためには、スクリプトをメニューコマンド(プラグインメニュー)にします。

1. 「プラグインコマンド...」で「プラグインコマンド編集」ダイアログを開く。
2.  「新規...」でメニューを作成。
3.  「カテゴリ...」でカテゴリを設定。
4.  「プロパティ...」で「2D図形の選択」を「必要」に設定。残りの項目は「無視」にする。
5.  「コマンド編集...」で「VectorScriptエディタ」を開き、スクリプトを打ち込む(貼り付ける)。
6. 「OK」で「プラグインコマンド編集」ダイアログを閉じる。

これで新しいプラグインメニューが出来ます。
「作業画面」>>「設計...」でメニューに登録すれば、普通のメニューコマンドとして使えます。


RE:すみません!    管理人
Thu May 17 18:06:40 2007

いえいえ、うし。さん、お気になさらずに…(^-^)V
リロードが自動で働かないのは管理人の談話室の仕掛けのせいです。たぶん。
新しい書き込みを残して、重複は削除しました。


すみません!    うし。
Thu May 17 17:52:36 2007

すみません!!
Safariがおかしいらしく、何度も書き込んでしまいました。
もうしわけありません!!


クラス属性のコピー    うし。
Thu May 17 17:51:01 2007

はじめまして。
スクリプトを全く使ったことのない初心者です。
とても簡単なことなのかもしれませんが、教えてください。

面の色や線の種類など適当な、ある一つの四角を書いたとします。
それを、ワンクリックですべての属性を、クラスにならう様にはできますか?

スポイトのツール(アイドロッパ?)では、属性のコピーは出来るのですが、
「属性にならう」の矢印はついてこないので、クラスの指定色を変更しても、
スポイトで貼ってしまった図形だけは変わってくれないのが、悩みです。
属性パレットですべてを「クラス属性」に変更するのは以外に手間がかかるので・・・。

もしかして、こんなツールが普通に存在していたりしたらすみません。
初心者な質問ですみません。
よろしくお願いします。


日影のチェック    クマ
Sun May 6 7:53:50 2007

★「日影」と「天空率」を使うためのスクリプト下のURLに置いてます。
(「Shadow」「天空定規」がないと使えません)
 持ってるけど、うまく使えないという人には、良いかと・・・
(持ってるけど、機会ががないという人には、全く役立ちません m(_'_)m )
 http://sakuma.infonav.net/Site/Shadow.html
これ以外、なんにもないサイトですが、まあ、そのうち・・・


与太郎さん有難うございます。   ish
Tue May 1 23:49:37 2007

言語の違うスクリプトはやはり無理ですよね。
一から勉強して作ろうと考えていたので、大変ありがたいです。
これで作業効率上がりそうです。本当に有難うございました。


Re:formZのスクリプトを移植できますか?    与太郎
Mon Apr 30 23:37:24 2007

スクリプトってアプリに特化してるから、移植といっても結局は書き直しになります。
ですから、簡単なスクリプトならゼロから作ったほうが早いでしょう。
お書き込みの「個別に拡大縮小」や「個別に回転」なら、20行程度のスクリプトになります。

procedure RotAtObjectCenter;
const
__SelectedObjects = 2;
__TraverseShallow = 0;
__EditableLayers = 4;
var
__rot__:real;
__
__function DoObject(h:handle):boolean;
__var
____x, y__:real;
__begin
____HCenter(h, x, y);
____HRotate(h, x, y, rot);
__end;{DoObject}
__
begin{main}
__rot:= RealDialog('回転角 = ', '0');
__ForEachObjectInLayer(DoObject, SelectedObjects, TraverseShallow, EditableLayers);
end;{main}
Run(RotAtObjectCenter);


procedure ScaleAtObjectCenter;
var
__scl__:real;
__
__function DoObject(h:handle):boolean;
__var
____x, y__:real;
__begin
____HCenter(h, x, y);
____HScale2D(h, x, y, scl, scl, false);
__end;{DoObject}
__
begin{main}
__scl:= RealDialog('倍率 = ', '1');
__ForEachObjectInLayer(DoObject, 2{SelectedObjects}, 0{TraverseShallow}, 4{EditableLayers});
end;{main}
Run(ScaleAtObjectCenter);

元のformZのスクリプトと比べると長いかの短いのか判りませんが、こんな感じです。
3D図形を個別に伸縮するなら、もう少し手間がかかります。


formZのスクリプトを移植できますか?   ish
Sun Apr 29 16:11:56 2007

はじめまして。
題の通りformZのスクリプトをVectorworksに転用したいと思っているのですが、一から作り直した方が早いのでしょうか?ネットでフリー配布 されているもので、イラストレーターで使う”個別に変形”のようなスクリプト(性格には個別に拡大縮小、回転)を見つけたのですが、formZ用でした。 エラーの出る行をいちいち書き換えてはいるのですが、いかんせん素人仕事なので、どうしようもない状態になってしまいました。参考になる本やサイトでも結 構ですのでご紹介していただけますか?


re:Re:レイヤリンクのスクリプト    クマ
Sun Apr 29 6:46:05 2007

与太郎さん ありがとうございます!
レイヤリンクが選択図形になるとは考えもしませんでした・・・。
教えていただけることの有難みをしみじみ感じました。

今、日影のチェックを、「SHADOW」と「天空定規」の連動で効率良く行うスクリプトを作っています。
結構使えますので、近々公開します(長いです)。


Re:レイヤリンクのスクリプト    与太郎
Sun Apr 29 1:03:49 2007

LNewObjectでは何故かレイヤリンクのハンドルが取得できないので、別の方法でハンドルを取ります。

procedure test;
var
hLL:handle;
begin
DSelectAll;
LayerRef('レイヤ-2');
hLL:= FSActLayer;
SetObjectVariableBoolean(hLL, 161, true);
end;
Run(test);

上のように、選択図形がない状態でレイヤリンクを作れば、選択図形はレイヤリンクだけなので、
FSActLayerでハンドルが取得出来ます。
その他、あらかじめアクティブレイヤの最上面の図形のハンドルを取得しておいて、
レイヤリンク後にNextObjでハンドルを得る方法もあります。


レイヤリンクのスクリプト    クマ
Sat Apr 28 23:57:40 2007

どなたか教えて下さい。
アクティブなレイヤに特定のレイヤをリンク(二次元図形を表示)したいのですが、どうしたらよいのかわかりません。

ヘルプファイル:VectorScriptの
Additional VectorScript Resources
VectorScript Appendix の
Layer Link には
Object SettingSelectorSetting ValueFunction
Source Layer Name160STRING valueObjectVariableString
リンクレイヤ名
Project 2D Objects161TRUE or FALSEObjectVariableBoolean
2次元図形を表示
とあるのですが・・・


Re2:柱や梁の必要数を自動計算するには?   osafune
Sun Apr 1 17:36:12 2007

マックンさん ご解答ありがとうございます。

なるほど、シンボルをワークシートでカウントさせるわけですね。
教えていただいた『vectorworksの達人』という本も参考にさせていただきます。

早速試してみます、ありがとうございました。


Re:柱や梁の必要数を自動計算するには?    マックン
Sun Apr 1 16:54:08 2007

osafuneさん はじめまして。
ご質問の件は、ワークシートとシンボルを使うことをお薦めします。
当方は、建物の企画設計時の面積確認のために、面積算定用のカラーの面図形を作成し、ワークシートでその面図形の面積をカウントさせています。
色を変えることにより、専有面積や共用面積を別カウントさせています。
osafuneさんの場合は、柱や梁をシンボルで描画し、そのシンボル図形の数量をカウントさせれば良いと思います。
管理人さんの本ではありませんが「VectorWorksの達人」という本を参考にしてください。
以降は、VectorWorks談話室での相談が良いかもしれません。


Re3:非アクティブレイヤ上の図形のハンドル    マックン
Sun Apr 1 16:39:07 2007

与太郎さん いつもながらありがとうございます。

今、Re2に気がつきました。
自分なりに研究してみようと思います。
感謝です。


柱や梁の必要数を自動計算するには?   osafune
Sun Apr 1 15:11:31 2007

初めて書き込みします。

ある建物の図面を書くときに、柱や梁を図面に表記することでそれらの必要数、例えば
〈現在(柱=12、梁=20)使用中〉というように自動的に算出し、表示させることは、
scriptを利用すれば可能でしょうか?当方の仕事はvectorworksで図面を書いてからその
図面を見て必要な柱や梁の数を手作業で拾い出しているのですが、どうしても人間の作
業ですから見落とすことがあり必要数の部材を正確に拾い出せないことがあるのです。

まだscriptを利用したことが一度もないので、どなたかよい方法を教えていただけると
幸いです。







Re2:非アクティブレイヤ上の図形のハンドル    与太郎
Thu Mar 29 19:58:57 2007

あの後、ForEachObjectInLayerで色々やってみたら、編集可能なレイヤの選択図形のハンドルを
取得出来ました。グループやシンボルに入った状態で選択した図形もちゃんと処理出来ます。
今までの苦労は何だったのだろう...

procedure test_GetSObj;
const
__SelectedObjects = 2;
__TraverseShallow = 0;
__EditableLayers = 4;
var
__hSObj__:handle;
__
__function DoObject(h:handle):boolean;
__begin
____hSObj:= h;
____DoObject:= true;
__end;{DoObject}
__
begin{main}
__hSObj:= nil;
__ForEachObjectInLayer(DoObject, SelectedObjects, TraverseShallow, EditableLayers);
__if hSObj = nil then
____Message('object = none')
__else
____Message('object type = ', GetType(hSObj));
end;
Run(test_GetSObj);


Re:コンテクストメニューの実行    与太郎
Sat Mar 24 9:35:14 2007

>DoMenuTextByNameのようにコンテクストメニューを実行させることは可能なのでしょうか。
コンテクストメニューの項目も他のメニューコマンドと同様にDoMenuTextByNameで実行可能です。
スクリプトをコンテクストメニューで実行したいのなら、スクリプトをメニュー・プラグインに
して作業画面のコンテキストメニューに登録すればいいです。


コンテクストメニューの実行    マックン
Fri Mar 23 7:06:14 2007

与太郎さん いつもありがとうございます。
『非アクティブレイヤ上の図形のハンドル』の質問にからめてですが、
ちょっと思いついたのですが、
DoMenuTextByNameのようにコンテクストメニューを実行させることは可能なのでしょうか。
よろしくお願いいたします。


Re:非アクティブレイヤ上の図形のハンドル    与太郎
Thu Mar 22 14:37:02 2007

レイヤジャンプ・ツールではいけないのかと思ったら、クラスも変更するんですね。
「図形を選択してコマンドを実行」を、「コマンド内で図形を指定」に変えていいなら、
GetPt と PickObject でアクティブレイヤ以外の図形のハンドル(h)も簡単に取得出来ます。

procedure test;
var
__x, y__:real;
__h__:handle;
begin
__Message('図形をクリックしてください。');
__GetPt(x, y);
__ClrMessage;
__h:= PickObject(x,y);
__SetSelect(h);
__ReDrawAll;
end;
Run(test);


非アクティブレイヤ上の図形のハンドル    マックン
Wed Mar 21 21:45:25 2007

お世話になります。
非アクティブレイヤ上の選択された図形のハンドルを取得するにはどうしたら良いでしょうか。
最終的には、その選択された図形のレイヤとクラスをアクティブにしたいのです。
よろしくお願いいたします。


Re:指定外の厚さの壁を選択解除する    クマ
Mon Mar 5 9:15:44 2007

与太郎さん、
自分にあわせ勝手に使い方を変えました。

procedure SelectByWallWidth;
{ 指定した厚さの壁を選択する }
Const
WallObj = 68;
var
h:handle;
wd:real;

procedure DoObject(h:handle);
begin
if (GetType(h) <> WallObj) | (WallWidth(h) <> wd) then
SetDSelect(h);
end;{DoObject}

begin
SelectObj((ALL));
wd:= RealDialog('選択したい壁の厚さ =', Concat(GetWallWidth));
ForEachObject(DoObject, (SEL=TRUE));
end;
Run(SelectByWallWidth);


RE:指定外の厚さの壁を選択解除する    管理人
Fri Mar 2 21:54:37 2007

与太郎さん、ありがとうございます。
しか〜しながら、管理人はアワワワ!でございます…(^_^;)
猫に小判状態ですので、
さあ、皆様、ご質問ご要望は与太郎さん宛に…m(^_^;)m


指定外の厚さの壁を選択解除する    与太郎
Fri Mar 2 9:45:47 2007

VW12の壁スタイルは後から適用することも出来ますが、元の壁の厚さは考慮してくれないので、
スタイル適用後に壁の厚さが変わることもあると思います。
壁の厚さを変えたくないときには、下のスクリプトで指定以外の厚さの壁を選択解除出来ます。

procedure DSelectByWallWidth;
{ 指定した厚さ以外の壁を選択解除する }
Const
__WallObj = 68;
__LF = Chr(13);
var
__h__:handle;
__wd__:real;
__
__procedure DoObject(h:handle);
__begin
____if (GetType(h) <> WallObj) | (WallWidth(h) <> wd) then
______SetDSelect(h);
__end;{DoObject}
__
begin
__wd:= RealDialog(Concat('選択したい壁の厚さ =', LF, '(指定以外の壁を選択解除します。)'), Concat(GetWallWidth));
__ForEachObject(DoObject, (SEL=TRUE));
end;
Run(DSelectByWallWidth);


壁ツール    与太郎
Fri Mar 2 9:31:33 2007

壁スタイルを使わないなら、下のスクリプトはいかがでしょうか。

procedure WallTool;
{ 壁の厚さのデフォルト値を設定し、壁ツールで壁を描いた後、壁の高さを設定する。 }
var
__result__:boolean;
__h__:handle;
__wd, wd0__:real;
__ht, dH, htEd__:real;
begin
__PushAttrs;
__wd0:= GetWallWidth;
__wd:= RealDialog('壁の幅 =', Concat(wd0));{ 壁の厚さを入力 }
__if not DidCancel then begin
____SetWallWidth(wd);{ 壁の厚さのデフォルト値を変更 }
__end;{if}
__DSelectAll;
__CallTool(-208);{ 壁を描く }
__h:= FSActLayer;
__if h <> nil then begin
____GetZVals(ht, dH);{ アクティブレイヤの高さを調べる }
____ht:= RealDialog('壁の高さ =', Concat(dH));{ 壁の高さを入力 }
____if DidCancel then ht:= dH;
____while h <> nil do begin
______HWallHeight(h, ht, ht);{ 壁の始点と終点の高さを変更 }
______h:= NextSObj(h);
____end;{while}
__end;{if}
__PopAttrs;
end;
Run(WallTool);

実行すると、
1. 壁の厚さのデフォルト値をダイアログで変更して、
2. 壁ツ−ルで壁を描いた後、
3. 描いた壁の高さをダイアログで設定出来ます。

レイヤ設定なしでいきなり壁を書きたいときに使ってみて下さい。


RE^6:VW12のツールマクロで壁厚を設定する    管理人
Tue Feb 27 14:44:15 2007

与太郎さん、ありがとうございます。
そろそろ管理人の能力を超えてきましたので(分岐とか繰り返しとかがあると、あっさり混乱)。
ダイアログボックスは使ったことがないので、これで勉強させて頂きます。
じつは、
新しい壁の要素設定方法には慣れることが出来なくて、無意識のツールからはほど遠い状況です。
なんとか自分を納得させようと苦心していますが、頭が切り替わらないのです。やれやれ…。


RE^5:VW12のツールマクロで壁厚を設定する    与太郎
Mon Feb 26 8:47:11 2007

壁の高さごとにツールを作るのが面倒なら、壁の高さを入力して設定することも出来ます。
データパレットでも変えられますが、ダイアログを出すことによって壁の高さに注意を促す
効果があります。

procedure CustTool;
var
result:boolean;
ht, htSt, htEd:real;
h:handle;
begin
PushAttrs;
result:= SetWallPrefStyle('単層打放し');
CallTool(-208);
h:= LSActLayer;
if h <> nil then begin
WallHeight(h, htSt, htEd);
ht:= RealDialog('壁の高さ =', Concat(htSt));
if DidCancel then ht:= htSt;
while h <> nil do begin
HWallHeight(h, ht, ht);{ 壁の始点と終点の高さを変更する }
h:= PrevSObj(h);
end;{while}
end;{if}
PopAttrs;
end;
Run(CustTool);


RE^4:VW12のツールマクロで壁厚を設定する    与太郎
Mon Feb 26 0:19:09 2007

VW12のデモ版しかないので、12.5での変更点は確認出来ないんです...

というわけで、管理人さんの書き込みが頼りです。
管理人さんのScriptには壁の厚さを設定する行がありません。
ですから壁の厚さがデフォルト設定のままなのは当然です。

SetZVals(0", 0);はレイヤの高さと厚みを設定するコマンドですが、
マクロを実行する度にレイヤの設定が変わってしまうのはどうなんでしょう。
この行は消したほうがいいような気がします。
下のように、壁を描いたあとで高さを変えることも出来ます。

procedure CustTool;
var
h:handle;
begin
PenSize(2);
PenPat(2);
SetWallWidth(100);
CallTool(-208);{ 壁ツールで壁を描く }
h:= LSActLayer;
while h <> nil do begin
HWallHeight(h, 2400, 2400);{ 壁の始点と終点の高さを変更する }
h:= PrevSObj(h);
end;{while}
end;
Run(CustTool);

壁スタイルを使うと、生成時の壁の高さをレイヤとは別に設定出来るようです。
2次元の表現(中心線その他の壁の構成要素)も再現出来ます。
スクリプトも簡単になります。

Procedure CustTool;
VAR
Result:boolean;
BEGIN
PushAttrs;
Result:= SetWallPrefStyle('単層打放し');
CallTool(-208);
PopAttrs;
END;
Run(CustTool);


RE^3:VW12のツールマクロで壁厚を設定する    管理人
Sun Feb 25 21:28:23 2007

あああ!
DoubLines(100);
ではなく!
SetWallWidth(100);
ですね!


RE^2:VW12のツールマクロで壁厚を設定する    管理人
Sun Feb 25 21:15:49 2007

でもでも、
DoubLines(100);
を追加すると、壁厚が自由に設定できますね、いいぞいいぞ。
ちょっと手間ですが、これでスタンダード版でも複数の壁が…。
あああっと、2次元の表現(中心線その他の壁の構成要素)が再現できないのかぁ…。
いや、モデリングには十分だから、まずは良し!
ん? 壁の高さは設定できるのかしら? 高度ではなく高さ(身長)ですが…。


RE:VW12のツールマクロで壁厚を設定する    管理人
Sun Feb 25 21:05:31 2007

与太郎さん、さっそく、ありがとうございました。
改めて試してみると、ちょっとScriptの一部が異なっています。
Macintoshのバージョン12.5DXなのですが、
ClearCavities;
DoubLines(100);
が生成されません。
実行はできるのですが、作図すると、その時点で設定してある壁厚になってしまいます。
DXであることが差異を生じさせているのかな?
DXでなければ異なるのでしょうかしら?
下記が生成されたScriptです。
----
Procedure CustTool;
VAR
Name:STRING;
Result:BOOLEAN;
BEGIN
PushAttrs;
PenSize(2);
PenPat(2);
SetZVals(0", 0);
CallTool(-208);
PopAttrs;
END;
Run(CustTool);
-----


Re:リソースブラウザ    マックン
Sun Feb 25 11:55:04 2007

与太郎さん ありがとうございました。
スクリプトを作っていただき恐縮です。
早速ためしてみしたが、実行後ファイルを再度立ち上げるとすべて削除できています。
このスクリプトを理解できるように勉強しようと思います。
お礼が遅くなり申し訳ありませんでした。


VW12のツールマクロで壁厚を設定する    与太郎
Sun Feb 25 6:53:31 2007

>管理人さん
VectorWorks談話室からの御依頼、承りました。

ツールマクロで壁ツールを作ると下のようなスクリプトが自動生成されます。

Procedure CustTool;
VAR
Name:STRING;
Result:BOOLEAN;
BEGIN
PushAttrs;
ClearCavities;
DoubLines(100);
PenSize(1);
PenPat(2);
SetZVals(0", 0);
CallTool(-208);
PopAttrs;
END;
Run(CustTool);

この中の DoubLines(100); を SetWallWidth(100); に変えれば壁の厚さの設定も再現されます。
SetWallWidth はMiniCad6以降で使えるサブルーチンです。
本来はその時点で SetWallWidth を生成するように直しておくべきだったのですね。
VW11.5まではダブルラインと壁の厚さの設定が同じだったので問題にはなりませんでしたが、
VW12で設定が別になったことにより問題が顕在化したということです。
これはバグですから修正してもらわないといけませんね。


Re:リソースブラウザ    与太郎
Mon Feb 19 12:58:36 2007

お久しぶりです。

>リソースブラウザ内のコマンドパレットを選択・削除させることは可能でしょうか。

リソースのリストを辿ろうとしても出来なかったので、名前のリストからアクセスしてみました。
コマンドパレットには必ず名前が付いているので、この方法で間違いないはずです。

procedure Del_All_CommandPallets;
{$DEBUG}
const
__CommandPallet = 51;
var
__h __:handle;
__nm__:string;
__tp__:integer;
__n, i__:longint;
begin
__n:= NameNum;
__for i:= 1 to n do begin
____nm:= NameList(i);
____h:= GetObject(nm);
____if h <> nil then begin
______tp:= GetType(h);
______if tp = CommandPallet then begin
________AlrtDialog(Concat(nm, 'を削除します。'));
________DelObject(h);
______end;
____end;
__end;
end;
Run(Del_All_CommandPallets);

実行してみると、終了後もリソースプラウザの表示が更新されなかったり、消したはずのコマンド
パレットが表示されたままだったりしますが、一応上のスクリプトでコマンドパレットを消せます。


大変失礼しました    マックン
Sun Feb 18 16:31:29 2007

safariでは、自分の投稿が表示されなかったので同じ投稿を2回してしまいました。
失礼しました


リソースブラウザ    マックン
Sun Feb 18 11:06:50 2007

大変ご無沙汰しています。
早速ですが、ファイルのデータをすべて削除するスクリプトを作成しています。
リソースブラウザ内のコマンドパレットを選択・削除させることは可能でしょうか。
よろしくお願いいたします。


テスト2    管理人
Tue Jan 9 11:45:00 2007

書き込みテストです。
昨年の書き込みはバックアップに移動しました。
バックナンバーはおかげさまで、宝の山のようなScript集になりました。
Scriptを学ぼうという方はぜひ、ご一読下さい。


テスト    管理人
Tue Jan 9 11:42:48 2007

書き込みテストです。
あ、新年おめでとうございます。
本年もよろしくお願いいたします。