管理人さん、代筆ありがとうございます。
これは書き込みテストです。
うまく書き込めたら、これは削除します。
スクリプトの書き直しが終了し、http://qoo.blog.eonet.jp/popc/vw_tool.htmlで公開しました。
参考にどうぞ。
あちら(アメリカ)のオンラインヘルプにサンプルがあったので、できそうな気がしてきました。
移動しました。
こちらでどうぞ。
スクリプト学習中ですが さんへ
こんにちは。情報有難う御座います。
スクリプト超が付くほどの初心者の私には難しいので、パワ−ユ−ザ−さんの
協力を待ちたいと思います。
談話室荒らしのため移動しました。
談話室で学ばせてもらっている者です。
Show は、マニュアルには、
「隠されているまたは、グレイ表示されている図形で検索条件に合致したものを表示します。」
と書いてあったので、全図形表示にはならないんじゃないかと思います。
クラスの表示状態を変えるコマンドを探してみたら、SetClassOptionsというのがありました。
これを使うんだと思いますが、よく分かりません。
しんいちさん、スクリプトができたら教えてください。
選択したオブジェクト以外のクラスを非表示にするスクリプトを実行後
全図形表示
Show((ALL));
を実行すると表示はされるのですが、選択が出来ないので
オ−ガナイザ、ナビゲ−ションパレットを見ると非表示のままでした。
これを表示にするスクリプトがあれば作業効率が上がるので教えて下さい。
(なぜか私ばかりの質問で申し訳有りません)
自己レスです
2.Vectorworksでは、窓選択で囲んだ部分の複写とか切り抜きができる操作方法のコマンドがありませんがScript等があったら教えて下さ
い.
コマンド カットandペ−スト、コピ−andペ−ストで出来ましたけど
長い長さの場合両端部が含まれていないと選択されません、どのように
しているのか教えて下さい。SHIFT+で追加ですか?
今回の件でバックナンバ−を全て読み返してみました。
何かの役にたつかとVectorworks附属のVecterScriptも読んでみました。
?・?・?の事ばかり。
もう少し初心者向け解説書等が必要では無いでしょうか?
お勧めの本がありましたら教えて頂けませんか?
与太郎さんへ
丁寧な説明有難う御座います。
全角アンダーバーの件は
了解いたしましたので、スペ−スに変えて再保存致しました。
エラ−メッセ−ジの件
ファイル検索で検索致しました。
今回のエラ−内容です
Line #29: f 0 = nH then
|
{ Error: Identifier not declared. }
Line #34: end;{if}
|
{ Error: Expected a Procedure. }
かさねがさね申し訳ありませんが宜しくお願い致します。
説明が足りなかったようですみません。
全角アンダーバーは、この掲示板でタブが使えないのでタブの代わりに使っています。
ですから保存するときに"__"をタブかスペースに置き換えてください。
削除だと名前と名前の区切りが消えてエラーになることがあります。
エラーメッセージの件ですが、"ErrorOut.txt"というテキストファイルになっています。
"Documents and Settings"フォルダ内のユーザーフォルダの奥深い場所にあるので
ファイル検索で探してみてください。
与太郎さんへ
アンダ−バ−部分をキ−ボ−ドより直接打ち込みました。
エラ−メッセ−ジ内容を書き込みます。
Line #10:__function DoObject(h:handle):boolean;
|
{ Error: Expected :}
Line #11:__begin
|
{ Error: Expected BEGIN }
アンダ−バ−の数は読み取れていないので推定です。
(エラ−確認の内容がコピペできないので)
かさねがさね宜しくお願い致します。
与太郎さんへ
早速の対応有難う御座います。
提示したいただいたスクリプトをメモ帳にコピペして保存の上、VectorScriptエディッタの画面で開き保存。この際アンダ−バ−が全角に変わるこ
とは無いと思いますが、アンダ−バ−のみ修正してトライしてみます。
エラーメッセージ内のスクリプトが元のと微妙に違うのは
私のタイプミスです
(エラ−確認の内容がコピペできないので)
自己レスです
Wed Jul 26 2006年の面積記入のScriptを
メモ帳にコピペして保存の上、VectorScriptエディッタの画面で開き保存
で使えるようになりました。
>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の間にスペースが入っていると定数名として認識されません。
エラーメッセージ内のスクリプトが元のと微妙に違うのは、コピペするときに変わるんでしょうか?
与太郎さんへ
スクリプト試しましたのでお知らせ致します。
やはりエラ−がでましたので、内容を書き込みます。
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 (この部分は選択クラスで変化する)
それにしてもエラ−確認の内容もコピペ出来ないのは私の環境のせいなのかな?
今回の試している図面はグル−プもシンボルもないのですが・・・・。
宜しくお願い致します。
私の環境ではエラーを確認出来ませんが、
古いスクリプトだとグループやシンボルの中で選択図形が拾えないので、
下のスクリプトを試して頂けますか。
{ 選択したオブジェクト以外の「クラス」を非表示にする }
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);
連続投稿ですみません
与太郎さん作
Mon Feb 23 2004
の表題のScriptをメモ帳にコピペして保存の上、VectorScriptエディッタの画面に上記Scriptをコピペ。
Scriptを実行すると3行目、6行目にエラ−がでるようです。
使いたいのでどのように直せば良いか教えて下さい。
ずっとAutocadばかりで
7年ぶりにVectorworksを触っています。
OS Windows XP SP2
Vectorworks2008J
Vectorworks談話室からこちらに来ました。
1.Script談話室
Wed Jul 26 2006年の面積記入のScriptの登録方法を全く忘れてしまいました。
どなたかご指導のほど宜しくお願致します
あいまいな記憶のなかで試した
リソ−スブラウザ-新規・名称未設定-VectorScript-名前をつける-VectorScriptエディッタの画面に上記Scriptをコピペし
ようとしたのですが出来ませんでした。
2.Vectorworksでは、窓選択で囲んだ部分の複写とか切り抜きができる操作方法のコマンドがありませんがScript等があったら教えて下さ
い。
与太郎様
ご報告が遅くなり、申し訳ありません。超初心者です。
教えていただいたやり方で試してみました。上手く動きました!
クラスとレイヤをメニューからではなく、小窓から設定する作業方法なので、その部分と不要情報消去を修正してみました。
各々の値が入れられないのが残念ですが、ショートカットキーを何度も押さないでメニューが出るだけでも作業効率がずいぶん違います。
コマンド実行でテキストファイルを読み込むことが出来るというのがわかったのも良かったです。
初心者でもわかりやすく丁寧に教えていただいて本当に有難うございました。
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);
ようこそScript談話室へ。
VectorScriptの実行方法ですが、
「コマンドを実行...」と「取り込む」→「VectorScript...」はテキストファイルとして保存されたVectorScriptを実行するの
で、
VectorScriptファイルはテキストファイルになっている必要があります。
古いバージョンだと文字コードがShift-JISでないと日本語等が文字化けするかも知れません。
それから、この掲示板のレス番は投稿者が自分で付けるのが慣習なので以後宜しくお願いします。
すみません。VectorWorks談話室から移動してきました。
どちらかがお目に留まるように同じ内容を書き込みます。
与太郎様
お教えいただきありがとうございます。本当に助かります。
今日会社でVectorScriptランゲージというのを読んで自習してきました。
明日教えていただいたこと早速試してみます。
一つ根本的な部分で困っているのですが、他からまわってくる既存の.mcdの保存をしますので、共有というのをしても次の.mcdで作成した
VectorScriptを使おうとすると、パレットの登録という作業が入ってしまい、手間もありますが、既存ファイルの内容を変更してしまうので良くな
いというのがわかりました。
階層からプラグインコマンドを使う方法は、コマンドの実行が上手くいかず使うことができませんでした。
もしよろしければ、こちらの部分もお教えいただけないでしょうか。
ずうずうしいですが、よろしくお願い致します。
よろしくよろしくお願いいたします。
以前の頁はかきこみできません。
こちらへどうぞ。
ファイル内の特定の線の太さをすべて変更する 与太郎
Thu Jan 31 13:09:36 2013
VectorWorks談話室からのお題です。
下のスクリプトでグループ内の図形の線の太さも変えられます。
線の太さを設定するインターフェースは作ってないので、
別の太さで実行するには、最初のOldWidthとNewWidthの数字を書き換えてください。
単位はミル(= 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>と考えたのですが
うまくいきません。
どなたか お教え下さい。宜しくお願い致します。