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

テスト   manabu
Wed Aug 14 19:53:33 2013

管理人さん、代筆ありがとうございます。
これは書き込みテストです。


テスト    管理人
Wed Aug 14 15:15:57 2013

うまく書き込めたら、これは削除します。


スクリプトの公開    manabu(管理人代筆)
Wed Aug 14 15:07:49 2013

スクリプトの書き直しが終了し、http://qoo.blog.eonet.jp/popc/vw_tool.htmlで公開しました。
参考にどうぞ。


Re:リストブラウザについて   manabu
Mon Jul 29 20:26:53 2013

あちら(アメリカ)のオンラインヘルプにサンプルがあったので、できそうな気がしてきました。


あらしのため    管理人
Sat Jul 27 14:48:48 2013

移動しました。
こちらでどうぞ。


Re:全図形表示のスクリプト3       しんいち
Sun May 19 10:33:49 2013

スクリプト学習中ですが さんへ
こんにちは。情報有難う御座います。
スクリプト超が付くほどの初心者の私には難しいので、パワ−ユ−ザ−さんの
協力を待ちたいと思います。


業務連絡    管理人
Wed May 15 23:11:49 2013

談話室荒らしのため移動しました。


Re:全図形表示のスクリプト    スクリプト学習中ですが
Tue May 14 21:32:10 2013

談話室で学ばせてもらっている者です。
Show は、マニュアルには、
「隠されているまたは、グレイ表示されている図形で検索条件に合致したものを表示します。」
と書いてあったので、全図形表示にはならないんじゃないかと思います。

クラスの表示状態を変えるコマンドを探してみたら、SetClassOptionsというのがありました。
これを使うんだと思いますが、よく分かりません。
しんいちさん、スクリプトができたら教えてください。


全図形表示のスクリプト    しんいち
Mon May 13 19:06:17 2013

選択したオブジェクト以外のクラスを非表示にするスクリプトを実行後

全図形表示
Show((ALL));

を実行すると表示はされるのですが、選択が出来ないので
オ−ガナイザ、ナビゲ−ションパレットを見ると非表示のままでした。

これを表示にするスクリプトがあれば作業効率が上がるので教えて下さい。
(なぜか私ばかりの質問で申し訳有りません)    


面積記入について 2.       しんいち
Thu Apr 25 16:36:30 2013

自己レスです

2.Vectorworksでは、窓選択で囲んだ部分の複写とか切り抜きができる操作方法のコマンドがありませんがScript等があったら教えて下さ い.

コマンド カットandペ−スト、コピ−andペ−ストで出来ましたけど
長い長さの場合両端部が含まれていないと選択されません、どのように
しているのか教えて下さい。SHIFT+で追加ですか?


バックナンバ−を読み返してみました    しんいち
Thu Apr 25 15:27:53 2013

今回の件でバックナンバ−を全て読み返してみました。
何かの役にたつかとVectorworks附属のVecterScriptも読んでみました。

?・?・?の事ばかり。
もう少し初心者向け解説書等が必要では無いでしょうか?
お勧めの本がありましたら教えて頂けませんか?


RE.7:選択したオブジェクト以外のクラスを非表示にする       しんいち
Thu Apr 25 10:59:21 2013

与太郎さんへ
丁寧な説明有難う御座います。
全角アンダーバーの件は
 了解いたしましたので、スペ−スに変えて再保存致しました。

エラ−メッセ−ジの件
 ファイル検索で検索致しました。

今回のエラ−内容です
Line #29: f 0 = nH then

|
{ Error: Identifier not declared. }


Line #34: end;{if}

|
{ Error: Expected a Procedure. }
 
かさねがさね申し訳ありませんが宜しくお願い致します。


RE.6:選択したオブジェクト以外のクラスを非表示にする    与太郎
Wed Apr 24 19:42:27 2013

説明が足りなかったようですみません。
全角アンダーバーは、この掲示板でタブが使えないのでタブの代わりに使っています。
ですから保存するときに"__"をタブかスペースに置き換えてください。
削除だと名前と名前の区切りが消えてエラーになることがあります。

エラーメッセージの件ですが、"ErrorOut.txt"というテキストファイルになっています。
"Documents and Settings"フォルダ内のユーザーフォルダの奥深い場所にあるので
ファイル検索で探してみてください。


RE.5:選択したオブジェクト以外のクラスを非表示にする         しんいち
Wed Apr 24 15:57:50 2013

与太郎さんへ
アンダ−バ−部分をキ−ボ−ドより直接打ち込みました。
エラ−メッセ−ジ内容を書き込みます。

Line #10:__function DoObject(h:handle):boolean;
|
{ Error: Expected :}
Line #11:__begin
|
{ Error: Expected BEGIN }
アンダ−バ−の数は読み取れていないので推定です。
(エラ−確認の内容がコピペできないので)
かさねがさね宜しくお願い致します。



RE.4:選択したオブジェクト以外のクラスを非表示にする       しんいち
Wed Apr 24 15:19:00 2013

与太郎さんへ

早速の対応有難う御座います。
提示したいただいたスクリプトをメモ帳にコピペして保存の上、VectorScriptエディッタの画面で開き保存。この際アンダ−バ−が全角に変わるこ とは無いと思いますが、アンダ−バ−のみ修正してトライしてみます。

エラーメッセージ内のスクリプトが元のと微妙に違うのは
私のタイプミスです
(エラ−確認の内容がコピペできないので)


1.面積記入について    しんいち
Wed Apr 24 15:02:23 2013

自己レスです
Wed Jul 26 2006年の面積記入のScriptを
メモ帳にコピペして保存の上、VectorScriptエディッタの画面で開き保存
で使えるようになりました。


RE.3:選択したオブジェクト以外のクラスを非表示にする    与太郎
Wed Apr 24 13:35:42 2013

>Line #3:_SelectedObjects=2;
>|
>{Error:CONST,TYPE or VAR must be followed by a new identifier name.}
SelectedObjectsの前のアンダーバーが気になります。
タブ代わりに使っている全角アンダーバーが残っていませんか?

>Line #4:_traverse Shallow =0;
>|
>{Error:Expected BEGIN}
traverseとShallowの間にスペースが入っていると定数名として認識されません。

エラーメッセージ内のスクリプトが元のと微妙に違うのは、コピペするときに変わるんでしょうか?


RE:選択したオブジェクト以外のクラスを非表示にする       しんいち
Wed Apr 24 12:34:34 2013

与太郎さんへ
スクリプト試しましたのでお知らせ致します。
やはりエラ−がでましたので、内容を書き込みます。

Line #3:_SelectedObjects=2;
|
{Error:CONST,TYPE or VAR must be followed by a new identifier name.}

Line #4:_traverse Shallow =0;
|
{Error:Expected BEGIN}
uv (この部分は選択クラスで変化する)
それにしてもエラ−確認の内容もコピペ出来ないのは私の環境のせいなのかな?
今回の試している図面はグル−プもシンボルもないのですが・・・・。
宜しくお願い致します。


Re: 選択したオブジェクト以外のクラスを非表示にする    与太郎
Wed Apr 24 10:17:46 2013

私の環境ではエラーを確認出来ませんが、
古いスクリプトだとグループやシンボルの中で選択図形が拾えないので、
下のスクリプトを試して頂けますか。

{ 選択したオブジェクト以外の「クラス」を非表示にする }
procedure HideOtherClassObjs;
const
__SelectedObjects = 2;
__TraverseShallow = 0;
__EditableLayers = 4;
var
__i, n, nH :integer;
__shwCls :string;
__
__function DoObject(h:handle):boolean;
__begin
____n:= n + 1;
____shwCls:= GetClass(h);
____DoObject:= false;{ trueならForEachObjectループ終了 }
__end;{DoObject}
__
begin{main}
__n:= 0;
__ForEachObjectInLayer(DoObject, SelectedObjects, TraverseShallow, EditableLayers);
__if n = 0 then
____AlrtDialog('選択図形がありません!')
__else begin
____nH:= 0;
____for i:= 1 to ClassNum do begin
______if shwCls <> ClassList(i) then begin
________HideClass(ClassList(i));
________nH:= nH + 1;
______end;{if}
____end;{for}
____if 0 = nH then
______AlrtDialog('非表示にするクラスはありませんでした。')
____else begin
______AlrtDialog(Concat('「', shwCls, '」クラス以外を非表示にしました。'));
____end;
__end;{if}
end;{main}
Run(HideOtherClassObjs);


選択したオブジェクト以外のクラスを非表示にする    しんいち
Tue Apr 23 17:37:08 2013

連続投稿ですみません
与太郎さん作
Mon Feb 23 2004
の表題のScriptをメモ帳にコピペして保存の上、VectorScriptエディッタの画面に上記Scriptをコピペ。
Scriptを実行すると3行目、6行目にエラ−がでるようです。
使いたいのでどのように直せば良いか教えて下さい。


面積記入について教えて下さい       しんいち
Mon Apr 22 11:43:05 2013

ずっとAutocadばかりで
7年ぶりにVectorworksを触っています。
OS Windows XP SP2
Vectorworks2008J

Vectorworks談話室からこちらに来ました。
1.Script談話室
Wed Jul 26 2006年の面積記入のScriptの登録方法を全く忘れてしまいました。
どなたかご指導のほど宜しくお願致します

あいまいな記憶のなかで試した
リソ−スブラウザ-新規・名称未設定-VectorScript-名前をつける-VectorScriptエディッタの画面に上記Scriptをコピペし ようとしたのですが出来ませんでした。

2.Vectorworksでは、窓選択で囲んだ部分の複写とか切り抜きができる操作方法のコマンドがありませんがScript等があったら教えて下さ い。


Re.2:ベクタースクリプトで自動化    超初心者
Tue Apr 9 22:46:58 2013

与太郎様
ご報告が遅くなり、申し訳ありません。超初心者です。
教えていただいたやり方で試してみました。上手く動きました!
クラスとレイヤをメニューからではなく、小窓から設定する作業方法なので、その部分と不要情報消去を修正してみました。
各々の値が入れられないのが残念ですが、ショートカットキーを何度も押さないでメニューが出るだけでも作業効率がずいぶん違います。
コマンド実行でテキストファイルを読み込むことが出来るというのがわかったのも良かったです。
初心者でもわかりやすく丁寧に教えていただいて本当に有難うございました。

Procedure test;
Begin
NameClass('M');
Layer('S');
DoMenuTextByName('Class Options'2);
DoMenuTextByName('Puge'0);
DoMenuTextByName('Export DXF/DWG'0);
DoMenuTextByName('Save As'0);
End;
Run(test);


Re.1:ベクタースクリプトで自動化    与太郎
Tue Apr 9 10:54:42 2013

ようこそScript談話室へ。

VectorScriptの実行方法ですが、
「コマンドを実行...」と「取り込む」→「VectorScript...」はテキストファイルとして保存されたVectorScriptを実行するの で、
VectorScriptファイルはテキストファイルになっている必要があります。
古いバージョンだと文字コードがShift-JISでないと日本語等が文字化けするかも知れません。

それから、この掲示板のレス番は投稿者が自分で付けるのが慣習なので以後宜しくお願いします。


ベクタースクリプトで自動化    超初心者
Mon Apr 8 23:03:26 2013

すみません。VectorWorks談話室から移動してきました。
どちらかがお目に留まるように同じ内容を書き込みます。

与太郎様
お教えいただきありがとうございます。本当に助かります。
今日会社でVectorScriptランゲージというのを読んで自習してきました。
明日教えていただいたこと早速試してみます。

一つ根本的な部分で困っているのですが、他からまわってくる既存の.mcdの保存をしますので、共有というのをしても次の.mcdで作成した VectorScriptを使おうとすると、パレットの登録という作業が入ってしまい、手間もありますが、既存ファイルの内容を変更してしまうので良くな いというのがわかりました。
階層からプラグインコマンドを使う方法は、コマンドの実行が上手くいかず使うことができませんでした。

もしよろしければ、こちらの部分もお教えいただけないでしょうか。
ずうずうしいですが、よろしくお願い致します。


お手数をお掛けします。    管理人
Thu Mar 28 23:40:28 2013

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


こちらに引っ越しました    管理人
Thu Mar 28 22:56:01 2013

以前の頁はかきこみできません。
こちらへどうぞ。


ファイル内の特定の線の太さをすべて変更する    与太郎
Thu Jan 31 13:09:36 2013

VectorWorks談話室からのお題です。

下のスクリプトでグループ内の図形の線の太さも変えられます。
線の太さを設定するインターフェースは作ってないので、
別の太さで実行するには、最初のOldWidthNewWidthの数字を書き換えてください。
単位はミル(= 1/1000inch = 0.0254mm)です。
スクリプトはリソースブラウザから新規リソースでVectorScriptコマンドを作るか、
選択マクロなどで「コマンドを作成」オプションでコマンドを作ってから、
コマンドパレットのコマンドをoption(Alt)+ダブルクリックで開いて書き換えてください。

Procedure Set_LineWidth;
{
ファイル内の特定の線の太さをすべて変更する }
const
OldWidth = 5;{5mil=0.13mm}
NewWidth = 8;{8mil=0.2mm}

var
n:longint;

Procedure DoObject(h:handle);
const
GroupObj = 11;
SymbolObj = 15;
VAR
ObjH, SDefH:HANDLE;
name:STRING;
BEGIN{DoObject}
case GetType(h) of
GroupObj, SymbolObj: begin end;
otherwise begin
if GetLW(h) = OldWidth then begin
SetLW(h, NewWidth);
n:= n + 1;
end;{if}
end;
end;{case}
END;{DoObject}

BEGIN{main}
n:= 0;
ForEachObject(DoObject, (ALL & INSYMBOL));
ReDrawAll;
SysBeep;
AlrtDialog(Concat(n, '
個の図形の線の太さを', OldWidth, 'ミルから', NewWidth, 'mmに変更しました'));
END;{main}
Run(Set_LineWidth);

クラス属性で線の属性を設定すると、線の属性の変更はクラス属性の変更で済むので、
MiniCAD
からVectorWorcsになってからはあまり使わないタイプのスクリプトです。


文字列のコピー    きむら
Fri Jan 25 14:02:15 2013

こんにちは、

>
また文字列をダブルクリックして編集状態にしてコピーしたものは、
>Word
にもテキストエディタにもペーストできませんでした。

これは、Vw2013だと出来ますよ。
もう少し前のバージョンでも出来るんじゃないでしょうか?


Re.4: 文字列のコピー   HiroMi
Fri Jan 25 8:19:10 2013

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

私も 再度バックナンバーを見て 書かれていらっしゃる
2004
<図面上の文字をワークシートにコピーする>を見つけました。
それらを見、下記の様なもの迄 何とか行き着きました、

PROCEDURE CopyText; {2013/01/24}
VAR
h , Objhd:Handle;
pX,pY:Real;
Txt ,NewTxt :String;
{=$DEBUG}
BEGIN
GetPt(pX, pY);
Objhd := PickObject(pX, pY);
IF GetType(Objhd)=10 THEN
Txt:=GetText(Objhd);
NewTxt:=Copy(Txt,1,Len(Txt));
GetPt(pX, pY);
TextOrigin(pX, pY);
BeginText;
Txt
EndText;
END;
RUN(CopyText);

しかしクリップボードに文字列をコピーするのは上手くいかず
無理かもしれませんとの事。残念です。
入力作業として<TextTool>で文字を反転させ、コピーし
ペーストしたい位置を<TextTool>でクリックしペースト。
と云う事が出来るので VectorScriptでも出来ると思ったのですが
残念です。
私もMacのみで17年でして、Windows版だと出来ると云う事は在るんですか!

与太郎さん有り難うございまいました。


Re.3: 文字列のコピー    与太郎
Thu Jan 24 16:51:44 2013

「文字列をコピーする=システムのクリップボードに文字列をコピーする」ということなら、
素直に考えると下のようなスクリプトになるような気がします。

PROCEDURE CopyText;
VAR
Objhd:Handle;
pX, pY:Real;
BEGIN
GetPt(pX, pY);
Objhd := PickObject(pX, pY);
IF (Objhd <> NIL) & (GetType(Objhd)=10) THEN BEGIN
DSelectAll;
SetSelect(Objhd);
DoMenuTextByName('Copy', 0);
END;{IF}
END;
RUN(CopyText);

クリップボードにコピーする方法は「DoMenuTextByName('Copy', 0);」以外にありません。
しかしこの方法は、文字図形と文字列の違いのためうまくいきません。
クリップボードに文字図形ではなく文字図形の中の文字列をコピーするのは無理のようです。
Mac
版では出来ませんでした。Win版ではどうなのでしょうか?

VectorScript
では文字図形を編集状態にしたり編集中の文字を扱ったりは出来ません。
文字編集状態でスクリプトを実行しようとしても、その瞬間に編集モードから出てしまいます。
ですから、クリップボードに文字列をコピーするのはVectorScriptでは無理でしょう。
AppleScript
ならクリップボードに文字列を書き込むことは可能なのですが、
文字図形の中の文字列はVectorScriptでないと得られないし、
VectorScript
からAppleScriptに文字列を渡す方法もないので、
AppleScript
との連携でも無理ということになります。

しかし、クリックで指定した文字のコピーを次にクリックした位置に作るということなら、
下のスクリプトで出来ます。
新しい文字はデフォルトの文字属性で描かれます。

PROCEDURE CopyText;
VAR
Objhd:Handle;
pX, pY:Real;
Txt:String;
BEGIN
GetPt(pX, pY);
Objhd := PickObject(pX, pY);
IF (Objhd <> NIL) & (GetType(Objhd)=10) THEN BEGIN
Txt:=GetText(Objhd);
GetPt(pX, pY);
TextOrigin(pX, pY);
CreateText(Txt);
END;{IF}
END;
RUN(CopyText);

あるいは、Script談話室のバックナンバーにあるスクリプトはいかがでしょうか。
「図面上の文字をワークシートにコピーする」(Fri Dec 3 22:31:51 2004
「ワークシートの文字を描くスクリプト」(Wed Sep 8 12:57:50 2004
ワークシートをクリップボード代わりにして文字列をコピーするスクリプトです。


2: 文字列のコピー   HiroMi
Thu Jan 24 9:02:55 2013

同じ相談文を送信してしまい失礼しました。

相談送信後、また色々やってみてのものを送信します。

PROCEDURE CopyText; {2013/01/24}
VAR
h , Objhd:Handle;
pX,pY:Real;
TxtNum : Integer;
Txt ,NewTxt :String;

BEGIN
GetPt(pX, pY);
Objhd := PickObject(pX, pY);
IF GetType(Objhd)=10 THEN
Txt:=GetText(Objhd);
NewTxt:=Copy(Txt,1,Len(Txt));
SetTool(-200);
END;
RUN(CopyText);

TextTool
にセットされていますので、
<クリック+ペースト>するのですが表示されません。
どこの進め方に不具合が在るのか お教え下さい。
宜しくお願い致します。


文字列のコピー   HiroMi
Wed Jan 23 16:34:56 2013

昨年よりVectorScriptでの文字列の操作について 勉強をしています。
何か参考になるものがないかと Web上を色々見ていましたところ
T.Yabe
さんとおっしゃる方が<DeleteTool for VectorWorks>という
クリック下の図形をdeleteするというものを 載せられていて
これをヒントに クリック下の文字列をコピーしてTextToolにする
というScriptが出来ないかと考えたのです。
W
クリックか、TextToolで文字列を反転させ、
メニュー>編集>コピーで済む事なのですが 作りたいと思いました。

クリック下の図形が 文字列かを判断し、<Len><Copy>を使うのでしょうか
最後に<SetTool:=-200>という形にならないかと思ったのです
しかし 上手くいきません。どなたかお教え下さい。
宜しくお願い致します。


文字列のコピー   HiroMi
Wed Jan 23 16:14:09 2013

昨年より文字列についての VectorScriptを勉強しているのですが、
Web
上で参考になるものはないかと いろいろ見ていましたところ、
T.Yabe
さんが<DeleteTool for VectorWorks>という 
クリック下の図形をDeleteする というものを載せられていました。
これに習い クリックした文字列を<TextTool>で使えるように「コピーする」
というものが出来ないかと思ったのです。
文字列をWクリックして、コピーすれば済む事ですが、Scriptでのコピーは
どのようになるのかを知りたいと思いました。

クリック下のものが 文字列かを見極め、<Len><Copy>を使うのでしょうか
最後に<SetTool:=-200>と考えたのですが
うまくいきません。
どなたか お教え下さい。宜しくお願い致します。