Script談話室バックナンバー1999-2003

Re^完:ツールプラグインからパラメータ値を変更するには?   なか
email:
n_home@plum.freemail.ne.jp  Thu Jun 6 1:09:33 2002

出張していて、書き込み遅れて申し訳有りません。

まず、インクリメントとは議論の通り、実行後に+1することです。
実際に私が考えているツールは、標準である番号スタンプツールに似た、
五十音順にスタンプするツールを考えています。

オブジェクトではパラメータを書き換えることで、なんとか、
五十音順にスタンプするのですが、やはり、オブジェクトでは、
スクリプトが実行されるタイミングがつかめなく、辺境地のコンサルさんが、
言われるように、変なループに突入して、断念したところです。

そこで、ツールなら、スクリプト実行タイミングも選ぶことが出来るので、
と思い、ツールでのパラメータ書き換えを考えています。
レコードに吐き出すことも考えたのですが、ユーザが連番の始まりを入力した
のか、連番の途中なのかの振り分けが、どうもスムーズに行きません。
同じく、ファイルへ出力しても、同様です。

KANABUNさんが、同じ方法で出来ると言われてるのに、ハッとして、やってみたら
出来ました。どうやら、オブジェクトからツールへスクリプトを修正しているときに
エラーが解けなく、GetPluginInfoをマニュアルでよく読むと、
プラグインオブジェクト内でのみ使用可と記載されていて、思わず消してしまった
経緯からのようです。

ここで、オブジェクトandツールのパラメータ書き換えサブルーチンを
紹介しときます。
{***********************************************************************
OverWriteParameterパラメータを書き替える
  parameterName:パラメータ名
valuStr :変更したい値
************************************************************************}
PROCEDURE OverWriteParameter(parameterName,valuStr:STRING);
VAR
pluginName:STRING;{プラグイン名を格納}
objectHandle,pluginHandle,recordHandle:HANDLE;{図形のハンドル,プラグインのハンドル、レコードのハ ンドル}
wallHd:HANDLE;{今回とくに使っていない}
BEGIN
{図形のパラメータを変える}
IF GetCustomObjectInfo(pluginName,objectHandle,recordHandle,wallHd) THEN
BEGIN
SetRField(objectHandle,GetName(recordHandle),parameterName,valuStr);
END;
{初期値のパラメータを変える}
IF GetPluginInfo(pluginName,recordHandle) THEN
BEGIN
pluginHandle := GetObject(plugInName);
SetRField(pluginHandle,GetName(recordHandle),parameterName,valuStr);
END;
END;
{************************************ここまで****************************}
ここまでで、解ったのは
1.ツールで使う場合は、図形のパラメータを変えるの条件文をコメントアウト。
2.オブジェクトで利用の際は、表示専用としてつかう

どうも、みなさん、ありがとうございました。


すいません、呼び捨てました。  KANABUN
email:  Wed Jun 5 17:45:30 2002

>辺境地のコンサル さん
でした。
すいません、「さん」が抜けてました、ごめんなさい。


確かに  KANABUN
email:  Wed Jun 5 10:52:25 2002

>辺境地のコンサル

確かにセオリーはそうなります。
格納もしくは表示専用のパラメータが無い現状では。

プラグインオブジェクトより プラグインツールのパラメータの方が格納用には使い易いです。
オブジェクトでは、複数変更処理等で、吐出されない事もあり不安定です。
どっちにしてもマニュアルに無い方法ですから自己責任ですね。

レコードに吐出すのが、一番安全ですが、下記のインクリメントみたいな処理はツール自身にレコードを持たせる事ができないので、パラメータを使う事になる のはしょうがないように思います。


書かなきゃなあと思っていたんだけど・・   辺境地のコンサル
email:  Tue Jun 4 17:13:38 2002

辺境地のコンサルです
私の問題の後KANABUNさんが注意事項を入れたときに
かかなきゃなあと思っていたのですが

私がプラグインオブジェクトで最終的にやったことは

パラメータ値が変わる
当然形も変わる
体積を計算する
その値をレコードに吐出す

という事を行いました
あくまでレコードに吐出すことを前提として質問しました
パラメータ値は私も入力専用と割り切っています
プラグインオブジェクト側でパラメータをいじるということは
結局自分で自分の形を変えるということですから
旨くやれば(例えばそのパラメータを作画に使わないとか)いいでしょうが
結局変なループに入りうまく行かないでしょう

パラメータは自分で値が変えられるという、またデータベースで引っかけられるという
便利なようでちょっと危ない性質を持っています
データベースに吐くのならパラメーターに吐いてしまえとは考えないほうがいいでしょう
出来るだけレコードを作ってそれに吐くようにするのが私は定石と考えます

前後の話題とはちょっと関係ないようですがパラメータとレコードを一緒に考えると
危ないと思ったのでちょっとおせっかいを・・・

でわでわ


Re^4:ツールプラグインからパラメータ値を変更するには?  KANABUN
email:  Tue Jun 4 9:57:43 2002

>そもそも、ツールプラグインって値の変更が可能なのでしょうか?
可能です。
プラグインオブジェクトと同様の方法で、パラメータの初期値を変更することが出来ます。
>data + 1 の処がインクリメントと云うことですかね。
そういうことですね。
番号が自動的に増えるツールを作って使っていますが、クリックで番号を描画した後に、パラメータの初期値に+1を加えることで可能です。
試してみて下さい。


Re^3:ツールプラグインからパラメータ値を変更するには?   石男
email:  Mon Jun 3 18:43:52 2002

そもそも、ツールプラグインって値の変更が可能なのでしょうか?
値の変更が可能はプラグインオブジェクトってことですよね。


Re;ツールプラグインからパラメータ値を変更するには?  plugramer
email:  Mon Jun 3 12:04:22 2002

data + 1 の処がインクリメントと云うことですかね。
単純に実行後「1」増加させたいという要求でしょう。
スクリプトの実行タイミングは、プロパティ設定の処で選択できないでしょうか?
プラグインオブジェクトを数こなしてないので、不確かですが。


reツールプラグインからパラメータ値を変更するには? ツールプラグインからパラメータ値を変更するには?  KANABUN
email:  Mon Jun 3 11:08:11 2002

すいません、インクリメントとはどういう意味でしょうか?
専門用語はどうもわからないのですが、ツールプラグインのパラメータに、ツール利用後の情報を返したと言う事でしょうか?


ツールプラグインからパラメータ値を変更するには?   なか
email:
n_home@plum.freemail.ne.jp  Mon May 27 0:46:11 2002

皆さん、はじめはして、なかです。

さて、質問なんですが、
目的はツールプラグインを使いパラメータ値によって図形を描画します、描画が完了したらパラメータ値をインクリメントしたいのです。

そこで、悩んでいるのが、このツールプラグイン自体のハンドルが得られれば
    SetRField(pluginHandle,'ツール名','パラメータ名',data + 1);
で出来そうな気がします。

先日の書き込みの辺境地のコンサルさんの場合のようにプラグインオブジェクトを使うと、パラメータを書き換える事には成功したのですが、プラグインオブ ジェクトだと、プラグインオブジェクトを選んだ時点でスクリプトが実行され、クリックが完了してまた実行し、モードバーボタンを選ぶとまた実行と、それぞ れのタイミングが解らないので、何回もインクリメントされてしまい、断念しました。

よろしくお願いします。


Re:IGESデータ?どうですか?  plugramer
email:
someda@cwlaputa.com  Thu May 9 18:21:33 2002

J-36さん

この手の質問も、VectorWorks 談話室でどうぞ。
因に皆もJ-36さんと同じユーザーでので、9.5を具体的に業務で使用出来る環境には
ないと思います。
A+A社へご質問されるのがベターかと。


Re:質問  plugramer
email:
someda@cwlaputa.com  Thu May 9 18:13:37 2002

maaさん、ほったらかしになっていましたね。

>3Dで削り取りをしたオブジェクトにテクスチャーを張ることができない
>のですがどうすればよいのでしょうか?すみませんが初心者なものでどう
>か教えて下さい。
この手の質問は、VectorWorks 談話室でどうぞ。

具体的にどういう状況か分かりませんが、私の環境では削り取りをした
オブジェクトでもテクスチャーが張れます。PowerMac G4です。
削り取り操作の後シンボル化していませんか?
試しに一度分解(削り取りを解除)して試してみては如何でしょう。

作り込んだデータ容量の大きいファイルであれば、その問題のオブジェクト
だけ新しいドキュメントに移して試してみるのも一案でしょう。


Re^6:喫茶室の続き  plugramer
email:
someda@cwlaputa.com  Thu May 9 17:00:37 2002

皆さんこんにちは。
しばらくサボっている内に盛り上がっていますね。

VW SDKに「DebugWindow」というのがありまして(以前のバージョンにしか付いて
いなかったかもしれません)、文字通りデバッグ用ですからCなりC++のコードの中に、
デバッグ出力用のコードを書くのですが、逐一内部の状態を表示し続けます。

これで代用出来るかなと考えたのですが、主旨からしてそんな手の込んだことは出来ま
せんよね。建築魔術団さんのConsoleを使用する方法がGoodですね。

やはりVectorWorks本体の機能で持たせるのが、利用する側としては手軽ですが、
VectorWorks上で、新しい子ウィンドウを開いてそれに同じようなことをさせる
イメージは、かなり手強そうですね。壮大なテーマかと・・・。

>VSでやろうとすると、まず簡単書式のためにデータの送り出しは
>サブルーチン化で、しかも前に実行したprint文(のようなもの)の
>結果を残しながら改行して次のprint文(のようなもの)の表示を
>するってことで、

SDKで組むにしても、必要な関数について出力対応用に一々作ることになりそうです。
VSのサブルーチン(関数定義)でやることを、本体の関数で持ってなければ結果的に
本体で機能持たせる場合も同じことをやるのではないのかな?。

そもそも利用目的って何でしたっけ。
少なくともOSX上では、どのアプリケーションのウィンドウも対当ですから
(アクティブか否かの違いはある)Consoleの機能で満足出来るのであれば、現実的に
はリーズナブルな解決方法かと思います。消極的で済みません。


Re^5:喫茶室の続き   トトロ
email:
totoro@badboy.co.jp  Thu May 9 2:51:43 2002

建築魔術団さん、江戸の黒板当番さんレスありがとうございました。
やっとMacOS-X+VW9.5Jで試してみました...「なななるほどっ!」(@@)です。

まだ、この環境を試せない方々にコメントしておきますと...
似たようなことは
Append('test.txt'); {test.logじゃなくて拡張子が.txt}
にしておいて出力ファイルをテキストエディタで開くのと似ていますが、

Append('test.log'); {今度は拡張子が.log}
にしておいて、Script実行後、Unixのコンソールでファイルを開いたままに
しておくと、そのファイルを開いたままVectorScriptを実行した場合、更新結果
(この場合はScript実行で出力行がどんどん足されていきます)の確認を
コンソールから再度ファイルを開き直しさなくてもできてしまうというところに
あります。
つまり、コンソールがVWのText出力窓のように連携して動いているように見える
という訳です。

私が欲しかった最低限のことはこれで解決されるようです。ただしこのような
出力窓をVWが標準実装していてくれると更に楽にはなりますね...強欲(^^;...。
奥が深いですねUnix...(^^)。
とても役に立ちそうです、ありがとうございました>建築魔術団さん


Re^4:喫茶室の続き   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Wed May 8 23:03:40 2002

面白そうなので早速、試させていただきました。ConsoleはApplication/Utilities/
Consoleなのですね。
ふむふむOSX環境はちょいと難しいというか勝手が違うんですね。
次のスクリプトを新規リソースのVectorScriptコマンドのウィンドーにコピペして
コンパイルしようとするとエラーが出てしまいます。やっかいなことに
エラーメッセージがない。
それとtest.logが保存されるディレクトリは/Private/var/logにあるのでしょうか?
スクリプトコンパイル時のエラーでlogが作成されていないのでしょうね。
なかなか奥深そうですね。


Re^3:喫茶室の続き   建築魔術団
email:
majutudan@nifty.com  Fri May 3 21:25:26 2002

こんにちは、
こちらの談話室では、はじめまして。

みなさんが要望されている、リアルタイムの文字数値出力表示は、
VW9.5 を MacOS X 環境で実行すれば、そのまま実現されますよ。

試しに、MacOS X で Console を実行して、VW9.5デモ版で次のスクリプトを実行してみてください。
できた test.log を Console から開いてください。
(拡張子を .log にするのがミソです。)
スクリプトを実行する度に、コンソールのウィンドウに行が追加されていきます。

{-----------------------------}
proceduretest;
var
i:integer;
begin
Append('test.log');
for i:=1 to 10 do
WriteLn(i);
end;
run( test );
{-----------------------------}

WinXP でも同じようなことが出来るはずですが、まだ実験してません。



Re^2:喫茶室の続き   管理人
email:
aoyama@hokkai.or.jp  Fri May 3 5:49:32 2002

グラフィックは作図画面で扱えばよいので、対象は文字数値だけですよね。
学習用ですから、
BASICなどのプリント文をシミュレーションしたいわけです、管理人は。
いっそ、学習専用プリント文と専用ウィンドウを追加しちゃう。
カンマ、コロン、セミコロン、改行、空行、文字列、変数、計算式、配列変数などの
プリント動作を再現できればよい、っと。あ、ウィンドウのクリアも。
SDKの話してますね…。それともテキストのプラグイン?
お、閃いたぞ、VectorWorks用の「BASIC言語プラグイン」!(パスカルだってばぁ)


Re:喫茶室の続き   トトロ
email:
totoro@badboy.co.jp  Thu May 2 17:53:13 2002

Script談話室の常連さんすいません
コラム>喫茶室>Script談話室 と異例の大移動をしてきたネタですm(_._)m。
Vector ScriptにBasicのprint文のような簡単命令で複数行表示できる
テキスト・ウィンドウが欲しいってコラムネタが出発点です...。
VectorScriptで同様の機能を実現するアイディアを石男さんにいただきました。
ありがとうございます> 石男さん
VectorScriptではどうしても制限がかかっちゃいますね。


喫茶室の続き   石男
email:  Thu May 2 17:33:25 2002

先程、江戸の黒板当番さんにわたしも欲しいとお願いしたのですが。
わたしの考えたvsの流れを書きます。簡単な表という訳にはいきませんが・・・。

例えば、2D基準点が適当にあったとします。
1.2D基準点のxy座標を取得します。
2.String型の変数に取得したxy座標の値を代入します。これをConcatでつないでい
 きます。
3.モダンダアイログのCreateStaticTextを設定して、そこに先程のString型の変数
 を設定してしまう。
といったやり方なのですが、String型は255文字までの制限がありますし、文字列そ
のものも255までの制限なので、xy座標の値を文字列に変換する時に字数をチェック
していく必要があります。
255を超えたらまたCreateStaticTextを設定して・・・と考えた訳です。
でも、そうするとCreateStaticTextをいくつ設定するかという問題とどんな座標値
がくるかわからないのでレイアウトが不可能(数字の羅列になる)なので断念しま
した。ただ、今までも結果表示用にモダンダアイログを使用していたので試してみ
ました。


IGESデータ?どうですか?  J-36
email:
kiyotaka.ida@daisen-inc.co.jp  Tue Apr 23 1:01:01 2002

金型モデル製作の職工です。
NC加工機にデータを渡したいのですが、現在はVWにて2次元図面を作成し他の3Dソフト
(名前は忘れましたがお高いソフト)にて3D化した後IGESデータにてNC加工を行って
いますが、今回の9.5カラIGESデータの取出しが可能である様子ですがCNC業務に使用
出来そうですか?又その場合PC側のパフォーマンスは? 
などIGESデータの環境を教えてください。
環境は VW.9.5バージョンアップ申し込み済み・serlon 700MHZです。


質問  maa
email:
gazzira@mac.com  Fri Mar 29 15:59:41 2002

3Dで削り取りをしたオブジェクトにテクスチャーを張ることができないのですがどうすればよいのでしょうか?
すみませんが初心者なものでどうか教えて下さい。

環境は、VW、RW9 imac400mhzです。


注意事項  KANABUN
email:  Thu Mar 21 11:22:27 2002

この方法はサポート外の裏技になります。
というのも、プラグインオブジェクトはパラメータを手動で変更するのが前提に設計されているからです。

この方法でパラメータへデータを押し込むと、プラグインオブジェクトの再描画が行われません。つまり、データパレットの数値だけが変化して形状は変化しな いのです。

外部のツールからオブジェクトのパラメータへデータを流し込む時も同じで、その場合は オブジェクト自体にSetScale(1,1)を実行すると、再描画してくれます。

現時点では プラグインオブジェクト内でパラメータを変更した場合の再描画手段を発見できていません。
ですが、プラグインオブジェクト内でパラメータを変更する場合は、むしろ結果表示の場合が多いと思いますので、(つまり変型用パラメータでなく、変型後の データ表示エリア)必要ないかと思います。

本来ならパラメータの中に、表示専門のTextパラメータが欲しいところです。


Re.:本当にありがとう   石男
email:  Thu Mar 21 10:06:18 2002

 ようやくSetRfieldを使ってパラメータを変更出来ました。
なるほど、こうすれば辺境地のコンサルがやりたかったワークシートへの取り出し
が可能ですね。
 一つ勉強させてもらいました。


本当にありがとう   辺境地のコンサル
email:  Wed Mar 20 17:40:52 2002

このところの一連の質問の肝となるべき答えをKANABUNさんがしてくれました

ここまでの私なりのまとめです

プラグインオブジェクトを作ったときに
ぜーんぶの描画が終わりLnewObjでハンドルを取ったとしても
それはプラグインオブジェクト全体のハンドルではない
そのハンドルでいくらレコードを書き込もうとしてもオブジェクト内の図形に
レコードを書き込むようなものになり、無効である(このへんがちとむずかしい)
定型ルーチンのなかにある”parmhandle”変数に格納されたハンドルが
オブジェクト全体を指し示すハンドルである
オブジェクトにレコードをつけるときは必ず全体を指し示すハンドルを使うようにする

こんなところでしょうか・・・


忙殺中  KANABUN
email:  Wed Mar 20 10:54:15 2002

>プラグインオブジェクトのスクリプトからそのオブジェクト自身に
レコードを書き込むことは出来ないでしょうか?

可能です。
VectorTreeでは使っています。
石男さんの説明のようにレコードフィールドを置き換えて、SetRfieldを使えば良いののです。レコード名はプラグインオブジェクト名です。
ハンドルは定型ルーチン部分の自己ハンドル部分をフックするか、プラグインオブジェクト名から取ってもOKです。

うわ〜、もう2週間切った!


また質問です   辺境地のコンサルです
email:
fwhd4139@mb.infoweb.ne.jp  Wed Mar 20 9:33:32 2002

このところしているプラグインオブジェクト関連の質問なのですが・・・

プラグインオブジェクトのスクリプトからそのオブジェクト自身に
レコードを書き込むことは出来ないでしょうか?
単純に
NewField(なんとかかんとか)
Setrecord(なんとかかんとか)
SetRfield(なんとかかんとか)
とかいてもレコードはつかないようなのです

これが実現すればこのレコード経由でプラグインオブジェクトの体積が
ワークシートに持って行くことが出来るのですが・・・


冬眠というより忙殺に違いない   辺境地のコンサル
email:
fwhd4139@mb.infoweb.ne.jp  Thu Mar 14 18:11:19 2002

KANABUNさんはきっと大変でしょう

>江戸での勉強会のレジメを試してみませんか
ぜひお願いします!・・・でどうすれば・・?


KANABUNさん冬眠してるので代返です。   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Thu Mar 14 14:06:36 2002

>MiniCADプログラミングという本が有るそうなのですがどうも絶版臭いし・・・
それはまだあるのですがプラグインオブジェクトの作り方は書いてないですよ。
江戸での勉強会のレジメを試してみませんか?
これからでる本の基本的なことをおしゃべりしながらやったものです。


プラグインオブジェクト   辺境地のコンサル
email:
fwhd4139@mb.infoweb.ne.jp  Wed Mar 13 15:41:07 2002

こんにちわ
で、いきなりなんですが
プラグインオブジェクトの作り方を詳しく書いてあるもの
なにかないですか??
MiniCADプログラミングという本が有るそうなのですが
どうも絶版臭いし・・・(まだ問い合わせてはいませんが)


 KANABUN
email:  Sun Mar 3 11:09:49 2002

タイトル2重+ハンドルにもタイトルという失態、すいませんでした。


Re:DoMenuTextByNameの項目Re:DoMenuTextByNameの項   KANABUNRe:DoMenuTextByNameの項目
email:  Sun Mar 3 11:09:06 2002

uglyduckさん、良かったですね。
メニューを見直したところ、「線分を合成」ってありましてね、すいません、見落としてました。
>英語版のほうが、ちょっとカッコよいですね、マニュアル。
そうですよね、センスを感じます。
英語版には色々な情報が隠れていますので、読むと楽しいですよ。

解決までの書き込みフォローありがとうございました。


Re:DoMenuTextByNameの項目  uglyduck
email:  Sat Mar 2 15:26:49 2002

Plugramerさん、KANABUNさん、有り難うございます。
わかりました。
「Compose Curve」でした。

「線分に分解」の反対語でした。

本社の英語版マニュアルをDLしたところ、これであろうと。
英語版のほうが、ちょっとカッコよいですね、マニュアル。

いやいや、お騒がせしました。


Re:DoMenuTextByNameの項目  KANABUN
email:  Sat Mar 2 9:31:24 2002

「線分を結合」ならわかりますが、そのことでしょうか?
DoMenuTextByName('Join', 0);
です。
このあたり、日本語マニュアルは抜けてるようです。
v9のVSを本格運用するのでしたら、本社の英語版マニュアルをDLすることをお勧めします。


Re:DoMenuTextByNameの項目  uglyduck
email:  Fri Mar 1 9:33:43 2002

早々のレスありがとうございます。
「線分を合成」とはVectorWorks9.0の加工メニューにあるんですが、
「合成」とは別メニューになってるんです。


Re:DoMenuTextByNameの項目  Plugramer
email:  Fri Mar 1 3:08:49 2002

uglyduckさんこんにちは。

「線分を合成」とは「合成」メニューコマンドのことでしょうか?
 (線分で囲まれた閉領域を外形線とする多角形を生成するコマンド)

DoMenuTextByName関数の引き数になるパラメータは、
「Vector Script language」PDFの附表4と5を参照して下さい。
因に「合成」でよければ「Combine Into Surface」となります。


DoMenuTextByNameの項目  uglyduck
email:  Fri Mar 1 1:54:49 2002

こんにちは。

DoMenuTextByNameで「線分を合成」を行いたいんですが、
この項目がPDFマニュアルで見つからないんです。

また、こんなメニュー項目を見つけるには
マニュアル以外に方法があるのでしょうか?


Re^2:空クリックなしでスクリプトの実行     たつきち
email:  Wed Feb 13 22:13:09 2002

Plugramerさん、どうもありがとうございます。
(それと遅ればせながら前回質問に答えてくださった石男さんにも感謝です)

何せまだVectorScript自体もさわり始めたばかりなので、
SDK、いつか挑戦してみたいと思います。


Re:空クリックなしでスクリプトの実行  Plugramer
email:  Wed Feb 13 10:47:28 2002

>たつきちさん
残念ながら、ベクタースクリプトではツールアイコン選択時に何かを動作させると
いう仕組みは組込まれていないので、アイコンクリック即設定変更は難しいと思います。

VW8以降プラグインツールとプラグインメニューに登録可能になり非常に便利になり
ましたが、プラグインツールの場合の起動方法に関しては、ツールの性格上連続繰
り替えし動作の方に重きがおかれた為か、コマンドパレットの場合と比べて半歩後
退と言う感じになりましたね。

私も環境設定的なコマンドををツール感覚で切替えて使用したい方なので、プラグ
インツールの起動方法については是非改善して欲しいと希望しています。
ただ、アイコン選択即実行がツールコマンドの一貫した定義に当てはまらないこと
なので、開発する側としては邪道だとの抵抗があるようにも思います。

現状考えられる代案としては、
1.メニュープラグインで登録してショートカットを割り当てる
2.SDKを使ってVSメニュープラグインを実行する
  極単純なツールプラグインをつくる
3.SDKを使ってツールプラグインをつくる
※SDKではアイコン選択時に動作可能な仕組みが組込まれています
 プライベートな操作性を追求するにはSDKしかないかもしれませんね


空クリックなしでスクリプトの実行   たつきち
email:
tatukiti@iris.dti.ne.jp  Tue Feb 12 18:45:23 2002

たびたびすみません。
[環境設定]-[システムに保存]の中の項目を、アイコンのクリックでon/offする
ツールを作ってみています。白黒表示化の場合、

Procedure DispBW;
BEGIN
SetPref(10, true);
END;
Run(DispBW);

としたスクリプトをプラグインツールに。
コマンドパレットの時は、ダブルクリックで即設定が変更されたのに対し、
ツール化したものの時は、アイコンをクリックした後さらに図面を空クリックしないと
設定変更がされないんです。

スクリプトに何か追加することで、「アイコンクリック即設定変更」とすることは
可能なのでしょうか・・・?


Re:線の種類の指定(結果報告)   石男
email:  Fri Jan 25 8:56:43 2002

わかってなによりでした、この手の数字で設定するタイプはマニュアルに載ってい
ないも設定できますので、やりたいことを一度作図してみてスクリプト吐き出しを
を使ってみると良いです。わたしの場合、寸法の設定がらみでこの手を使ってほぼ
思った通りの結果をえられました。


線の種類の指定(結果報告)   たつきち
email:  Thu Jan 24 23:03:31 2002

一人で質問出して一人で引っ込めてしまっていました(>_<)
結果報告です。
PenPatのパラメーターとして-1〜-8を指定した場合、
その時点での破線#1〜#8が指定されます。

断言してしまうのはかなり気が引けますが、
線を書く前に描きたい線に応じた線色・線種・クラスに指定するスクリプトを
作っていまして、「破線#1〜#8をカスタマイズしたSTAファイル」と、
「ベンダー配布のSTAファイル」で同じスクリプトを試してみたところ、
描かれる線が異なりましたので、大丈夫かと。


Re:線の種類の指定(自己レス)  KANABUN
email:  Thu Jan 24 15:19:03 2002

このあたり、最近のVSマニュアルだと抜けてたりするんですよね。
手元にあるのはv5のVSマニュアルですが、2が実線、-1〜-8はデフォルトの破線に
対応しているようです。
0〜71を代入すると、フィルパターンを参照するようです。
ってことはカスタム線は-9以降かもしれないですね。
たつきちさん、結果報告お待ちしております。


Re:線の種類の指定(自己レス)   管理人
email:
aoyama@hokkai.or.jp  Thu Jan 24 11:10:21 2002

たつきちさん、解決してよかったですね。
何か教訓まで得られたようで、めでたし、めでたし。
また、解決した旨のご報告をありがとうございます。
マナーを守る方は、とても気持ちよいですね。
管理人は、朝からとても爽やかな気分であります。


Re:線の種類の指定(自己レス)   たつきち
email:  Thu Jan 24 11:01:22 2002

案ずるより産むが易し・・・
試してみれば分かること、でした(反省)


線の種類の指定   たつきち
email:
tatukiti@iris.dti.ne.jp  Wed Jan 23 18:40:33 2002

皆さんこんにちは。スクリプトを使い始めたばかりの者です。

PenPatのパラメータ指定による線種指定について教えてください。

値を-1から-8の範囲に指定すると、模様の種類ではなくて線の種類で指定できる
様なのですが(nemetschekサイトによる)、ここでいう線の種類というのは、
ユーザーがカスタマイズした線の種類 になるのでしょうか?
それとも、VWが規定で持っている線の種類になるのでしょうか?

ランゲージガイド・リファレンスを調べてみたのですが、
-1〜-8の値と線種の対応表を見つけられませんでした・・・
よろしくお願いします。


多角形を閉じるには  KANABUN
email:  Fri Dec 7 9:42:19 2001

スクリプト中で多角形生成前にClosePolyを組み込んで下さい。


せめて   ワン
email:  Thu Dec 6 23:02:44 2001

せめて「多角形を閉じる」のショートカットを知りたいです。


お聞きしたいのですが   ワン
email:  Thu Dec 6 22:50:33 2001

多角形を一気に「多角形を閉じる」にするスクリプトってどのように組めばいいのですか?


ありがとうございました   いっちゃん
email:  Fri Nov 23 8:22:54 2001

>上方の陰陽師さん、KANABUNさん
ありがとうございました。お二人とも凄いですね。わたしがやるとグループが入れ
子状になってしまって、どうにもならなかったのです。
感激です、これで前進できそうです。


Re グループにしたいのですが  KANABUN
email:  Thu Nov 22 23:05:56 2001

さらに追記です。最後の

until End_i <= i ; ;

の部分、「;」がひとつ多いですね。行末は1つです。(^^;)
問題なく動くようですが。


Re グループにしたいのですが  KANABUN
email:  Thu Nov 22 22:54:29 2001

追記です。
v9.0対応は動的配列ですので、図形オーバーの処理は不要です。


Re グループにしたいのですが  KANABUN
email:  Thu Nov 22 22:52:48 2001

色々なやり方があるのですが、配列を使った方法は以下の通りです。
まずはv8.5用。動的配列が使えないので作例は100個までの図形にしか対応しません。図形オーバーのエラー処理は書いていません。

{-----v8.5対応------}
Procedure Test ;
VAR
h : handle ;
h_array : ARRAY[ 1..100 ] OF Handle ;
i, End_i : integer ;
Begin
Dselectall;
{-----配列取得100個まで------}
i := 0 ;
h := FactLayer ;
Repeat
i := i + 1 ;
h_array[ i ] := h ;
h := NextObj( h ) ;
until h = nil ;
End_i := i ;

{-----2個ずつやばねる-----}
i := 0 ;
Repeat
Dselectall;
i := i + 1 ;
SetSelect( h_array[ i ] ) ;
i := i + 1 ;
SetSelect( h_array[ i ] ) ;
group;
h := NextObj ( h ) ;
until End_i <= i ; ;

End ;
RUN( Test ) ;


次はv9.0用。動的配列が使えるので、作例はアクティブレイヤ上の図形数をアロケートしてます。図形オーバーのエラー処理は書いていません。

{-----v9.0対応------}
Procedure Test ;
VAR
h : handle ;
h_array : DYNARRAY [ ] OF Handle ;
i, End_i : integer ;
Begin
Dselectall;
{-----配列取得------}
ALLOCATE h_array[ 1.. NumObj(ActLayer) +1 ] ;
i := 0 ;
h := FactLayer ;
Repeat
i := i + 1 ;
h_array[ i ] := h ;
h := NextObj( h ) ;
until h = nil ;
End_i := i ;

{-----2個ずつやばねる-----}
i := 0 ;
Repeat
Dselectall;
i := i + 1 ;
SetSelect( h_array[ i ] ) ;
i := i + 1 ;
SetSelect( h_array[ i ] ) ;
group;
h := NextObj ( h ) ;
until End_i <= i ; ;

End ;
RUN( Test ) ;


Re グループにしたいのですが     上方の陰陽師
email:
hagimori@daiken.co.jp  Thu Nov 22 20:49:37 2001

追伸

for i := 1 to ObjNum Div 2 do
begin

の次に、DSelectAll; を追加して下さい。

以上。


Re グループにしたいのですが   上方の陰陽師
email:
hagimori@daiken.co.jp  Thu Nov 22 17:33:06 2001

ループを使ってグループにするやり方にも色々考えられますが、Repeat...Untilを使った
場合、ハンドル接続がうまくいっても、グループが入れ子になってしまうのでは?
下の例は、アクティブなレイヤー上の図形の数をカウントし、for ループを半分の回数
だけ廻しています。
また、すでにグループ図形が含まれている場合には入れ子にならない様にコマンド実行に
制限をかけています。
これらの制限は、その時々の必要に応じた内容を記述すれば良いと思います。

Procedure GroupTest;
var
h : Handle;
i,ObjNum : integer;
GrNumStr,Alrt : String;
Judge : Boolean;

procedure GrJudge; {グループ図形が存在するかどうかの判定と、グループ図形数取得}
var
GroupNum : Integer;
begin
h := ActLayer;
if h <> nil then
begin
GroupNum := Count(T=Group);
GrNumStr := Num2Str(0,GroupNum);
if GroupNum <> 0 then
Judge := True
else
Judge := False;
end;
end;

begin
GrJudge;
if Judge = False then
begin
h := FActLayer;
i := 0;
if h <> nil then
begin
ObjNum := Count(All);
for i := 1 to ObjNum Div 2 do
begin
h := FActLayer;
SetSelect(h);
h := NextObj(h);
SetSelect(h);
Group;
DSelectAll;
end;
end;
if ObjNum <= 1 then
AlrtDialog('
グループ対象図形が存在しません');
end else
begin
Alrt := Concat('
グループ図形が ',GrNumStr,'個 含まれています');
AlrtDialog(Alrt);
end;
end;

Run(GroupTest);

それではまた。


Re^2:グループにしたいのですが   いっちゃん
email:  Wed Nov 21 18:04:36 2001

>KANABUNさん
早速の回答ありがとうございます。やはり、どうしてもうまくいきません。
つたないスクリプトですが添削してもらえないでしょうか?お願いします。

Procedure Test ;
VAR
h : Handle ;

Begin
h := FactLayer ;
Repeat
SetSelect( h ) ;
h := NextObj( h ) ;
SetSelect( h ) ;
Group ;
h := NextObj( NextObj( h ) ) ;
until h = nil ;
End ;
RUN( Test ) ;


Re グループにしたいのですが  KANABUN
email:  Wed Nov 21 17:01:37 2001

配列を使うと良いと思います。
最初にループを使い、配列変数に全ての図形のハンドルを納めます。
その後で、再びカウンタとループを使い、順番に2個づつ束ねていけば
可能と思います。


グループにしたいのですが   いっちゃん
email:  Wed Nov 21 15:44:37 2001

みなさん、こんにちは。スクリプトを始めた初心者です。

アクティブレイヤ上で図形を書いた順に、1番目と2番目をグループ化、3番目と4番
目をグループ化・・・といったスクリプトを書きたいのですが、ハンドル接続が
うまくいかず、1番目と2番目をグループ化したところで終わってしまいます。
 どうしたら、よいのでしょうか?


Re^2:レイヤーをたくさん作りたい  plugramer
email:
someda@cwlaputa.com  Fri Nov 16 18:55:49 2001

> uglyduck さん
> オペレータの方にこれ以外のレイヤは使用しないで下さいって
> いっても、気分でいろんなレイヤ名で書いてくるんです。
なるほど なるほど、分かります。

お役にたてれば何よりです。


Re:レイヤーをたくさん作りたい  uglyduck
email:
shinta@earth.co.jp  Fri Nov 16 18:24:41 2001

plugramerさん。
いつもありがとうございます。

レイヤの整理って大変じゃないですか?
オペレータの方にこれ以外のレイヤは使用しないで下さいって
いっても、気分でいろんなレイヤ名で書いてくるんです。

一枚一枚ひらいて規定したレイヤをこれで作って
レイヤの移動を行おうと思います。




Re:レイヤーをたくさん作りたい  plugramer
email:
someda@cwlaputa.com  Fri Nov 16 14:52:30 2001

> KANABUN さん
そうなんですよ、
何かいけないことでも書いて管理人さんにお叱りをいただいたのかと
一人悩んでおりました。(って冗談ですが.....)

よかった、バックアップがありましたので、もう一度アップします。

> uglyduck さん
こんなので如何ですか?。
uglyduck さんは、カラーレイヤー環境でお使いなんですね?。

PROCEDURE LAYER_Built;
VAR
LName: ARRAY[0..100] OF STRING;
LColor: ARRAY[0..100] OF INTEGER;
Lindex: INTEGER;

BEGIN
LName[1]:= '間仕切等';
LColor[1]:= 142;
LName[2]:= '躯体';
LColor[2]:= 53;
・・・・
・・・・
・・・・

Lindex:= 1;
WHILE(LName[Lindex]<>'')AND(LColor[Lindex]>=0)AND(LColor[Lindex]<=255) DO
BEGIN
Layer(LName[Lindex]);
LFillFore(LColor[Lindex]);
LPenFore(LColor[Lindex]);
・・・・
・・・・
Lindex:= Lindex + 1;
END;
END;

Run(LAYER_Built);


あれ?  KANABUN
email:  Fri Nov 16 9:43:04 2001

レイヤーをたくさん作りたい  uglyduckさんへの解答をplugramerさんが
UPしていたように記憶しておりますが、掲示板故障事件で消えましたか?


 
email:  Tue Nov 13 3:58:12 2001

はじめまして。ベクター初心者です!
基本的にフォトショップやイラストレーターから画像を取り込むORそれらにベクターの画像を取り込む時は基本的にどういったファイル形式で保存し、どの ファイル形式で開くのがよいのでしょうか?


レイヤーをたくさん作りたい  uglyduck
email:
shinta@earth.co.jp  Thu Nov 8 15:54:51 Japan 2001

こんにちは。

さて、下記のように何個もコピーしてレイヤ名を修正して
レイヤの数だけ作ってるんですけど、
なんかスマートじゃないような。
また、レイヤの色も設定しているので
こちらもそれぞれ変化させたいんです。
2次元配列で行う方法を教えてください。
よろしくお願いします。

Layer('間仕切等');
LFillFore(207);
LPenFore(207);

Layer('躯体');
LFillFore(223);
LPenFore(223);

・・
・・・
・・・・


Re^3:昔々、使っていて不満だった事は今?    plugramer
email:  Wed Oct 31 9:48:47 Japan 2001

>プランから図面、3次元と周辺設備図等の自動作図に数量拾いだと思います。
3次元設計・3次元設計といわれて久しいですが、なかなか自動設計の壁は厚い
ですね。しかし戸建住宅設計CADなどでは、詳細を把握している訳ではないです
が、いい感じになって来ているように見受けられますよね。

2D図面の線や点に持たせる属性データでは限界があるように思いますので、数量拾いを前提にすると、3Dで入力してバーチャルの建物を構築する方が、可能 性が
高いように感じます。これなら頑張れば、現在の VectorWorks9 でも Script を使
用して実現できないこともないと見ているのですが、詳細さの欲求とVWの処理能力
のバランス上、テキパキこなせるものになるかは未知数ですね。
VW上ではシンボルとデータベースの機能が、キーになると思います。

もしかすると、VW単独でこなすことに拘らない方が使い勝手のよいシステムを構築
できるかも知れませんね。

何れにしても、ソフトウェアベンダーや開発者に適切なリターンが見込まれれば、
自動設計の到来は時間の問題のような気がします。


Re:ありがとうの続き  plugramer
email:  Tue Oct 30 9:42:20 Japan 2001

>hiroさん
遅いレスですみません
お役に立てたようで、嬉しいです。


Re^2:昔々、使っていて不満だった事は今?   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Wed Oct 24 20:04:00 Japan 2001

クラス化がかなり適格に作成される様になってきているので流れ的には
もう一歩のところまで来ているような気がします。
図面の描き方が一変するようなことにもなるようですね。
kumaさんも友人の方も正規ユーザーでバージョンアップを重ねる
VectorWorksを支えていただければが然近付くはずです。
オブジェクト化ができたCADの最終型はプランから図面、3次元と周辺設備図等の
自動作図に数量拾いだと思います。


Re:昔々、使っていて不満だった事は今?   やべ
email:
yabe@ff.iij4u.or.jp  Tue Oct 23 23:31:12 Japan 2001

MiniCadやVectorWorksではあまり厳密な見積書は作れないですよ。
ほんとにおおざっぱなものなら昔からほぼ同じことが出来たと思うんですけどね...。


昔々、使っていて不満だった事は今?  kuma
email:
jintaka@mac.com  Tue Oct 23 17:03:04 Japan 2001

建築系の会社で4年程前までMiniCadを使っていてたのですが
その時に、図面から見積書が出来たら便利だな〜と思っていたのですが
先日友人に同じ事を聞かれ
「昔は無かったけど今ならあるんじゃない?!」と無責任に答えたのですが・・・
真意を確かめたくて ここの掲示板に書かせていただきます
ご存知の方は 教えてください m(_ _)m


ありがとうの続き  hiro
email:
ic141@m13.alpha-net.ne.jp  Sun Oct 21 5:48:22 Japan 2001

こっちのほうは、なんとか、目処が付きそうなので、
今、cordinate 座標から、xy座標への変換をEXCELで座標変換しようと思い、
「数学質問箱」のほうで教えていただいています。
インターネットって本当に便利ですね。
感謝、感謝、感謝、感謝、感謝、感謝、感謝、感謝、


やべさん、Plugramerさん、ありがとう  H
email:  Sun Oct 21 5:41:37 Japan 2001

やべさん、お礼を言うのを忘れていました。
やべさんの前述のprogramを勝手に変えて、使わせていただいています。

Procedure read2data;
Var
x1,y1,x2,y2:REAL;
Filename:STRING;
Begin
Dselctall;
GetFile(Filename);
If not Didcancel THEN
Begin
While not eoln(FileName) do
Begin
ReadLn(x1,y1,x2,y2);
PenSize(1);
PenPat(2);
MoveTo(x1,y1);
LineTo(x2,y2);
FillPat(1);
End;
Close(fileName);
End;
Redrawall;
End;
Run(read2data);

Plugramerさんからもアドバイスありがとうございました。

結構使い勝手は良いです。




Re:そうだと思うんですが  Plugramer
email:
someda@cwlaputa.com  Fri Sep 28 20:28:18 Japan 2001

試してみましたら、確かに旨くいきませんね。
私の言う「区切記号を評価して数値化する」考え方で、スクリプトを作ってみました。
これだと、以下のデータで作図できました。
12.0, 12.0, 08.0, 08.0,
06.0, 04.0, 06.0, 05.0,
30.0, 02.0, 43.0, 01.0,
22.0, 04.0, 23.0, 08.0,

------------------------------------------------------------------------
Procedure read2data;
Var
x1,y1,x2,y2:REAL;
Filename, LeadStr:STRING;

Function InportData(Var MasterStr:STRING; DataPosition:INTEGER):REAL;
Var
divStr, transStr, selectStr:STRING;
position, Count, strNum:INTEGER;

BEGIN
divStr:=',';
position:= 1;
strNum:= 0;
Count:= 1;
WHILE Count <= DataPosition DO
BEGIN
position:= position + strNum;
transStr:= Copy(MasterStr, position, Len(MasterStr) - position + 1);
strNum:= Pos(divStr, transStr);
Count:= Count+1;
END;
selectStr:= Copy(MasterStr, position, strNum-1);
InportData:= Str2Num(selectStr);
END;


Begin
{$DEBUG}
Dselectall;
GetFile(Filename);
If not Didcancel THEN
Begin
While not eoln(FileName) do
Begin
ReadLn(LeadStr);
x1:= InportData(LeadStr,1);
y1:= InportData(LeadStr,2);
x2:= InportData(LeadStr,3);
y2:= InportData(LeadStr,4);
PenSize(1);
PenPat(2);
MoveTo(x1,y1);
LineTo(x2,y2);
FillPat(1);
End;
Close(fileName);
End;
Redrawall;
End;

Run(read2data);


そうだと思うんですが  hiro
email:  Thu Sep 27 23:53:47 Japan 2001

「Tab区切り」「スペース区切り」のデータをそのまま利用するとしたら、
Tab文字なり空白文字を読み込んだ時点で数値データを解釈するように
プログラムすることになるのではないでしょうか。
ReadLnで読み込んだ場合、一行分の認識はレターンコードだと思うので、Plugramer
のおっしゃるように、CSV型式カンマ区切りで大丈夫なはずだとおもいますが、やってみると、Tab区切りでないとうまく動いてくれません。
Procedure read2data;
Var
x1,y1,x2,y2:REAL;
Filename:STRING;
Begin
Dselctall;
GetFile(Filename);
If not Didcancel THEN
Begin
While not eoln(FileName) do
Begin
ReadLn(x1,y1,x2,y2);
PenSize(1);
PenPat(2);
MoveTo(x1,y1);
LineTo(x2,y2);
FillPat(1);
End;
Close(fileName);
End;
Redrawall;
End;
Run(read2data);

データのほうは、以下のように作りました。
12.0, 12.0, 08.0, 08.0
06.0, 04.0, 06.0, 05.0
30.0, 02.0, 43.0, 01.0
22.0, 04.0, 23.0, 08.0

x1,y1,x2,y2に数値が入ってくれません。





Re:解決しました。  Plugramer
email:
someda@cwlaputa.com  Fri Sep 21 15:13:06 Japan 2001

CSV型式カンマ区切りで大丈夫ではないでしょうか?。

私の場合、MS-EXCELで作ったワークシートをEXCELの保存設定で、
フォーマット:「CSV(カンマ区切り)」にして保存したものを、
VectorWorksの「取り込む」「ワークシート...」メニューで
取り込んでよく利用しています。

スクリプトで利用する数値データは、「Tab区切り」「スペース区切り」
のものも、テキストエディターの検索置換ですべて「カンマ区切り」に
修正して利用しています。

「Tab区切り」「スペース区切り」のデータをそのまま利用するとしたら、
Tab文字なり空白文字を読み込んだ時点で数値データを解釈するように
プログラムすることになるのではないでしょうか。


解決しました。  Hiro
email:  Thu Sep 20 2:53:06 Japan 2001

Tab切りテキストの形式で書いた座標値データを一括でMiniCadに読み込んで
作図できるようにしたのを作ってみました。

の意味は、わかりました。
だけど、これは、一般的なデータの書き方なんでしょうか?
この部分をcsvとか、では渡せないんでしょうかねえ?


「Tab切りテキストの形式」というのは?  Hiro
email:  Thu Sep 20 1:23:50 Japan 2001

基本的なことを聞いてすみません。

Tab切りテキストの形式で書いた座標値データを一括でMiniCadに読み込んで
作図できるようにしたのを作ってみました。

というのが、書いてありますが、これって、どういうことですか?




[Tab切りテキストの形式  Hiro
email:  Thu Sep 20 1:21:24 Japan 2001

Tab切りテキストの形式で書いた座標値データを一括でMiniCadに読み込んで
作図できるようにしたのを作ってみました。



質問  Hiro
email:
ic141@m13.alpha-net.ne.jp  Thu Sep 20 1:16:52 Japan 2001

3日程前からVectorScriptというものが有ることを知り、この談話室を読ませていただいているものですが、簡単なScriptを 作ってみたのですが、データを読み込んでくれません。どこが間違ったいるんでしょうか?

Procedure read2data;
Var
x1,y1,x2,y2:REAL;
Filename:STRING;
Begin
Dselctall;
GetFile(Filename);
If not Didcancel THEN
Begin
While not eoln(FileName) do
Begin
ReadLn(x1,y1,x2,y2);
PenSize(1);
PenPat(2);
MoveTo(x1,y1);
LineTo(x2,y2);
FillPat(1);
End;
Close(fileName);
End;
Redrawall;
End;
Run(read2data);

データのほうは、以下のように作りました。
12.0, 12.0, 08.0, 08.0
06.0, 04.0, 06.0, 05.0
30.0, 02.0, 43.0, 01.0
22.0, 04.0, 23.0, 08.0

x1,y1,x2,y2に数値が入ってくれません。



アルフレド   アルフレド
email:
alf1230@hotmail.com  Sun Aug 19 14:15:35 Japan 2001

にほんごにscriptのトトロがありますか?


発掘調査ですか   やべ
email:
yabe@ff.iij4u.or.jp  Fri Jul 20 1:59:18 Japan 2001

みーぞーさんこんにちは。
発掘調査のデータの整理用なんですね。
発掘場所をポイントしていくわけだと深さも必要になるんですよね。
3次元でポイントできるようにマーカーを立方体にしたScriptにしてみました。
地形も3次元で入力すれば発掘場所を立体的に把握できると思いますよ。
3つ作ったのでコマンドパレットに登録して使ってみてください。

Procedure ImputPoint;{1カ所だけ入力する}
Const
width=4;
VAR
r:REAL;
xStr,yStr,zStr:STRING;
xPt,yPt,zPt:REAL;
Begin
xStr:='0';
yStr:='0';
zStr:='0';
PtDialog3D('Imput point',xStr,yStr,zStr, xPt,yPt,zPt);
IF NOT DidCancel THEN
Begin
r:=width/2;
BeginXtrd(zPt-r,zPt+r);
RECT(xPt-r,yPt +r,xPt +r,yPt-r);
EndXtrd;
redraw;
End;
End;
Run(ImputPoint);



Procedure readtext2cube;{Tab切りテキストを読み込んで作図する}
Const
width=4; {四角形の大きさ}
Var
r:REAL;
FileName:STRING;
xPt,yPt,zPt:REAL;
Begin
Dselectall;
r:=width/2;
GetFile(FileName);
IF NOT DidCancel THEN
Begin
While not eoln(FileName) do
Begin
ReadLn(xPt,yPt,zPt);
BeginXtrd(zPt-r,zPt+r);
Rect(xPt-r,yPt +r,xPt +r,yPt-r);
EndXtrd;
End;
Close(FileName);
End;
Redrawall;
End;
Run(readtext2cube);



Procedure PointInfo;{MiniCad上のマーカーの座標を調べる}
VAR
n:LONGINT;
h:HANDLE;
pX, pY, zValue: REAL;
xPt,yPt,zPt:REAL;
Begin
h:=FSActLayer;
n:=Count((SEL=TRUE));
IF (h<>NIL)&(n=1) THEN
BEGIN
Get3DCntr(h,pX, pY, zValue);
PtDialog3D('x,y,z Value',Num2Str(1,pX),Num2Str(1,pY),Num2Str(1,zValue),xPt,yPt,zPt);
IF Not DidCancel THEN
Begin
Move3DObj(h,xPt-pX, yPt-pY,zPt -zValue);
redraw;
End;
End ELSE
AlrtDialog('Select Only One Object!');
End;
Run(PointInfo);


ありがとうございます。   みーぞー
email:
mizo1978@hotmail.com  Thu Jul 19 18:10:56 Japan 2001

Jumonziさん、やべさん、どうもありがとうございます。
今日は、ちょっと時間がなくてやってみる時間がなかったので、月曜日にやってみたいと思います。初心者の私にこんなに丁寧に教えてもらってほんとうに助 かってます。
あと、私の仕事というのは、発掘にかかわる仕事です。
発掘する前に試掘(試し掘り)を行うのですが、その大きさが決まっていてそれが30×30、3×3メートルの大きさなんです。
その発掘する場所には、それぞれX、Y、Zの座標値があって、それでもってその発掘場所がわかるのです。いままでは、手書きでやっていたのですが、CAD で座標入力から作図までできるのではないかと思ってやっています。
一応は、CAD7でもできるような気がするのですが、CAD7ではちょと足りない気がします。
Vector Works9のソフトを買うので、測量とか、座標とかがやりやすくなるのではないかと思います。それでは、また月曜日に・・・。


Re:座標値の入力について   やべ
email:
yabe@ff.iij4u.or.jp  Thu Jul 19 0:53:37 Japan 2001

Tab切りテキストの形式で書いた座標値データを一括でMiniCadに読み込んで
作図できるようにしたのを作ってみました。

座標値1カ所を1行ごとに書いたテキストデータを用意します。
以下のScriptを実行するとファイルオープンダイアログが開くので
そこから用意したテキストファイルを選びオープンします。
すると、一行ごとに四角形を作図して最終行まで実行して終了します。

Procedure readdata2box;
Const
width=4;{四角形の幅}
Var
r:REAL;
FileName:STRING;
xPt,yPt,zPt:REAL;
Begin
Dselectall;
r:=width/2;
GetFile(FileName);
IF NOT DidCancel THEN
Begin
While not eoln(FileName) do
Begin
ReadLn(xPt,yPt,zPt);{一応3次元データを読み込む}
Rect(xPt-r,yPt +r,xPt +r,yPt-r);
End;
Close(FileName);
End;
Redrawall;
End;
Run(readdata2box);

ところでみーぞーさん、それってなんのお仕事ですか??


Re:座標値の入力について2    Jumonzi
email:
maruo66@hotmail.com  Wed Jul 18 23:16:09 Japan 2001

みーぞーさん。再度Jumonziです。

VW8.5では座標値の読込み機能があるのですが、mini cad7では
連続的に座標値を読込むにはVSまたはSDKのお世話になるしかないと思います。
ソースのエッセンスとしてはmini CADプログラム入門という本の
入出力の項目に出ています。参考まで


Re:座標値の入力について  Jumonzi
email:
maruo66@hotmail.com  Wed Jul 18 23:07:49 Japan 2001

みーぞーさん。Jumonziといいます。
予め繰返し作業数が分かっている場合は
FOR-構文で簡単に出来ます。
また、初期値を予め用意しない場合はヌストリング''でなにも表示されません。
以下のみーぞーさんのソースに手を加えたものを参考にして下さい。
見当ちがいの場合はご容赦下さい。

それから、VSに興味がおありでしたらA+AでMLがあります。ご利用なさっては如何でしょうか?更に、一寸宣伝になってしまうのですが私が運営している VWDLにVSのサンプルを置いてあります。大したものは有りませんが参考にして頂ければ幸いです。
但し、e-グループに設置してありますのでアカウントを作成しなければなりません。

vwdl:http://www.egroups.co.jp/group/vwdl


Procedure A;
Const
width=4;
VAR
r:REAL;
xStr,yStr,zStr:STRING;
xPt,yPt,zPt:REAL;
i,n:INTEGER;
Begin
n:=IntDialog('座標数を入力して下さい','');
FOR i:=1 TO n DO
BEGIN
PtDialog3D('Imput point','','','', xPt,yPt,zPt);
r:=width/2;
RECT(xPt-r,yPt +r,xPt +r,yPt-r);
redraw;
END;
End;
Run(A);


座標値の入力について   みーぞー
email:
mizo1978@hotmail.com  Tue Jul 17 17:35:39 Japan 2001

はじめまして。CADは全然初心者なんですがvectorWorks談話室で何度か助けていただいてここまでやこれました。
今、miniCAD7を使って、座標入力をしています。
この座標入力で、次のようなscriptを教えてもらい、やってみました。

Procedure A;
Const
width=4;
VAR
r:REAL;
xStr,yStr,zStr:STRING;
xPt,yPt,zPt:REAL;
Begin
PtDialog3D('Imput point',xStr,yStr,zStr, xPt,yPt,zPt);
r:=width/2;
RECT(xPt-r,yPt +r,xPt +r,yPt-r);
redraw;
End;
Run(A);

これは、一度に一個しか描けないし、原点の設定も初心者の私には難しいです。
そこで、一気にデータを読みこんで作図できる方法があると聞いたのですが、どうしたらいいですか?また、Scriptを組む以外にも簡単な方法があるなら 教えて下さい。
お願いします。


Re:Mac環境で...   ゴンスケ
email:
gonsuke@spica.freemail.ne.jp  Tue Jul 17 0:04:26 Japan 2001

みどりかわさん、こんにちは。
ご質問の内容には、隣のVectorWorks談話室が適していますので、返答は
そちらに書き込みます。隣をみてください。
(ここはVectorScriptの談話室です。)
また、半角カタカナはインターネットの中では問題を引き起こす場合があるので、
全角カタカナを使うのが健全です。


Mac環境でエミュレーションソフト使って操作したいのですが   みどりかわ
email:
tunedtyper@nifty.com  Mon Jul 16 18:25:38 Japan 2001

SoftWindowsやVirtualPCを使って、Mac環境上でベクターワークスを使いたいのですが
(Mac版あるのは知っているのですが、互換操作などホントにどしろうとなため)
使用上、遅い以外に落ちるなどのトラブルは多いのでしょうか?


勘違いでした。  KANABUN
email:  Tue Jun 5 17:35:41 Japan 2001

>Set3DRotにはバグがありますが、御存じでしょうか?
石男 さん、トトロ さん、どうもすいませんでした。
私の勘違いだったようです。
確かに正常に動作しています。

どうやら8.0βの時のバグを今まで引きずっていたようです。
これで補正関数を一個はずせます。良かった。


あれ?  KANABUN
email:  Tue Jun 5 15:20:15 Japan 2001

あれ?ほんとですか?
じゃあプラグインオブジェクト内だけかな?

ちょっと再チェックします。
ひょっとしたら8.0βの時のバグかもしれません。

正常に動いているようでしたらそのままで問題ないですよね。


バグ?   石男
email:
sinogaki.stn@nasuinfo.or.jp  Tue Jun 5 13:32:49 Japan 2001

>Set3DRotにはバグがありますが、御存じでしょうか?
原点を変えているのですが・・・、正常に動いているようです。
補正が必要ですか?


 KANABUN
email:  Tue Jun 5 10:13:36 Japan 2001

Set3DRotにはバグがありますが、御存じでしょうか?
それは原点参照がされていないということです。
原点が(0,0)の時は良いのですが、原点位置を変更しているのでしたら、以下の補正が必要です。

{---------------------True_Set3DRot--------------------------}
Procedure True_Set3DRot( h: handle ; a, b, c, d, e, f : real ) ;
var
hosei_x, hosei_y : real ;
begin
GetOrigin( hosei_x, hosei_y );{-----hosei-----}
Set3DRot(LNewObj,a, b, c ,d + hosei_x, e+ hosei_y, f );
end ;


Re^5:Set3DRotの使い方について(自己レス)   トトロ
email:
totoro@badboy.co.jp  Mon Jun 4 15:20:41 Japan 2001

上手くいかない原因がやっと分かったような気がします。
3角関数での角度はラジアンを使うけど、図形操作時の角度はデグリ
だったんですね(^^;...。
石男さんの(h,90,90,90,0,0,0)という書き込みと
「回転させるには?」の 初心者10年目さんと、plugramerさんの
書き込みを見て気がつきました...。
普通どちらかに統一されているものだと思いますが、そういう仕様
なんですね(^^;;...


Re^4:Set3DRotの使い方について   トトロ
email:
totoro@badboy.co.jp  Mon Jun 4 14:53:35 Japan 2001

>追加質問ですが、(h,90,90,90,0,0,0)はx->y->zの順に回転します
またまたありがとうございましたm(_._)m>石男さん


Re^3:Set3DRotの使い方について   石男
email:
sinogaki.stn@nasuinfo.or.jp  Mon Jun 4 14:05:29 Japan 2001

追加質問ですが、(h,90,90,90,0,0,0)はx->y->zの順に回転します。ですから、
これをひとつずつ制御するには、(h,90,0,0,0,0,0)->(h,0,90,0,0,0,0)->
(h,0,0,90,0,0,0)という順に設定します。すると90,90,90と同じことです。

トトロ殿の言われたz->y->xの順で処理すると上とは違う結果になります。
 実はここ2,3日これであたまを悩ましていました・・・。ですから調べてみた次第
です・・・。(^^;;


Re^2:Set3DRotの使い方について   トトロ
email:
totoro@badboy.co.jp  Mon Jun 4 12:34:46 Japan 2001

石男さんありがとうございました。
どうもSet3DRot(h,0.0,0.0,rt,0.0,0.0,0.0);が思ったような
実行結果を出してくれなかったのですが、とりあえずコマンドの
意味の取り違えでないことが確認できて安心しました。
私がこのコマンド以前のところでなにかミスしているんですね(^^;...。

>追加質問は???です。
追加の質問は Set3DRotがx,y,z軸回転を一度に制御できるようですが
たとえば、x軸回転->y軸回転->z軸回転の順番で処理する場合と
z軸回転->y軸回転->x軸回転の順番で処理する場合では結果が違ってくる
はずだという意味でした。実際Set3DRotではどうなんでしょう?ってこと
だったんですが、別に一軸ごと処理してしまえば問題はないです(^^)。

>SetRot3Dって知っています?
存在は知ってますが、リファレンスマニュアル(PDF)を見ると微妙に異なる
解説がされていて私もその違いが理解できません。


Re:Set3DRotの使い方について   石男
email:
sinogaki.stn@nasuinfo.or.jp  Mon Jun 4 8:40:36 Japan 2001

>Set3DRot(h,0.0,0.0,rt,0.0,0.0,0.0);
と書くと、トトロ殿の言われるとおりhハンドルを(0,0,0)を原点を通るz軸周りにRT
だけ回転すると言う意味です。ですから、hの次の3つの数字をがそれぞれのx,y,z
軸に対する回転角度です。
 追加質問は???です。ごめんなさい・・・。
トトロ殿はSetRot3Dって知っています?同じように使うみたいですが、上記と
どう違うのかわたしにはわかりません・・・。ん〜変なレスだ。


Set3DRotの使い方について教えてください。追加   トトロ
email:
totoro@badboy.co.jp  Sun Jun 3 21:49:50 Japan 2001

下の質問の追加です。
x,y,z軸それぞれに3D図形を回転すると、各軸回転の順番によって結果が
異なってくるはずだと思うのですが、どの順番で回転しているのでしょうか?。
たぶん、このProcedureの使い方自体を誤解していて、そこがはっきりすると
意味のない質問になってしまうような気がするのですが...。
すいません質問追加させていただきます。


Set3DRotの使い方について教えてください。   トトロ
email:
totoro@badboy.co.jp  Sun Jun 3 21:35:07 Japan 2001

PROCEDURE Set3DRotの使い方について教えてください。
Set3DRot(h,0.0,0.0,rt,0.0,0.0,0.0);
と書くとハンドルhの3D図形を原点(0,0,0)を通るz軸周りにrt(RAD.)回転する
という意味にはならないのでしょうか?。逆に原点(0,0,0)または任意点(cx,cy,cz)
を通るx,y,z各軸周りに回転するためにはどうしたらよいのでしょうか?。
特に最後の3つの添値の回転軸x,y,z座標という意味が良く理解できないのです。
すいませんがどなたかSet3DRotについてお教えてください。お願いします。


Re:回転させるには?   初心者10年目
email:  Thu May 31 8:39:06 Japan 2001

plugramerさん、ありがとうございます。
(ハンドルネーム、ミスタイプじゃないんですね?)

書き込んでからしまったと思ったんですが、
(x1-x)/(y1-y)じゃないですよね。(Y1-Y)/(X1-X)ですね。

それにしてもラジアンだったんですか。何日もあれこれやって混乱していました。
さっそく試してみます。ありがとうございます。


Re:回転させるには?  plugramer
email:
someda@cwlaputa.com  Thu May 31 1:52:02 Japan 2001

初心者10年目 さん 初めまして。

dX:= (Y1-Y)/(X1-X);
Angle:= Rad2Deg(ArcTan(dX));
Rotate( Angle );

で良いと思います。
因に、XY成分から角度を得る関数はArcTan(アークタンジェント=逆正接)を使用
します。tanは垂直距離/水平距離ですから、ArcTanの引き数も垂直距離/水平距離です。
また、VectorScritの三角関数はラジアン(180度=円周率)表記になって
いますので、Rad2Deg関数で変換するする必要があります。
この辺はマニュアルにも余り触れてないので、分り難いですよね。
私もやり始めた頃随分悩んだ記憶があります。

試しにdx=1になるような設定で実行してみて下さい。45度回転すれば正常という
ことになりますよね。


回転させるには?   初心者10年目
email:  Wed May 30 14:19:57 Japan 2001

いつまでたってもスクリプトがわかりません。教えて下さい。お願いします。

GetPtで拾ったふたつの座標をもとにして、描いた図形を回転させたいのですが、
拾ったふたつの座標のx値の差とy値の差だけからRotateコマンドに角度を打ち込
むために、どうやったらいいのかわかりません。

dx:=(x1-x)/(y1-y)
tan(Angle):=dx

で、Angleがわかればいいんでしょうけれど・・?


Re:寸法位とりと体積スタンプについて  KOSHI
email:  Fri May 11 14:15:35 Japan 2001

playramerさん どうもありがとうございました。

体積スタンプはずばりOKでした。
積算作業等が楽になる予感がしています。

寸法位とりに関しましては(メニュー)(階層)(プラグインコマンド...)
にて数値位とりで対処しようと思います。
ただ問題なのは、ひとつの寸法線を広げたり、縮めたりした時、自動的に数値が
変わらないことです。対処法が分かる方、教えてください


Re:寸法位とりと体積スタンプについて  plugramer
email:
someda@cwlaputa.com  Thu May 10 20:39:18 Japan 2001

失礼しました体積ですので、正しくは
 s:=Num2Str(0,capa); → s:=Num2Str(0,capa/1000000000);
ですね。


Re:寸法位とりと体積スタンプについて  plugramer
email:
someda@cwlaputa.com  Thu May 10 19:19:27 Japan 2001

KOSHIさんへ

寸法線を位とりについては、私の環境では問題有りませんでした。
KOSHIさんの環境、ドキュメント状況などによるのでしょうか?。

体積スタンプについては、簡単な方法として
(メニュー)(階層)(プラグインコマンド...)のガイアログで、
(体積スタンプ)スクリプトの編集画面に入り、25行目にあるコードを

 s:=Num2Str(0,capa); → s:=Num2Str(0,capa/1000000);

 に編集しては如何でしょうか。
 但し、ご質問の単位設定でのみの対応となりますが。
 フレキシブルにするためには、現在の単位設定の情報を返す関数、
 GetUnits(VAR fraction,display:LONGINT;VAR format:INTEGER;VAR upi:REAL;VAR
name,squareName:STRING);
 で「upi」の数値を基に換算式を加えることになるかと思います。


RE:文字のフォント・サイズを変換   小太郎
email:  Thu May 10 13:41:37 Japan 2001

jumonziさん、ご返答ありがとうございました。

Re:で頂いた内容をいろいろ考察していたらお礼が遅れてしまいました。すみません。
WHILEループ文を使用して、ここがこれで、あれがあれ?ぐるぐるグルグル・・・・
とやっているうちにようやく理解出来まして、とても参考になりました。
フォントの番号取得はGetFontIDという手続きがありましたので、それで対応しました。
また何かありましたらHelpCallさせて頂きたいと思っております。
本当にありがとうございました。


寸法位とりと体積スタンプについて  KOSHI
email:  Thu May 10 13:26:54 Japan 2001

岩手県からの2つの質問です。

寸法線を位とりするとへんな値になってしまいます。
何度か実行すると正常な値になったりします。

体積スタンプは正常に動作していますが、単位を・に変換したいのです。
どうしたらよいでしょうか?(メニュー)(画面)(単位選択)ではミリメートル
のままで作業したいです。

以上2つの事項でVectorScript熟知のみなさん、御指導よろしくお願いします。


Re:シンボルの置換について    omu
email:
omu@orion.ocn.ne.jp  Tue May 8 10:16:48 Japan 2001

すばやい解答ありがとうございます。
早速、試してみます。

また、いろいろとご相談に乗っていただくことが
あると思いますが、どうぞよろしくお願いいたします。


Re:シンボルの置換について  plugramer
email:
someda@monolith-aaa.co.jp  Mon May 7 18:37:25 Japan 2001

omuさん、はじめまして。
こんな考え方で如何でしょう。試してみて下さい。

PROCEDURE OKIKAE_Symbol;
VAR
RepraceFlag: BOOLEAN;

PROCEDURE Reprace_Symbol01( TargetSymH: HANDLE );
BEGIN
SetHDef(TargetSymH, GetObject('Symbol#3'));
RepraceFlag:= TRUE;
END;

PROCEDURE Reprace_Symbol02( TargetSymH: HANDLE );
BEGIN
SetHDef(TargetSymH, GetObject('Symbol#4'));
END;

BEGIN{0000}
RepraceFlag:= FALSE;
ForEachObject( Reprace_Symbol01,(S='Symbol#1'));
IF RepraceFlag THEN ForEachObject( Reprace_Symbol02,(S='Symbol#2'));
END;{0000}

RUN(OKIKAE_Symbol);


Re:シンボルの置換について    omu
email:
omu@orion.ocn.ne.jp  Mon May 7 10:49:26 Japan 2001

すみません。
書き込み間違いがありました

AのシンボルをCのシンボルに置換したときに、自動的にBのシンボルがDのシンボルに
置き換わるなんてことできます?

です。


シンボルの置換について  omu
email:
omu@orion.ocn.ne.jp  Mon May 7 10:44:30 Japan 2001

はじめして。
まだ会員登録はしてないのですが、栃木県在住の僕は会員に登録してもいいのですか?
それはさておき
シンボルの置換についてお聞きしたいんですが。

たとえば、A,B,C,Dという4つのシンボルがあると仮定します。

AのシンボルをCのシンボルに置換したときに、自動的にCのシンボルがDのシンボルに
置き換わるなんてことできます?

vectorscript初心者でいろいろと試してはみましたが
たとえば変数を用いてやってみたりとか、if構文をつかってみたりとか。

も〜頭の中がしっちゃかめっちゃかです。
お知恵を拝借したく書き込ませていただきました。
よろしくお願いします。


RE:文字のフォント・サイズを変換  Jumonzi
email:
maruo66@hotmail.com  Fri May 4 2:05:22 Japan 2001

はじめまして小太郎さん。Jumonziといいます。
いつもROMばかりですみません。

文字列一括変換のスクリプトを書いてみました。お試しください。
下記の「文字一括変換サブルーチン」のCONSTの項目を小太郎さんの使い勝手に合わせて
書換えて下さい。もし、フォント番号とか分からなければ、http://www.egroups.co.jp/group/vwdl でユーティリティー をダウンロードしていただければ分かると思います。(e-グループでアカウント作らなければログインできないですけど)

何か質問ありましたら、メール下さい。 maruo66@hotmail.com

PROCEDURE ChengeText;

VAR
layH,objH:HANDLE;{レイヤハンドル,図形ハンドル}
objType:INTEGER;{図形タイプ}

{--------------文字属性変換サブルーチン------------}
PROCEDURE Exchenge(texH:HANDLE);
CONST
TextSize=9;{文字の大きさ}
FontNum=1;{フォントの番号}
ClassName='Text';{書込みクラス名}
VAR
TextLen:INTEGER;
BEGIN
TextLen:=GetTextLength(texH);
SetTextFont(texH,0,TextLen,FontNum);
SetTextSize(texH,0,TextLen,TextSize);
SetClass(texH,ClassName);
END;


{------------------------------------MAIN--------------------------------------}
BEGIN
layH:=FLayer;

WHILE layH <> NIL DO
BEGIN
objH:=FInLayer(layH);

WHILE objH <> NIL DO
BEGIN
objType:=GetType(objH);
IF objType=10 THEN
BEGIN
Exchenge(objH);
END;

objH:=NextObj(objH);
END;

layH:=NextLayer(layH);
END;
END;
RUN(ChengeText);





文字のフォント・サイズを変換   小太郎
email:  Wed Apr 18 15:26:14 Japan 2001

初めて書き込みさせて頂きます、小太郎と申します。

初めての書き込みで質問というのも何なのですが、どなたか助けて頂けたら幸いです。

状況は・・
1.既にクラス分けされている2D平面図のDXFデータを取り込みます。
2.文字列のクラス(****)があります。
3.その文字列クラスの全て、もしくはドキュメントの全ての文字列をあるフォント、サイズにメニューコマンド一発変換したい。
という内容です。

VectorScript(というかVW機能全般について)はスーパー初心者なので、上記が出来るのか否かすらよくわかっておりません。もし出来るのであ れば、易しくご教示頂ければありがたいです。宜しくお願い致します。

PS.ネット上の書き込みも生まれて初めてなので、不慣れな文章ですみません。


図形を等間隔に   クリエイト
email:
y-saito@create-sd.co.jp  Mon Apr 16 14:42:12 Japan 2001

kazuさん上方の陰陽師さん貴重な情報をありがとうございました
私の説明が不足していてご迷惑をおかけしました。
配列複製では同じ図形を等間隔にするとき使っていますが
困るのは異なる大きさの図形と図形の間の距離を等間隔にしたい時です。
もしいい解決方法がありましたらお教え下さい。


RE: 図形を等間隔に  Kazu
email:
t-kazu@ka2.so-net.ne.jp  Fri Apr 13 11:09:36 Japan 2001

> 決まった幅の中で図形を等間隔に配列すること

オブジェクトを均等配置する機能はScriptで作って使ってます。
均等に配置する基準はオブジェクトの中心の座標にしているため、
大きさの違うオブジェクトを均等に配置すると、オブジェクトと
オブジェクトの間隔は不揃いになります(^^;)。

垂直方向の均等配置

Procedure VJUSTIFY;
Var
h,t:HANDLE;
x,y,bottom,top,max,off:REAL;
begin
if NumSObj(ActLayer)>1 then
begin
h:=FSActLayer;
HCenter(h,x,bottom);
top:=bottom;
while h<>Nil do
begin
HCenter(h,x,y);
if bottom>y then
bottom:=y;
if top<=y then
top:=y;
h:=NextSObj(h);
end;
off:=(top-bottom)/(NumSObj(ActLayer)-1);
while NumSObj(ActLayer)>0 do
begin
t:=NIL;
h:=FSActlayer;
HCenter(h,x,max);
while h<>Nil do
begin
HCenter(h,x,y);
if y<=max then
begin
max:=y;
t:=h;
end;
h:=NextSObj(h);
end;
if t<>NIL then
begin
HCenter(t,x,y);
HMove(t,0,bottom-y);
SetDSelect(t);
bottom:=bottom+off;
end;
end;
end;
end;
Run(VJUSTIFY);

水平方向の均等配置も、上記Scriptを改造すればすぐできるかと
思います。使ってみてください。


VectorWorksでのバッチ処理   あき
email:  Thu Apr 12 20:02:21 Japan 2001

はじめまして あきと申します。
現在VectorWorks8.5にてCADデータのバッチ変換ができないかな〜とおもって
色々調べています。
具体的にはDXF取り込み→MCD保存を連続で行いたいのですがその方法がわからず
困っています。
DoMenuTextByName関数を使えばとりあえずできるような気はしたのですが
どうもうまくいきません。
どなたか似たような事などを実線したかたおられますか?
もしおられるのでしたらサンプルなどを見せていただきたいのですが・・・


あき
PowerPC G3 (B&W)
MacOS8.6
VectorWorks8.5J3PPC


RE: 線間の距離の計測について   上方の陰陽師
email:
hagimori@daiken.co.jp  Tue Apr 10 21:06:57 Japan 2001

陰陽師です。

>マクロを使ってその2つの線間の距離を計測したいのです
>又その距離を自動でワークシートに取り込みたいのです。

距離を計測するためには計測する2点の座標を記述しなければなりません。
線分の始点や終点を取得する関数もあるのですが、ここではクリックした
2点間の距離を計測してワークシートに書き出す仕様としてみました。
ただし、Scriptを2回以上実行すると、おなじ名前のワークシートができ
ることになるので、Warningがでます。
VectorWorksのワークシート自体、結構バグが残っているので、Scriptで
は使いにくいかもしれません。

Procedure GetDistance;
var
x1,y1,x2,y2,L : Real;
Str : String;
begin
SetConstrain('Q W');
GetPt(x1,y1);
GetPtL(x1,y1,x2,y2);
L := Distance(x1,y1,x2,y2);
Str := Num2StrF(L);
NewSprdSheet('2点間の距離',0,0,2,2,False,True);
TextSize(12);
LoadCell(1,1,Str);
end;
Run(GetDistance);

ではまた。


RE: 図形を等間隔に   上方の陰陽師
email:
hagimori@daiken.co.jp  Tue Apr 10 20:38:36 Japan 2001

陰陽師です。

>決まった幅の中で図形を等間隔に配列することはできないものでしょうか?
>scriptでできるものなのでしょうか?

配列複製のコマンドではだめなのでしょうか?
通常の場合は充分使えるコマンドだと思うのですが...

Scriptで実現する場合には、以下のコードが参考になれば使ってみてください。
少し変更すれば、ご希望のScriptができあがるかも知れません。

最初に複製をつくりたい元図形を選択状態にしておきます。
Scriptを実行すると整数ダイアログが表示されますので、配置したい図形の数量
を入力します。
次に、すでに配置されている元図形の中心をクリック、続いて任意の方向、距離
で2点目をクリックしてください。
1点目と2点目のあいだに等間隔に図形の複製が並ぶはずです。

Procedure SetArrayObject;
var
h : Handle;
x1,y1,x2,y2,Width,Hight,
WDist,HDist : Real;
i,Num : Integer;

procedure SamePtAlrt;
begin
AlrtDialog('
1点目と2点目が同じ場所です');
end;

procedure SelectedAlrt;
begin
AlrtDialog('
図形を選択してください');
end;

begin
h := FSActLayer;
if h <> nil then
begin
i := 0;
SetConstrain('Q W');
Num := IntDialog('
配置数量を入力してください','0');
if Not DidCancel then
begin
GetPt(x1,y1);
GetPtL(x1,y1,x2,y2);
WDist := x2-x1;
HDist := y2-y1;
if (WDist<>0) | (HDist<>0) then
begin
for i := 0 to Num -1 do
Duplicate(WDist/Num,HDist/Num);
end else
SamePtAlrt;
end;
end else
SelectedAlrt;
ReDrawAll;
end;
Run(SetArrayObject);

ではまた。


例えば  KANABUN
email:  Mon Apr 9 20:43:55 Japan 2001

>図形を等間隔に
これは簡単なものはscriptで作る事が出来ますよ。

>線間の距離の計測
線分のどの部分の間を計るのかによりますが、2つの座標間の距離はdistance()を使うと簡単に計測できます。


線間の距離の計測について   黒
email:
kurosawa@pa2.so-net.ne.jp  Sun Apr 8 1:07:18 Japan 2001

初めまして
整形外科の初心者です
人工関節にワイヤーがついていまして
フォトショップで取り込み2つの線のあいだの距離を計測したいのです。
2つの線をマクロで選択することは、可能となりましたが
マクロを使ってその2つの線間の距離を計測したいのです
どなたか御教示を御願い申し上げます。
又その距離を自動でワークシートに取り込みたいのです。


図形を等間隔に   クリエイト
email:
y-saito@create-sd.co.jp  Sat Apr 7 14:52:12 Japan 2001

はじめまして
現在店舗の設計をしています。ベクターワークスを使っていて
この機能があったら便利だなと思うことが一つあります。
それは什器のレイアウトをするときに
決まった幅の中で図形を等間隔に配列することはできないものでしょうか?
scriptでできるものなのでしょうか?
どなたかご存じでしたら教えて下さい。


お送り致しました。  KNANBUN
email:  Sat Mar 31 20:57:50 Japan 2001

本日、行列変換マクロをお送り致しました。
御参考下さい!
それから、HPリニューアルの宣伝ですが、これは喫茶室の方で。


RE:行列変換マクロ   管理人
email:
aoyama@hokkai.or.jp  Fri Mar 30 17:35:13 Japan 2001

>来週あたりにメール致します。
ありがとうございます。わくわくでございます。

>この間のチョコ、妻がとても気に入ってしまい、ネットで
>10箱も注文してました。(^^;)
な、な、んと。

>六花亭って有名らしいですね。どうも私はそういうの疎くって。
管理人はミーハーなのです。
でも、北海道では知らぬ者なしのお菓子屋さんです。
たしか千秋庵からどうとやら、トトロ殿がここを見たら喫茶室で語るかもです。

>小川軒も知りませんでした。
管理人はミーハーなのです。
黒板当番さんのおかげで念願のハヤシライスが頂けてハッピー!
なんか、管理人はタイトル以外は喫茶室の話題ですね、あちらへも来て下さい。
駒形どぜうの話もしたいしー。


RE:行列変換マクロ  KANABUN
email:  Fri Mar 30 10:27:34 Japan 2001

管理人さま、了解しました。
来週あたりにメール致します。

この間のチョコ、妻がとても気に入ってしまい、ネットで
10箱も注文してました。(^^;)
六花亭って有名らしいですね。どうも私はそういうの疎くって。
小川軒も知りませんでした。


RE:行列変換マクロ   管理人
email:
aoyama@hokkai.or.jp  Fri Mar 30 0:00:23 Japan 2001

どもども、その節はサインをありがとうございました。

今回はまた、ご多忙中にありがとうございます。

ええと、まずは管理人宛にメールで送って下さいますか?

で、管理人が理解できないところを教えていただき、

しかるのち、偉そうにして管理人がアップしたく存じますです。

管理人の野望のひとつは、このScript談話室にコードをアップすることでして、

開設以来いまだ果たせずにいます。

もちろん作者名はKANABUN会員と明記し、隣に発注者は管理人と大きく書きます。




行列変換マクロ KANABUN

どうも、御無沙汰です。

もうすぐお土産御礼行列変換マクロが完成します。(^^)

来週あたりですが、コードはここへアップしましょうか?

それともメールでお送り致しましょうか?



RE:バッチジョブで印刷したい  uglydac
こんにちは。

windows Scriptingなるものがありまして、

これでできるのではないかと思います。

AppleScriptのプレファブプレーヤと同等のことができるのですが、

下記のURLへいってみてください。

http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

情報のひとつとして。



RE:バッチジョブで印刷したい plugramer someda@cwlaputa.com
おおたに さんはじめまして。

バッチ処理(xx.bat)ということは、独立した単体のアプリケーションですよね?

私の知る限りでは、難しいと思います。

というのは、VectorWorks を制御出来る方法としては、VectorScrit と SDK で

作るプラグイン形式のダイナミックリンクライブラリ(xx.dll) (Macではコード

リソース)が用意されているのみで、その他にはMacでAppleScriptが利用出来る

くらいです。

Windows で Mac の AppleScript に相当するものがあるかどうか、不勉強で知識

がありません。

VectorScrit と DLL でプリントコマンドは実行出来ますが、印刷設定ダイアロ

グにユーザーのアクションを要求される為、連続実行が出来ません。

Macのユーティリティーソフトでは、ダイアログ応答をエミュレートするソフト

が存在します。このソフトとの組合わせでは、可能だと思いますが。

(自分で動作確認した訳ではありません)

東京クラブ会員のクマさんは、このことに関して明るいです。

同じく江戸の黒板当番さんは、出力デーた形式に関して明るいです。

 


RE:RE:バッチジョブで印刷したい おおたに s77337@so.tateyama.co.jp
システムの環境としてWin2000を使用しVectorWorksの8.0.1を使用しております。

教えて頂きたい内容は、バッチ処理(xx.bat)にて自動的にCAD図面(MCD形式データ)をPDF形式とJPEG形式にて自動で出力したいの ですがこんな事は、可能でしょうか?。実現する方法があれば教えて頂きたいのですが。ちなみに出力の元ファイルをパラメタにて与えられると非常にうれしい のですが・・・。


RE:バッチジョブで印刷したい 管理人 aoyama@hokkai.or.jp

おおたにさん、こんにちは。

かなりお困りの様子で、できることならヒントなりと思いますが、

いかんせん、もう少し具体的な情報がないと、なんとも。

長くなっても構いませんから、マシン環境、VectorWorksのバージョン、

ファイルの内容(図面ではないですよね)、印刷まで行かないのか品質の問題か、

どんなイメージファイルにしたいのか、その他、思いつくことをお知らせ下さい。

あれ、サンプル? ひょっとして作図方法の話ですか?


バッチジョブで印刷したい おおたに U77337@so.tateyama.co.jp

おおたにと申します、始めまして。

実は、バッチジョブにて(*.mcd)データを印刷と、取り出し(イメージファイル出力)したいのですが、どうにもこうにも煮詰まっています。

誰か助けてください。

サンプルでも有ったら、見せてください。トホホ!!!


Re:メッセージの文字化け Someda someda@cwlaputa.comやべさん

私の環境では、英語モードでもこのコードで日本語フォントを指定して実行すると、自動的に日本語入力モードになり日本語で表示されます。

逆に日本語入力モードでも英語フォントを指定して実行すると、自動的に英語入力モードになり文字化けします。

ScriptLock 関係してるかも知れませんね。

&gt;入力モードを強制的に切り替える関数って無いんですよね。OSの問題ですよね。

これはOSの問題なので、VectorScriptでは難しいでしょう。

AppleScript で出来れば好いですけどね。

あとはSDKでの対応になってしまいますね。


Re:メッセージの文字化け やべ yabe@ff.iij4u.or.jp

plugramerさん ありがとうございます。

Resのコード、試してみました。

どうも日本語入力モードと英語モードの時で挙動が違うようです。

日本語入力モードの時にはちゃんと日本語を表示できましたが、

英語モードの時には化けてしまいます。

僕のMacにはScriptLockというユーティリティが入っているのですが

それも何か関係あるのかも知れませんが...。

ClrMessage;は入れたほうがよいようです。無いと入力モードを切り替えて再実行した場合に表示がリフレッシュしてくれませんでした。

入力モードを強制的に切り替える関数って無いんですよね。OSの問題ですよね。


Re:メッセージの文字化け plugramer someda@cwlaputa.com

やべさんこんにちは。

DoMenuTextByName(subMenu:STRING; index:INTEGER);関数である程度対応出来る

かと思います。

フォントメニューで必要なフォント設定にしてしまうことを、スクリプトで実行

する訳です。

試しに下のコードを走らせてみましたら、私のMacでは旨くいきました。

DoMenuTextByName('Font', n); {n=日本語フォントのポジション}

ClrMessage;

Message('日本語表示出来ますか');

ClrMessage;を入れたのは、メッセージバーが表示状態のまま、再実行した場合

確実に表示する為で、普通には必要無いかも知れません。


Macintoshを使っているのですがScriptでメッセージを表示させたときに

日本語が化けるんです。時々うまくいくのですが確実に日本語を表示させるにはどうしたらいいのでしょうか?

yabe@ff.iij4u.or.jp

メッセージの文字化け

やべ


plugramer会員、ありがとうございます。

これぞ、管理人の夢、一行Scriptのお手本ですね。

メッセージを表示する、カウントする、対象は色々、選択図形の指定、

どの部分も応用の余地がいっぱいで、これを足がかりにScriptに踏み込めます。

Scriptに挑戦したいという方は、ぜひ、お試しください。

このプログラムを、どのように入力するのか、また、実行するのかは、

バックナンバーに親切な手順解説があります。

検索条件式をコピーペーストで得るアドバイスは素晴らしい!

きっと他にも秘術をたくさんお持ちなのでしょうね。

おいおいとご紹介下さい。

aoyama@hokkai.or.jp

Re:図形の数

管理人


taniさん、こんにちは。

下の一行をスクリプトで走らせてみて下さい。

Message(Concat('選択図形数:', Num2Str(0, Count(((T=Poly)|(T=Rect)) & (V) & (SEL=TRUE)))));

Procedure も Begin も End も Run も必要ありません。

やっていることは、検索条件に合致した図形数をカウントして、文字列に変換し

表示用文字列と合成して、メッセージバーに表示しています。

条件式を taniさんの希望の内容に修正すれば、使えるかと思います。

因に、ここで設定した選択条件は、

  ・図形タイプ:多角形または四角形

  ・表示:表示中

  ・選択:選択中           です。

検索条件式は、図形選択メニューコマンドの設定ダイアログで、

「オプション-&gt;コマンドを作成」ラジオボタンをオンにして生成したものを、

コピーペースト出来ます。

Re:図形の数

plugramer



初歩的な質問ですみません。

すでにある複数の図形をカウントしたいのですが、

カウントしたい図形のみを複数選択することはできます。

数が多いのでスタンプするのも大変です。

どうしたらいいんでしょうか?

lap14tar@mbox.nc.kyushu-u.ac.jp

図形の数

tani


やべ さん、こんにちわ。

&gt;陰陽師さんの「クリック線幅変更マクロ」と、もうひとつ「選択図形の線幅変更マクロ」を

&gt;組み合わせたツールにできたらいいですね。

私のマクロという訳ではありません。あくまで、皆さんのマクロを少し変更しただけに

すぎません。ただ、コードの表現については、私なりのこだわりで書換えてあります。

(^o^)

マクロを組合わせるのは簡単ですが、「グループに入る」の状態では使えなくなります。

すなわち、マクロを組合わせた場合、もととなるグループ図形が選択されている訳です

から、「グループに入る」の状態で、何も選択されていないように見えても、選択図形

に対するコマンドが実行されることになります。

下記のコードで試してみてください。( MiniCad7以前の環境では正常に動作しません)

Procedure SetLineWeight;

const

LW = 30;

var

ObjH : Handle;

x,y : Real;

procedure ChangeGroupLW(h:Handle);

begin

h := FInGroup(h);

While h &lt;&gt; nil do

begin

if GetType(h) &lt;&gt; 11 then

SetLW(h,LW)

else

ChangeGroupLW(h);

if Selected(h) then

h := NextSObj(h)

else

h := NextObj(h)

end;

end;

procedure SelectedCase;

begin

While ObjH &lt;&gt; nil do

begin

if GetType(ObjH) &lt;&gt; 11 then

SetLW(ObjH,LW)

else

ChangeGroupLW(ObjH);

ObjH := NextSObj(ObjH);

RedrawAll;

end;

end;

procedure UnSelectedCase;

begin

Repeat

Getpt(x,y);

ObjH := PickObject(x,y);

if ObjH &lt;&gt; nil then

begin

if GetType(ObjH) &lt;&gt; 11 then

SetLW(ObjH,LW)

else

ChangeGroupLW(ObjH);

RedrawAll;

end;

Until ObjH = nil;

end;

begin

ObjH := FSActLayer;

if ObjH &lt;&gt; nil then

SelectedCase

else

UnSelectedCase;

end;

Run(SetLineWeight);

このようなマクロツールは、単純、手軽なものほど使い易いのではないでしょうか?

[ Simple is best ] です。

では、また。

hagimori@daiken.co.jp

Re:線幅を変更するコマンド

上方の陰陽師


上方の陰陽師さんほんとにありがとうございます。

ただ、少しわがままを言わせていただくと、

陰陽師さんの「クリック線幅変更マクロ」と、もうひとつ「選択図形の線幅変更マクロ」を組み合わせたツールにできたらいいですね。 つまり選択図形 がないときは

クリックしに行って、ある時には直接線幅を変更するようにできたら

贅沢なツールになると思うんですけど、どうでしょうか?。

すいません。生意気いって...。ただ、理想を追求するのがScriptの本質だと思うんでつい....。

yabe@ff.iij4u.or.jp

Re:線幅を変更するコマンド

やべ


追記です。

下記プログラムの動作は、VectorWorks8.52上で確認いたしました。

ただし、MiniCad7以前の環境では、正常に動作しませんので悪しからず。

以上です。

hagimori@daiken.co.jp

Re:線幅を変更するコマンド

上方の陰陽師


やべ さん、こんにちわ。 陰陽師です。

&gt;このあいだの線幅の問題、まだ解決しないんです。

&gt;いかなる状況でも画面上で選択されている図形のみを線幅変更する

&gt;コマンドにしたいのです。

&gt;グループの中に居る時、うまく行かないんです。

発想の転換をしてみてください。

グループの中に居るということは、もととなるグループ図形が選択されていることに

なりますね。h:=FSActLayer;でアクティブなレイヤー上で選択された図形、FInGroup(objHd);でグループ内のもっとも上 位の図形へのハンドル接続がされているわけです

から、グループの中に居るとき、このグループ内でもっとも上位の図形が選択されてい

なくとも、どうしても線幅が変更されてしまうのではないのでしょうか?

選択されている図形の線幅を変更するのではなく、マウスクリックにより指定した図形

の線幅を変更するというふうに、発想の転換をしてみてはどうでしょうか?

{********************* ここから ************************}

Procedure SetLineWeight;

const

LW = 30;

var

ObjH : Handle;

x,y : Real;

procedure ChangeLW(h:Handle);

begin

h := FInGroup(h);

While h &lt;&gt; nil do

begin

if GetType(h) &lt;&gt; 11 then

SetLW(h,LW)

else

ChangeLW(h);

h := NextObj(h);

end;

end;

begin

Repeat

Getpt(x,y);

ObjH := PickObject(x,y);

if ObjH &lt;&gt; nil then

begin

if GetType(ObjH) &lt;&gt; 11 then

SetLW(ObjH,LW)

else

ChangeLW(ObjH);

end;

RedrawAll;

Until ObjH = nil;

end;

Run(SetLineWeight);

{********************* ここまで ************************}

再帰の部分は、ForEachObject(h,Condition)で記述したいところですが、グループの

第2ノードあたりのハンドル接続で、何故か Warning がでるようです。

では、また。

hagimori@daiken.co.jp

Re:線幅を変更するコマンド

上方の陰陽師


このあいだの線幅の問題、まだ解決しないんです。

そもそも線幅変更マクロを作ろうとしたのは、MiniCADファイルが線幅設定を

保存しないからです。

ウチの部署にはパソコンが2台しかないので、"満席"だと、

空いている他の部署の他人のパソコンにデータを持っていって

作業するっていう状況がしばしば起こるのですが、

このとき他人のパソコンは、大抵その人の好みの

設定になっているので、とくに線幅設定はよく使うだけに大変面倒なのです。

だから、マクロに求めているのは、「属性パレットと同じことをダブルクリック一発で

できる」ということなのです。

みなさんはこういうこと考えたことありません?

そして作ってみた人いませんか?それともどこかのユーザークラブで完璧なの公開されていませんか?

yabe@ff.iij4u.or.jp

Re:線幅を変更するコマンド

やべ



plugramerさん、重ね重ねありがとうございます。

以下長文です。申し訳ありません。。。。

&gt; ななかの力作ですね

いえいえ、今まで数年かけて作った単純なコマンドをGOTOでつなげて、

ダイアログを統一してツールにしただけです。ジャロジーは少し頭つかいましたが・・・

&gt; 改良点と言えるか分かりませんが..........

&gt; CASE分を使うと効果的です。(中略)

また入門書、Language Guideを参考にしながら精進してみます。

やはり、実行速度に影響してくるのでしょうか?

VectorScriptになってから大分反応が早くなったような気がしたので

そのまま使い続けているのですが・・・

「線色→太さ変換ツール」の「For‐ To 文」型式化は、

自分専用に適当に作った奴なので、今回全面変更は見送り、このままにしておきますが、

今後の為の勉強として少しだけいじってみるつもりです。

使ったことないんです。[For to]・・・

ところで、

&gt;「3D建具シンボル作成ツール」は、行く行くはパラメトリックに進化して

&gt;行くのでしょうね.....?

とは、どういった進化でしょうか?私としては十分パラメトリックしてるんですが・・・

やはり、GetRectで四角形を描くとそれが建具に変身する奴でしょうか?

以前、それぞれのスクリプトがコマンドで独立していた時に、建具表を下敷きにして

建具の絵を上からなぞると、シンボルができるようにしたことがありますが、

私のスキル不足故、建具の取り付け高さをダイアログで入力する必要があり、

操作の曖昧さから、全てダイアログで数値入力の方が結局作業がスムーズであると

判断しました。

#少し嘘です。自分で使う場合、建具表の作成よりも、3Dモデリングの作業的に

 先だったことが主な理由でした。

今なら

一度基準の点FL=0をクリックでGetPtし、建具表をGetRectでなぞってから建具タイプを

選ばせるダイアログを表示させるなど、操作面での解決方は想像できます。

パース屋さんならこちらの方が有効かもしれませんね。

このツールを使ってくれているパース屋さんがいるので意見聞いてみます。

めざせ!シェウェア化!!

itoh@kurumado.co.jp

Re:カスタムダイアログでポップアップメニュー  

Be-plot


Be-plot さん、お役に立てたようですね。

&gt;よろしければ感想、改良点など教えてくれれば幸いです。

早速ダウンロードして拝見させていただきました。

ななかの力作ですね。

「3D建具シンボル作成ツール」は、行く行くはパラメトリックに進化して

行くのでしょうね.....?

ここまで完成度高いと、欲が出ませんか?

それは別にして、建具など建築細部のモデリングは面倒なので、重宝しますね。

改良点と言えるか分かりませんが..........

IF ItemSel(7) THEN

objectType:=2;

IF ItemSel(8) THEN

objectType:=3;

&gt;

&gt;

IF ItemSel(11) THEN

objectType:=6;

のような、同じパラメータの変化で結果の違い導き出すようなケースでは

CASE分を使うと効果的です。

CASE 整数値 OF

CASE ラベル: 実行文;

CASE ラベル: 実行文;

CASE ラベル: 実行文;

CASE ラベル: 実行文;

OTHERWISE 実行文;

END;

こちらの方が思考的に理解し易い(私的にかもしれませんが)パターンに

なります。プログラム的には、無駄な論理演算省略によりレスポンスが改善

されます。

IF objectType=1 THEN

GOTO 1;

&gt;

&gt;

IF objectType=5 THEN

GOTO 5;

のパターンでも同様ですが、この後の

1:

&gt;

&gt;

GOTO 7;

2:

&gt;

&gt;

GOTO 7;

の「GOTO」による制御はなるべくなら避けた方が良いと思います。

「VectorScript Language Guide」等も参考にしてみて下さい。

「線色→太さ変換ツール」の

begin

DSelectAll;

SelectObj((PF=255));

objH:=FSActLayer;

WHILE objH&lt;&gt;NIL DO

BEGIN

SetLW(objH,pn1);

objH:=NextSobj(objH);

END;

end;

の型式の繰り返しは、「PF」をパラメータにした「For‐ To 文」型式に

改良すると、プログラムがスッキリ簡略化出来ますし、明解になりそう

に思います。

あくまで私の個人的な指向なので余り気にしないで下さい。

思い通りに動作していて、スッキリ理解出来ていればそれが一番かと....。

私の場合は、メンテが楽なようにと後々理解し易い構造になっていることや

使い回しが効くような構造になるよう工夫しています。 

someda@monolith-aaa.co.jp

Re:カスタムダイアログでポップアップメニュー

plugramer


お世話になってます。

さきほどのツールのスクリプトに間違いがありました。

スクリプト前半の

IF objectType=5 THEN

GOTO 5;

の後に

IF objectType=6 THEN

GOTO 6;

が抜けていました。

これがなくてもエラーは出ませんが、エンジンドアが作成できません。

objectType=1 となり、FIX窓が作成されてしまいます。

仕事の合間見て、今日中に修正版をアップしておきますが、

まだいつになるかわかりません。

ちなみに、今のところ「開放した建具を作成」は「ドア」でしか機能しません。

開いた引き違い窓を作成する必要性が私にはないので・・・

itoh@kurumado.co.jp

3D建具シンボル作成ツールの訂正

Be-plot



plugramerさん、ありがとうございました。

なにか全然勘違いしていたみたいですね(^^;)

今まで、ラジオボタンで選んでいた項目を、

ダイアログの画面サイズを小さくするためにポップアップに変えようと思ったのですが、

「ダイアログが終了してませんぜ」って叱られてばかりで、

どうしたものかと悩んでいたんです。

Pascalの達人に訊いても「Delphiなら一発だぜ!」としか教えてくれないし・・・

おかげさまで、

EndDialog;

GetDialog(1);

InsertChoice(40,1,'glass-toumei');

InsertChoice(40,2,'glass-kata');

InsertChoice(40,3,'glass-suri');

とすることで無事ポップアップを使うことができました。

ありがとうございます。

0〜50しか使えないItemIDの節約にもなって一石二鳥ですね♪

思わぬ副産物です。

エラーの出ない今の状態が、

http://www.kurumado.co.jp/vectorscript/

に置いてあるので、汚いスクリプト(VST)ですが、

よろしければ感想、改良点など教えてくれれば幸いです。

入っているのは

3D建具シンボル作成ツール ポップアップメニュー使用(^^)y と

線色→太さ変換ツールです。

MiniCad7の頃はこれでだいぶモデリング時間を短縮できて、ご満悦のツールでした。

今は、標準ツールとしてもっと高機能なのが搭載されていますがね。。。

itoh@kurumado.co.jp

Re:カスタムダイアログでポップアップメニュー

Be-plot


Be-plot さん、はじめまして。

&gt;AddChoiceItem('',3,1,x1,y1,x2,y2);

&gt;InsertChoice(4,3,'***-01');

&gt;InsertChoice(5,4,'***-02');

&gt;InsertChoice(6,5,'***-03');

スクリプトの全容が分からないので、外しているかも知れませんが、

InsertChoice 関数のコードを、ダイアログ定義サブルーティンで記述している

からではないでしょうか?

AddChoiceItem 関数の直後に記述することは無いと思います。

InsertChoice 関数は、定義済みのダイアログの駆動(立上&応答&読出)サブルーティン

で記述する必要があります。

ダイアログ定義サブルーティンでは、ダイアログの格好だけを定義し、追加する

メニュー項目の定義や、ポップアップ選択後の情報取り出しなど、ダイアログ

インターフェースの全ての応答の仕様は、ダイアログ駆動サブルーティンで記述し

ます。

もしそうでないようでしたら、もう少し詳しく状況をコメントして下さい。

someda@monolith-aaa.co.jp

Re:カスタムダイアログでポップアップメニュー

plugramer



はじめまして。

以前作成したscriptをちょっと改造してるんですが、

カスタムダイアログでポップアップメニューの使い方がよくわかりません。

大河内+中野さんの本を参考に、

BeginDialog(1,1,dx1,dy1,dx2,dy2);

SetTitle('****');

AddChoiceItem('',3,1,x1,y1,x2,y2);

InsertChoice(4,3,'***-01');

InsertChoice(5,4,'***-02');

InsertChoice(6,5,'***-03');

AddButton('シンボル作成',1,1,205,390,350,410);

AddButton('キャンセル',2,1,50,390,195,410);

EndDialog;

とか、いろいろやってみたのですが、全て

Error: ProgramName INSERTCHOICE - Dialog does not exist.

となってしまいます。

どなたか使い方を御教授ください

カスタムダイアログでポップアップメニュー

Be-plot


やべさん

&gt;プロシージャが自分自身を呼び出せるってことですか?

ええそうです。再帰ルーチンと呼んでますね。

&gt;その時同時に、"グループの中のグループ図形"も意図せず変更されてしまうんです。

&gt;いかなる状況でも画面上で選択されている図形のみをの「図形のみを」とは

グループやシンボルは含まないということでしょうか?

「画面上で選択されている図形のみ」とは、任意のグループ内を表示している状態

で、そのグループの中のグループやシンボル意外で選択されている図形ということ

でしょうか?

そのグループ外で選択されている図形やグループ等は編集対象でないと........。

もしそうでしたら、編集対象となっているそのグループを特定する方法を考えなく

てはなりませんね。

編集対象となっているそのグループのみが、対象レイヤ上で唯一選択されている状態

であれば、サブルーチン内での条件分けのみで解決出来ますからね。

someda@monolith-aaa.co.jp

Re:線幅を変更するコマンド

plugramer


plugramerさんありがとうございます。やべです。

プロシージャが自分自身を呼び出せるってことですか?

あと僕としては30行目に"ELSE SetLW(h,LW);"を追加して使いたいのですが、

このコードをいろいろな状況で試してみると、まだ完璧じゃないみたいなんです。

グループの中に居る時、うまく行かないんです。

グループの中に居る状況で、画面上で選択されている図形が

いくつかあるとして、グル−プではない図形は任意に変更できましたが、その時同時に、

"グループの中のグループ図形"も意図せず変更されてしまうんです。

その今居る大外のグループが選択されていることになっているからだと思うのですが

...すみません、説明が下手で...。

つまり、いかなる状況でも画面上で選択されている図形のみを線幅変更する

コマンドにしたいのです。属性パレットでやっていることをコマンドパレット上で

ダブルクリック一発でできるようにしたいんです。どうかお知恵をお貸しください。

yabe@ff.iij4u.or.jp

Re:Re:線幅を変更するコマンド

やべ


やべさん こんにちは

&gt;グループ内の図形のハンドルの取得の仕方がいまいちよく理解できなくて...。

大丈夫、間違っていないと思いますよ。

グループ図形かどうかの評価を、呼出し側で実行すれば旨く行くと思います。

是には、私も引っ掛かった経験がありまして.........。

どうも「FInGroup(Handle)」の処で、何か評価しようとするとエラーが出ます。

想像では、グループのボトムにあるノード(ターミネータ)という図形要素属性を

持たないグループのハンドルを評価しようとして起きるエラーのような気がします。

それと、親プログラムにある「SetLW(h,LW);」は、グループ図形に対しては実行

出来ません。

また、グループ内の選択状況は図形毎に評価する必要があります。

「NextSObj(Handle);」でグループ内を回ることを前提にすると、

「GroupObjectSetLineW(Handle);」で最初の要素の評価がおかしくなると思い

ます。これを考慮して、

「ForEachObjectInLayer」関数を使ってスッキリまとめる方法もありますが、

実行はできるものの、警告メッセージが出てしまいます。

(おそらく是も先のノード(ターミネータ)絡みかな?)

参考までに、入れ子状のグループ図形でも対応出来るようにコードを手直しして

みました。

Procedure SetLineW;

CONST LW=30;

VAR

h:HANDLE;

Procedure GroupObjectSetLineW(objHd:HANDLE);

VAR

objHd2:HANDLE;

BEGIN

objHd2:=FInGroup(objHd);

WHILE objHd2&lt;&gt;NIL DO

BEGIN

IF GetType(objHd2)&lt;&gt;11 THEN

BEGIN

IF Selected(objHd2) THEN SetLW(objHd2,LW);

END

ELSE GroupObjectSetLineW(objHd2);{入れ子のグループでも対応}

objHd2:=NextObj(objHd2);

END;

END;

BEGIN

h:=FSActLayer;

IF h&lt;&gt;NIL THEN

BEGIN

WHILE h&lt;&gt;NIL DO

BEGIN

IF GetType(h)=11 THEN GroupObjectSetLineW(h);

h:=NextSObj(h);

END;

Redraw;

END ELSE

PenSize(LW);

END;

RUN(SetLineW);

someda@monolith-aaa.co.jp

Re:線幅を変更するコマンド

plugramer


選択図形の線幅を変更するコマンドを書きたいのですが

グループ図形をうまく処理できません。

とくに困るのがグループの中に居るときです。

グループ内の図形のハンドルの取得の仕方がいまいちよく理解できなくて...。

どなたかわかりやすく解説して下さる方いらっしゃいませんか?

以下、未完のスクリプトです。

Procedure SetLineW;

CONST

LW=1;

VAR

h:HANDLE;

Procedure GroupObjectSetLineW(objHd:HANDLE);

VAR

objHd2:HANDLE;

BEGIN

IF GetType(objHd)=11 THEN

BEGIN

objHd2:=FInGroup(objHd);

WHILE objHd2&lt;&gt;NIL DO

BEGIN

SetLW(objHd2,LW);

objHd2:=NextSObj(objHd2);

END;

END;

END;

BEGIN

h:=FSActLayer;

IF h&lt;&gt;NIL THEN

BEGIN

WHILE h&lt;&gt;NIL DO

BEGIN

GroupObjectSetLineW(h);

SetLW(h,LW);

h:=NextSObj(h);

END;

Redraw;

END ELSE

PenSize(LW);

END;

RUN(SetLineW);

yabe@ff.iij4u.or.jp

線幅を変更するコマンド

やべ


陰陽師さんこんにちは。

例外処理ですか。そうですよね。他の人が使うときには

より安全なScriptでなければ困りますよね。

こういうことがきちんと記述できるようになったらちょっとプロっぽいですよね。

ありがとうございます。精進します。

yabe@ff.iij4u.or.jp

Re:例外処理

やべ


やべさん、こんにちわ。 陰陽師といいます。

他者にプログラムが渡った場合には、なにが行われるかは全く解りません。

そういう意味で、例外処理を記述すべきではないかと思うのですが.....

例えば、「文字列編集ツール」では、s:String; として宣言されていますが、

VectorWorksのString型は、255文字しか保持することができません。

もし、255文字より大きな文字列が選択され、StrDialogの OK ボタンが押され

た場合には、エラーだけではなく多分255文字からはみだした文字は消失するこ

とになると思います。

StrDialogで入力編集可能な文字数は、せいぜい22文字ですから、

GetTextLength(h) で、選択された文字列の文字数を取得し、この文字数 &lt;= 22

のときにメインのプログラムが実行されるように、例外処理を記述されては?

また、「ドラッグスケールツール」では、ScaleRatio:=Dist1/Length1;となって

いますが、もし、マウスドラッグではなく、マウスクリックが同位置で2度おこな

われた場合には、Length1=0 となり、0による除算がおこなわれることとなります。

これは、VectorWorksScriptでは、たいしたエラーではなくても、他の開発ツール

では、重大な損失を被る場合があります。

それと、GetType(h)でタイプをしらべて、選択された図形が処理対象の図形かどう

かのチェックをかける必要もあるのではないでしょうか?

また、各例外に対応した、アラートを出してやれば、より親切だと思います。

hagimori@daiken.co.jp

例外処理

上方の陰陽師


ごめんなさい。前のやつ2つ行っちゃいました。

今度のは選択図形があるとき、ドラッグした距離を変更して伸縮する

コマンドです。3次元ビューを2次元化して手書きパースの下書きにしたい

ときってありませんか?そんな時に役立つんですよ。

MiniCadの「線分に変換」とか「多角形に変換」は

縮尺を無視して変換されるからそのままでは下書きには使えないんですよね。

Procedure DragScale;

VAR

h:HANDLE;

x1,y1,x2,y2,Length1,Dist1,ScaleRatio : REAL;

StrLength:STRING;

Function Length_2pt(x1,y1,x2,y2 : REAL):REAL;

BEGIN

Length_2pt:=Distance(x1,y1,x2,y2);

END;

BEGIN

h:=FSActLayer;

IF h&lt;&gt;NIL THEN

BEGIN

GetLine(x1,y1,x2,y2);

Length1:=Length_2pt(x1,y1,x2,y2);

StrLength:=Num2Str(4,Length1);

Dist1:=DistDialog('今決めた距離を何mmに変更しますか?',StrLength);

IF NOT DidCancel THEN

BEGIN

ScaleRatio:=Dist1/Length1;

Scale(ScaleRatio,ScaleRatio);

Redraw;

END;

END;

END;

RUN(DragScale);

これも、もっとスマートな書きかたあったら教えてください。

yabe@ff.iij4u.or.jp

ドラッグスケールツール

やべ


今度は文字列を編集するコマンドです。

これは実行すると、選択されている文字列がある場合は

それらの一番上位の(先に描かれた)文字列を取得して

テキストボックスに表示します。編集が終わったら

次の文字列がテキストボックスに入ります。

また、実行時に選択文字列がない場合はカーソルが

変化し、文字列がクリックされるのを待ちます。

文字列以外の図形や場所がクリックされると

終了します。

Procedure EditTexts;

LABEL

1,99;

VAR

x1,y1,SC:REAL;

h:HANDLE;

s:STRING;

BEGIN

h:=FSActLayer;

IF h&lt;&gt;NIL THEN

BEGIN

WHILE h&lt;&gt;NIL DO

BEGIN

IF GetType(h)=10 THEN

BEGIN

s:=GetText(h);

s:=StrDialog('文字編集 :',s);

IF NOT DidCancel THEN

SetText(h,s);

Redraw;

END;

h:=NextSObj(h);

END;

END

ELSE

BEGIN

1:

GetPt(x1,y1);

h:=PickObject(x1,y1);

IF h&lt;&gt;NIL THEN

BEGIN

IF GetType(h)=10 THEN

BEGIN

s:=GetText(h);

s:=StrDialog('文字編集 :',s);

IF NOT DidCancel THEN

SetText(h,s);

Redraw;

GOTO 1;

END

ELSE

GOTO 99;

END;

END;

99:END;

RUN(EditTexts);

どなたかもっとスマートなコードのアイデアありましたら

手を入れてください。お願いします。

yabe@ff.iij4u.or.jp

文字列編集ツール

やべ


今度は文字列を編集するコマンドです。

これは実行すると、選択されている文字列がある場合は

それらの一番上位の(先に描かれた)文字列を取得して

テキストボックスに表示します。編集が終わったら

次の文字列がテキストボックスに入ります。

また、実行時に選択文字列がない場合はカーソルが

変化し、文字列がクリックされるのを待ちます。

文字列以外の図形や場所がクリックされると

終了します。

Procedure EditTexts;

LABEL

1,99;

VAR

x1,y1,SC:REAL;

h:HANDLE;

s:STRING;

BEGIN

h:=FSActLayer;

IF h&lt;&gt;NIL THEN

BEGIN

WHILE h&lt;&gt;NIL DO

BEGIN

IF GetType(h)=10 THEN

BEGIN

s:=GetText(h);

s:=StrDialog('文字編集 :',s);

IF NOT DidCancel THEN

SetText(h,s);

Redraw;

END;

h:=NextSObj(h);

END;

END

ELSE

BEGIN

1:

GetPt(x1,y1);

h:=PickObject(x1,y1);

IF h&lt;&gt;NIL THEN

BEGIN

IF GetType(h)=10 THEN

BEGIN

s:=GetText(h);

s:=StrDialog('文字編集 :',s);

IF NOT DidCancel THEN

SetText(h,s);

Redraw;

GOTO 1;

END

ELSE

GOTO 99;

END;

END;

99:END;

RUN(EditTexts);

どなたかもっとスマートなコードのアイデアありましたら

手を入れてください。お願いします。

yabe@ff.iij4u.or.jp

文字列編集ツール

やべ


はじめまして、やべと申します。今日、会員登録しました。よろしく。

僕もVectorScriptの面白さにハマったひとりです。

これから僕の使っているScriptをいくつか紹介して行こうと思います。

感想くださいね。(誰かがすでに紹介してたらごめんなさい。)

_トグルボタンの巻_

Procedure A;

{線幅表示切替}

VAR

p:BOOLEAN;

BEGIN

p:=GetPref(9);

IF (p=True) THEN

SetPref(9,False)

ELSE

SetPref(9,True);

END;

RUN(A);

Procedure A;

{カラーレイヤ切替}

VAR

p:BOOLEAN;

BEGIN

p:=GetPref(11);

IF (p=True) THEN

SetPref(11,False)

ELSE

SetPref(11,True);

END;

RUN(A);

この2つ、結構便利だと思うんだけど、どうでしょう?

yabe@ff.iij4u.or.jp

はじめまして

やべ


ziziさん、こんにちは。非常事態ですね!

あれ?plugramer会員!素早いご回答ありがとうございます。

でも、来ちゃったので管理人からも一言。

お客様の話は「画面登録」のことであろうと推察いたします。

(違っていたら、とても格好が悪いのですが…)

レイヤやクラスの設定や表示範囲、拡大率などを記憶させ再現できる機能です。

平面図とか詳細図とか、あるいは3次元でみせたいアングルなどを登録できます。

つまり、「画面登録」を使うと、第三者でも適切な表示ができるので、とても便利なのです。

レイヤやクラスを複雑に使い分けている場合などは、この機能を使わないと、

作った本人でも正しい表現にできなかったりします。

さて、

MiniCad7となると記憶が定かでないのですが、

「表示」メニューの一番下の「現在のファイル名」の下の

「コマンド」にマウスを合わせるとサブメニューが出ます。

ここから選ぶと。画面にパレットが出現します。

複数あるときは、どれが画面登録のパレットかわかりませんが、

(パレットの名前は自由に変更できるので…)どれかです。

パレットのリストに並んでいる文字列をダブルクリックして下さい。

これで画面が切り替わるはずです。

ただし、

「画面登録」以外のパレットには自動実行のプログラムがあるかも知れません。

(ユーザーがScriptを使ってコマンドを作成できるので…)

その場合は、何が起きるかわかりませんが、そのプログラムが実行されます。

もし、

「表示」メニューにパレットが存在していない場合は、

「表示」メニューで「リソースパレット」を呼び出して下さい。

リストエリアの上、タイトルのように見えるところでディレクトリを切り替えて下さい。

プルダウンしますので、その一番下、現在のファイル名を選んで下さい。

これで、ファイルに所属するシンボルやパレットを選ぶことができます。

画面登録のパレット(らしきもの)をクリックして選び、

「リソースパレット」の「開く」ボタンをクリックして下さい。

注意!「開く」ボタンは2つあります!一番上ではなく、一番下のボタンです。

これで、画面にパレットが出現します。

aoyama@hokkai.or.jp

Re:画面操作とは

管理人


zizi さんはじめまして。

&gt;スクロールバーの下のチェックボックス

正確には、是は存在しないと思います。

想像ですが考えられるのは、「画面登録ポップアップ」のことではないでしょうか。

これは、横方向スクロールバーの一番左の直ぐ横に有る「▼」のポップアップボタンです。

おそらく、提供された図面にはレイヤやクラスの設定の組合わせ等で、一つのファイルで

幾つかの図面が登録されているのではないでしょうか?

因に、この談話室ではScript関連の話題がテーマになっています。

この次からは、VectorWorks 談話室へどうぞ。

someda@cwlaputa.com

Re:画面操作とは

plugramer


はじめましてziziと申します

私は電機設計をやっている物ですが

今まで使っていたCADと違い

会社に入っていたMCD7を使い始めたので

初心者なのですが

お客様からデータ-をmcdで頂くのですが

スクロールバーの下のチェックボックスを押すと

画面が切り替わると言われたのですが

画面操作と言う項目が見つかりません

ちなみにお客さんはVWで書いているのですが

Vol。7でも出来ると言われ参考書を見ながら

頑張っているのですが

どうも・こうも行かない状態になっています

誰か救いの手を!!

katoud_s@mxm.mesh.ne.jp

画面操作とは

zizi


上方の陰陽師さん かさねてありがとうございます。

実に解りやすい丁寧な解説つきで、頭のウスイ私にも良く理解ができました。

さっそく使わせていただきます。

&gt;このコーナーではかなりの猛者の方達が発言されているようですし‥

そんな方々の中に入って、超初心者レベルの質問はとても恥ずかしいのですが、

&gt;解らない時は、このコーナーで質問されるなどして試行錯誤で覚えてゆかれるのが‥

の言葉に勇気づけられました。これからもよろしくお願い致します。

atelier105@mx1.tonet.ne.jp

Re2:ワークシートで切り上げは?

くるみの森


タイプミスがありましたので訂正いたします。

一部、カンマがドットになっておりましたので、下記の様に直してください。

=if(A1-int(A1)=0,int(A1),int(A1)+1)

=if(A1*10-int(A1*10)=0,int(A1*10)/10,int(A1*10)/10+0.1)

hagimori@daiken.co.jp

Re:ワークシートで切り上げは?

上方の陰陽師


&gt;簡単な関数の組み方の参考書でもありましたら、紹介していただければ有り難いの

&gt;ですが。

VectorWorksについての解説書も今では、かなり多く出版されるようになりましたが、

もともとVWは作図がメインのツールであるため、残念ながらワークシートの関数に付

いて詳しく解説されているものは、いまのところ無い様です。

書籍によっては、ワークシートについてさえ、説明のないものもあります。

あったとしても、すべてマニュアルレベルです。

Excel等であれば詳しく解説したものはありますが、ただExcelの関数とは若干、記

述規約の違うものもありますし......

VWの関数自体そんなに多くないので、マニュアルを読みながら、解らない時は、この

コーナーで質問されるなどして試行錯誤で覚えてゆかれるのが、今のところベターで

はないかと.....このコーナーではかなりの猛者の方達が発言されているようですし.....

ちなみに、切り上げについては、セルA1の実数を、セルB1に整数で表現したい場合、

セルB1に、次の様に入力してください。=if(A1-int(A1)=0,int(A1).int(A1)+1)

[B1の値は、もしA1の小数部が0のとき、A1の整数部とし、でなければA1の整数部に

1を加えよ]

小数点1位に切り上げる時には、次の様にしてやれば良いと思います。

=if(A1*10-int(A1*10)=0,int(A1*10)/10.int(A1*10)/10+0.1)

また、負の実数を切り上げる場合には、切り上げる方向が存在するのかも知れません。

(正の無限大の方向なのか、負の無限大の方向なのか?...によって記述がかわる)

念のため、実数を扱う場合は、丸め誤差が生じるため、あくまで近似値であることを

認識しておいてください。(計算機の場合2進数を使うため、10進数で有限実数であっ

ても変換時に無限実数になったり、境界付近では思った通りの解を返さないことが

あります)

hagimori@daiken.co.jp

Re:ワークシートで切り上げは?

上方の陰陽師


上方の陰陽師さん、さっそくありがとうございました。

ていねいなレスに感謝致します。

ところが、教養のない私は関数の組み方がまったくわかりません。

簡単な関数の組み方の参考書でもありましたら、紹介していただければ有り難いの

ですが。田舎の本屋さんではいくらさがしてもありませんでした。

世話のやける「くるもの森」ならぬ「くるみの森」でした。

atelier105@mx1.tonet.ne.jp

Re2:ワークシートで切り上げは?

くるみの森


付け加えます。

下記の式は、Aの値が負の場合は考慮していませんので悪しからず。

hagimori@daiken.co.jp

Re:ワークシートで切り上げは?

上方の陰陽師


くるもの森 さんこんにちわ。

実数を切り上げる方法にも、いろいろあると思いますが、ひとつの考え方と

して捉えてください。

たとえば、ワークシートの、あるセルに、実数 A が入力されたとします。

また、実数 A を切り上げて求めたい整数を A1とします。

WorkSheetで使用する場合は、int(A)、VectorScriptの場合は、trunc(A)と

して、Aの整数部分を求めます。

これらを比較して、

A-int(A)=0 または A-trunc(A)=0の場合は、小数点以下が 0 ですから

A1=int(A) または A1=trunc(A) となります。

A-int(A)&gt;0 または A-trunc(A)&gt;0の場合は、小数点以下が非 0 ですから

A1=int(A)+1 または A1=trunc(A)+1 となる訳です。

では。

hagimori@daiken.co.jp

Re:ワークシートで切り上げは?  

上方の陰陽師


 この談話室は、高度な話題ばっかりで気が引けるのですが‥

以前切り捨ての方法は教えていただきましたが、切り上げはどうするのでしょうか。

情けない事にいくら考えても、このウスクなった頭ではわかりません。

よろしくお願いいたします。m(__)m

atelier105@mx1.tonet.ne.jp

ワークシートで切り上げは?

くるもの森


新年あけましておめでとうございます。

あずまさん。ご教授ありがとうございます。

うまく動きました。

またハードルを越えた感じです。

リファレンスマニュアルにある

SetVectorFill(theObj:HANDLE;hatchName:STRING):BOOLEAN;

の最後のBOOLEANは頭のSetVectorFillに掛かってくるデータ型名の

ことだったんですね。3日ぐらい悩みましたから、これが解って本当に

うれしいです。新年早々良いことありました。

初心者には

リファレンスマニュアルに10行ぐらいのサンプルが全部付いてると

分かり易いんですけど。

では失礼します。

skt-km@mtg.biglobe.ne.jp

Re:生成した多角形にハッチングをしたい

SKT


















文字の置換をしたい  uglyDAC
email:
shinta@earth.co.jp  Fri Oct 13 23:23:58 Japan 2000

はじめまして。
さて、今、MacとWinの間で縦文字の表示で苦労しています。
最終的にはMacで出力をかけるのでMacの表示にWindows側をあわせようと考えています。
そこで、Winの入力時にMacで表現が可能な縦文字を当てておきたいと思うのですが、実例を挙げればカーテンの「ー」の文字をMacの縦文字にすると 「|」SJISでEB5Bに置換していきたいのですが、何十枚もあるので、VectorWorksに置換という機能はないので、スクリプトに挑戦してみよ うかなどと思っています。が、なにぶんC++なんか知らないし、かといってVectorScriptもなんとも。
どなたか、教えていただければと思っております。
そんなのできないよ、っていうのでももよいです。
お願いします。


Re:選択範囲にありがとうございます  kuzu
email:
kuzuire@yahoo.com  Tue Sep 26 19:43:52 Japan 2000

何だか無謀な質問にご返事ありがとうございます。
ベクターのマニュアルを見ながら
まずはおおまかな流れを追ってみたいと思います。
ありがとうございました。


Re:選択範囲  Plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Mon Sep 25 9:45:31 Japan 2000

一応出来ますよ。難易度は少し高いです。
一応と書いたのは、オリジナルの選択ツールのようにはならないからです。
取り敢えず考え方を書いてみます。

1)コアのエンジン部分は次のようになると思います。
選択範囲を指定する多角形をh:HANDLEで指定したとします。
また、GetBBox(h:HANDLE;VAR x1,y1,x2,y2:REAL);関数で、選択対象となる
図形等の外接四角形の4隅の座標を各々取得し評価するものとします。
PtInPoly(x,y:REAL;h:HANDLE):BOOLEAN;関数を使って、任意の対象図形等の
座標が多角形で囲まれた範囲に位置するかどうかを判定し、選択を実行しま
す。比較する座標は各々の図形等に対して4点となります。
以上をサブルーチン化して、繰り返し呼び出せるようにします。

2)ForEachObject(procHandle:HANDLE;criteria:STRING);関数を使って、
総当たりで多角形と比較する図形等を1)のサブルーチンに渡します。

3)選択範囲を指定する多角形は、インターフェース上必要なだけですから
選択実行後に削除します。

4)インターラクティヴに多角形を描く関数がVWScriptには用意されていな
いので、擬似的にGetPtL(x1,y1:REAL;VAR x2,y2:REAL);関数でラバーバンド
の直線の作成を繰り返しながら端点の座標を格納して行き、範囲指定終了
時点で全て削除し、代わりに格納した座標を基に多角形を生成します。
最初にクリックした座標か同一座標を続けてクリックした場合に、範囲指定
終了になるように設定します。

5)範囲指定時に直線の表示を破線に変える場合には、FPenSize;とFPenPat;
関数を使って一旦現在の図面属性のペンの種類と太さを変数に格納して、
PenSize(1);PenPat(-1);などの様に図面属性を変更し、選択実行後に再び
PenSize(格納済変数);PenPat(格納済変数);で元に戻します。

以上です。
一見単純な様な選択するだけのツールでも、内部的には随分とややこしい
事をやることになってしまいますね。


選択範囲  kuzu
email:
kuzuire@yahoo.com  Fri Sep 22 11:56:11 Japan 2000

さいきんscriptをはじめようと思い立ちました。
で、まずつくってみようと思うのが
「多角形で囲まれた部分の図形を選択する」
です。
scriptでできるのでしょうか?
プログラムもろくに知らないので何ができて何ができないかわかりません
もし過去にそのような物を見かけられた方がいれば教えてください。
よろしく御願いします。


こんなものつくりましたが・・・   石男
email:
sinogaki.stn@nasuinfo.or.jp  Thu Sep 14 17:09:25 Japan 2000

こんなものつくってみましたが、どうでしょうか?
割り付ける場所のx方向とy方向の長さを入力して、割り付けるものの寸法を入力する
と、割付を自動的に書いてくれるものです。ひとつ問題があります、割り切れる数字
を入力すると1枚だけ書いてくれません・・・(^^;;;。

よろしかったら、どうぞ。

PROCEDURE WARITUKE;{規格割付}
LABEL
9999;
VAR
wx,wy,x1,y1,xx,yy:REAL;
gx,gy,x,y:LONGINT;
na,nb,nc,nd:INTEGER;
BEGIN
gx:=IntDialog('割り付ける場所の横の長さは','3500');
IF DidCancel THEN
BEGIN
GOTO 9999;
END;
gy:=IntDialog('割り付ける場所の縦の長さは','2150');
IF DidCancel THEN
BEGIN
GOTO 9999;
END;
x:=IntDialog('割り付ける物の横の長さは','300');
IF DidCancel THEN
BEGIN
GOTO 9999;
END;
y:=IntDialog('割り付ける物の縦の長さは','300');
IF DidCancel THEN
BEGIN
GOTO 9999;
END;
BEGIN
wx:=gx DIV x;
x1:=(gx MOD x)/2;
wy:=gy DIV y;
y1:=gy MOD y;
{---------------------割付計算-------------------------------}
xx:=x;
yy:=y;
nc:=wx-1;
nd:=wy-1;
{---------------------割付回数・寸法--------------------------}
FOR na:=0 TO nc DO
BEGIN
FOR nb:=0 TO nd DO
BEGIN
Rect(0,yy,xx,0);
Hmove(LNewObj,x1+xx*na,yy*nb);
END;
END;
FOR na:=0 TO 1 DO
BEGIN
FOR nb:=0 TO nd DO
BEGIN
Rect(0,yy,x1,0);
Hmove(LNewObj,(xx*wx+x1)*na,yy*nb);
END;
END;
FOR na:=0 TO 1 DO
BEGIN
Rect(0,yy*wy+y1,x1,yy*wy);
Hmove(LNewObj,(xx*wx+x1)*na,0);
END;
FOR na:=0 TO nc DO
BEGIN
Rect(0,y1,xx,0);
Hmove(LNewObj,x1+xx*na,yy*wy);
END;
{---------------------割付描画-------------------------------}
ReDraw;
END;
9999:
END;
RUN(WARITUKE);


まいど、まいど・・・   石男
email:
sinogaki.stn@nasuinfo.or.jp  Sat Sep 9 9:19:52 Japan 2000

plugramerさんへ

毎度のことながら、アドバイスありがとうございます。慣れ親しんだPhotoShopで
作ってみようとおもいます。昨日、スクリプトの講習会に行ってきましたが、大変面
白かったです。なにかみなさんのお役にたてる呪文ができればいいのですが・・・。


Re:vw8.01ファイルの画像変換について  Plugramaer
email:
cwlaputa@ra2.so-net.ne.jp  Fri Sep 8 12:15:14 Japan 2000

ムライ さんへ

この症状私もWin版Ver8.0.1で確認出来ました。
>Ver8.5では簡単に出きるそうなのですが!?
問題無く出来ますね。

「取り込み取出し」もVer8.0.1で不具合の多かったコマンドですよね。
Ver8.0.1を業務でいつまでも使用するのは、非常に問題かと思います。


Re:新規ツールパレットのアイコンについて  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Thu Sep 7 21:35:45 Japan 2000

自分でデザイン出来ますよ。
32×32ビットのビットマップ画像で出来ていれば、プラグインツール
メニューで開くプラグインコマンド編集ダイアログで、プロパティー
ボタンを押してアイコンの窓の処にコピー&ペーストで張り込むこと
が出来ます。
有効な作画範囲は、32×32ビットの中の26×18ビットの範囲になって
いますので注意が必要です。これでジャストフィットします。
肝心のビットマップ画像作成ソフトですが、一番確実なのはMacの場合
ResEdit等のリソース編集ソフトを使う事になりますが、PhotoShop等
の画像作成編集ソフトも勿論利用出来ます。
ResEditで言うと、icl8と云うアイコンリソースになります。
Windowsの場合は、VC++でしか作成した経験が無く適切なソフトが分り
ませんが、同様のソフトが有れば可能な筈です。
因に、このアイコンデータはMacとWinで共用出来ます。
自作のアイコンになれば、プラグインもバッチリきまりますよね。


新規ツールパレットのアイコンについて   石男
email:
sinogaki.stn@nasuinfo.or.jp  Thu Sep 7 14:01:09 Japan 2000

ここに書き込みをして以来すっかりスクリプトにはまってしまいました。
誰か教えて下さい。作業画面編集で新規ツールパレットを作成して新規ツールを作る
とスパナのようなアイコンが表示されますが、このアイコンは自分でデザインできる
のでしょうか?


感謝です インライン入力 の悩みが解消しました   さくら丸
email:
yes-will@d7.dion.ne.jp  Wed Sep 6 0:59:10 Japan 2000

plugramer さんへ
うわぁ〜〜〜なんとすばらしい!!!

だうもありがとうございました。感激です 感謝です
インライン入力の悩みがばっちり解消しました。
目薬よさようならぁ〜〜〜〜
ほんとにありがとうございました
さくら丸


vw8.01ファイルの画像変換について   ムライ
email:
murai-k@grape.plala.or.jp  Mon Sep 4 15:35:51 Japan 2000

始めまして、CAD入門した初心者の質問で申し訳無いのですが。
諸先輩方のお知恵を拝借致したく「談話室」に投書しました。

簡単なプレゼンボードを作成して、それを
VectorWorksから直接JPEGを取り出そうとしています。
 ファイル〜イメージファイル
  「イメージファイルの取り出し」〜サイズ調整を
   して.....  
  「保存」した後、フォーマット形式を聞くことなく
  ボックスが消えます。
   ファイルは生成されて、どこかに保存されている
   ようなのですが、行方が解りません。

   また、どうゆうわけか
   操作の中で保存先を指定する事もありません。

当方、VectorWorksバージョン8.0.1
   「Win98」を使用しております。

上記の作業は、Ver8.5では簡単に出きるそうなのですが!?

初歩的な質問ですがよろしくお願い致します。


 




Re:インライン入力をやめたい  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Sun Sep 3 0:47:07 Japan 2000

こんなもので代用出来ましたら使ってみて下さい。文字列を配置する
基準点をマウスクリックすると、ダイアログが表示されますので、入
力する文字列を指定すると、クリックした位置に文字列を配置します。
ツールプラグインとして登録すると、使い易いと思います。

PROCEDURE TEXTPLOT;

VAR InputStr: STRING;
pX, pY: REAL;

BEGIN
SetCursor(LgCrossC);
Repeat Until MouseDown(pX,pY);
InputStr:= StrDialog('入力文字列指定', '');
IF NOT DidCancel THEN Begin
DSelectAll;
TextOrigin(pX, pY);
BeginText;
InputStr
EndText;
End;
END;

RUN(TEXTPLOT);


インライン入力をやめたい   さくら丸
email:
yes-will@d7.dion.ne.jp  Thu Aug 31 23:20:36 Japan 2000

こんばんわ はじめまして こんなクラブがあるなんて知りませんでした・
まだ会員ではありませんが初歩的な質問(でも目の悪いぼくにとっては困った問題なんです)させていただきます。
。マック8.6でVectorの8を使っていますが、文字入力がいつもインラインですのでいちいち図面を拡大して入力した文字を確認しなくてはいけませ ん。
どうにかしてインライン入力ではなく画面の下に出てくるようにできないでしょうか。(ATOK12を使っています。)
ちなみにマック側でインラインをはずして使用すると問題はないのですが、その場合は別のソフトを同時に動かすとクラッシュしたりフリーズしたりしてしまい ます。
たすけておくれやす・・・


Re:みたび、3D図形・・・   石男
email:
sinogaki.stn@nasuinfo.or.jp  Wed Aug 23 17:32:53 Japan 2000

みたび、書き込ませていただきます。みなさんからのものを参考にして、自分なりに
3D図形情報をワークシートに吐き出すコマンドをつくってみました。
初心者がつくったものですから、問題があります。単に、height,width,depthを返す
だけです。同一寸法の図形の数量をカウントできればいいのですが・・・。
柱状体・ブーリアンのものも吐き出します。

PROCEDURE MyMain;

VAR
layerH,objH:HANDLE;
i:INTEGER;
height,width,depth:REAL;
s:STRING;

BEGIN;
layerH:=ActLayer;
NameObject('寸法表');
SprdSheet(0,0,20,3);{シートの大きさは,20*3になっています}
i:=1;
objH:=FSActLayer;
WHILE objH<>NIL DO
Begin
Get3DInfo(objH,height,width,depth);
s:=Num2StrF(height);
LoadCell(i,1,s);
s:=Num2StrF(width);
LoadCell(i,2,s);
s:=Num2StrF(depth);
LoadCell(i,3,s);
i:=i+1;
objH:=NextSObj(objH);
End;
BEGIN{警告音がでます}
SysBeep;
End;
END;
RUN(MyMain);


レイヤを図形ごとコピーするコマンド。  Kanabun
email:  Tue Aug 22 9:57:40 Japan 2000

簡単なお土産です。
レイヤを図形ごとコピーするコマンドです。
こんなの使わないでしょうか?

Procedure Layer_Copy ; {1}
{990409 FreeVS )
アクティブレイヤを図形ごとコピーします。}
VAR {1}
New_LName: string;

{==========================メインルーチン=========================}
Begin {1}
begin
DoMenuTextByName( 'Layer Options', 2 );
Selectall;
DoMenuTextByName( 'Copy', 0 );
New_LName := StrDialog('コピー先レイヤー名称',GetLName(actlayer));
if ( not didcancel ) and ( GetLName(actlayer) <> New_LName ) then
begin
Layer( New_LName ) ;
DoMenuTextByName( 'Paste In Place', 0 );
end ;
end ;
End ; {1}
RUN( Layer_Copy ) ;


始めてのぞきます。  Kanabun
email:  Mon Aug 21 22:53:53 Japan 2000

こんばんわ。
始めてのぞきます。
東京のユーザークラブから流れて来ました。

金沢文庫で設計事務所を営んでいます。
で、Kanabun。
よろしくお願い致します。


Re^2.:すんごくうれしい!   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Mon Aug 21 11:15:20 Japan 2000

>スクリプトでワークシート吐出しが出来ると活用範囲が広がりますよね。

そうなんですよね。どっかの国のモックン(MOC君)はひとFileいちNameの
仕様書を考えたり、ObjectCADでないWindows発生以前のCADを眼中にCALSを
考えているのが微笑ましく感じられますよね。
CADデータの中でUniqueな情報(名称とか)を指定しておけばワークシート吐出し
経由でExcelへいって、モックン提供のExcel⇔XML変換(SoftWindows又は
中古のMMX機で)を使えばモックンの要求はクリアできるという判断で
良いのでしょうか?トトロさんご意見いただければお願いします。

イラレ8or9はVecWoのDXFをレイヤー毎に転送してくれるという事実をこの間
実感しました。EPS吐き出しよりGoodですよ。これからDistilするときれいなPDFが
できあがるのですよ。これってやはりモックンの要求はクリアできますよね。
あんなに税金と民間の汗水+お金を使っているモックン達の集まりは
簡単にクリアできるのですがVRMLとQTVRの時と同じであまり受け入れていただける
人達の少数すぎるために経ち消えになってしまうのでは心配です。

モックンのURLは
http://www.moc.go.jp/tec/cals/index.htm
ですが、.jpはどこかの国ですのでよろしくおねがいしますね。


Re.:すんごくうれしい!  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Mon Aug 21 0:10:57 Japan 2000

「3D図形の奥行き・・・」の話題で、クマ(河野)さんのワークシート
吐出し部分のフォローも兼ねてみたつもりです。
辺境地のコンサルさんには、せっかくの機会を潰してしまったようで
少々気が引けますが......。
でもやってみて分かった発見が一つあります。
2D多角形の場合と3D多角形の場合で、頂点ポジションパラメータが
1つずれているんですね。
紛らわしいと言うか、面白いと言うか......。

実際に組んだスクリプトコードは、タブ空白が効いていてもう少し見易
いのですが、コピーペーストしてアップしましたら空白が全部潰れてい
ました。悪しからず。
変数の設定の仕方など無駄と感じられる様な部分もあるかと思いますが、
分り易さと後々の使い回しを考えてみたつもりです。

スクリプトでワークシート吐出しが出来ると活用範囲が広がりますよね。


すんごくうれしい!   辺境地のコンサル
email:
fwhd4139@mb.infoweb.ne.jp  Sat Aug 19 20:29:38 Japan 2000

plugramerさん本当にありがとうございます
まさか組んでもらえるとは思いませんでした
できるかどうか意見を聞いて
それから少しづつ組んでみようかと思っていましたので・・・・
いやあ、すんごくうれしいです
ありがとうございました


Re.:こんなマクロ書けるでしょうか?  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Sat Aug 19 14:37:25 Japan 2000

頂点ポジションパラメータを頭から設定するか、お尻から設定するかで決まります。頭からの場合は、VertexPos変数の初期値・増減式 は変わります。
ワークシート出力の参考も兼ねて作ってみました。
2階以上繰り替えして使用すると、ワークシート名称重複の警告が出ますが、使ってみて下さい。

PROCEDURE ThreeDVertexAxisData;
VAR TargetObjH:HANDLE; {処理対象図形用ハンドル変数}
VertexPos,VertexPosEnd,Count:INTEGER; {頂点ポジション用変数}
decPlace:INTEGER; {座標値文字列変換の少数部桁数用変数}
CellCol,CellRow,RowMax:INTEGER; {ワークシート用変数}
Xaxis,Yaxis,Zaxis:REAL; {座標値用変数}
XStr,YStr,ZStr:STRING; {座標値文字列用変数}
VertexPosStr:STRING; {頂点ポジション文字列用変数}

BEGIN
TargetObjH:= FSActLayer;
IF ( TargetObjH<>NIL ) & (( GetType(TargetObjH) = 5 ) or( GetType(TargetObjH) = 25 ))
THEN BEGIN

RowMax:= GetVertNum(TargetObjH) + 3;

IF GetType(TargetObjH) = 5 THEN BEGIN {2D多角形の場合}
VertexPos:= GetVertNum(TargetObjH);
VertexPosEnd:= 0;
NameObject('2D多角形座標リスト');
END;
IF GetType(TargetObjH) = 25 THEN BEGIN {3D多角形の場合}
VertexPos:= GetVertNum(TargetObjH) - 1;
VertexPosEnd:= -1;
NameObject('3D多角形座標リスト');
END;
SprdSheet(0,0,RowMax,6);
{------------------------------------------------ シート生成}

CellRow:= 2;
CellCol:= 2;
decPlace:= 3;
SprdBorder(TRUE,FALSE,TRUE,FALSE);
SprdAlign(3);
LoadCell(CellRow,CellCol,'No.');
SprdAlign(4);
CellCol:= CellCol + 1;
LoadCell(CellRow,CellCol,'X');
CellCol:= CellCol + 1;
LoadCell(CellRow,CellCol,'Y');
CellCol:= CellCol + 1;
LoadCell(CellRow,CellCol,'Z');
SprdAlign(1);
SprdBorder(FALSE,FALSE,FALSE,FALSE);
{------------------------------------------------ 表項目作成}

REPEAT {------------------------------------ 全頂点分繰返}
IF GetType(TargetObjH) = 5 THEN BEGIN {2D多角形の場合}
GetPolyPt(TargetObjH,VertexPos,Xaxis,Yaxis);
Count:= VertexPos;
END;
IF GetType(TargetObjH) = 25 THEN BEGIN {3D多角形の場合}
GetPolyPt3D(TargetObjH,VertexPos,Xaxis,Yaxis,Zaxis);
Count:= VertexPos + 1;
END;
{---------------------------------------------- 座標取得}
CellRow:= CellRow + 1;
CellCol:= 2;
VertexPosStr:= Num2Str(0,Count);
SprdFormat(1,0,'',' ');
LoadCell(CellRow,CellCol,VertexPosStr);
{---------------------------------------------- 頂点番号}
SprdFormat(2,decPlace,'',' ');
CellCol:= CellCol + 1;
XStr:= Num2Str(decPlace,Xaxis);
LoadCell(CellRow,CellCol,XStr);
{---------------------------------------------- X座標値}
CellCol:= CellCol + 1;
YStr:= Num2Str(decPlace,Yaxis);
LoadCell(CellRow,CellCol,YStr);
{---------------------------------------------- Y座標値}
CellCol:= CellCol + 1;
ZStr:= Num2Str(decPlace,Zaxis);
LoadCell(CellRow,CellCol,ZStr);
{---------------------------------------------- Z座標値}
VertexPos:= VertexPos - 1;
UNTIL VertexPos = VertexPosEnd;
END
ELSE BEGIN
SysBeep;
AlrtDialog('2D多角形または3D多角形が選択されていません');
END;
END;

RUN(ThreeDVertexAxisData);


ありがとう   石男
email:
sinogaki.stn@nasuinfo.or.jp  Sat Aug 19 10:32:19 Japan 2000

クマさん、plugramerさん、ありがとうございました。わたしのタイプミスでした。
柱状体、ブーリアンもOKでした。みなさん、すごいでね。


Re.:再び3D図形の奥行き・・・  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Fri Aug 18 12:45:45 Japan 2000

Msg:Concat('h=',height,'w=',widyh,'d='depth);
ではなくて、
Msg:=Concat('h=',height,'w=',widyh,'d='depth);
でないと駄目だと思います。
「Msg:」「Msg:=」の違いです。


再び3D図形の奥行き・・・   石男
email:
sinogaki.stn@nasuinfo.or.jp  Fri Aug 18 11:37:30 Japan 2000

わたしが盆休みをしている間に、マクロをつくっていただき「クマさん」ありがとう
これを機会に勉強します。で、早速ですがこんなエラーがでました。わたしには、
わかりません。以下エラーメッセージを書きますので、お願いします。
Lin#19: Get3DInfo(ObjH,height,width,depth);
|
{Error:Argument is not the expected type.}
|
{Error:Expected,}
|
{Error:Argument is not the expected type.}
|
{Error:Expected,}
|
{Error:Argument is not the expected type.}
|
{Error:Expected,}
|
{Error:Did not expect this after end of ststement-missing;?}
Line#20:Msg:Concat('h=',height,'w=',widyh,'d='depth);
|
{Error:Expected the assignment operator:=}
|
{Error:Did not expect this after end of statement-missing;?}



こんなマクロ書けるでしょうか?   辺境地のコンサル
email:
fwhd4139@mb.infoweb.ne.jp  Thu Aug 17 22:35:38 Japan 2000

例えばこんな頂点を持つ平面があったとします

凡例
書いた順番、X,Y

1、X1,Y1


n,Xn,Yn

このようにVWの平面は書いた順番と書く座標を
情報として持っていると私は理解しています
これを

1,Xn,Yn



n,X1,Y1
というように逆転するようなマクロは
(つまり右回りになっている平面は左回りに
左回りは右回りに)
書く事は可能でしょうか?
詳しい方アドバイスをお願いします


採光算定マクロ  rushride
email:
rushride@po.twin.ne.jp  Thu Aug 17 22:14:37 Japan 2000

採光距離や開口部の最低限必要な面積を
逆算するマクロをベクターにアップしたから使ってみてください。
http://www.vector.co.jp/soft/mac/business/se156422.html


Re.:3D図形の奥行き・・・   クマ(河野)
email:
akihiro@ca2.so-net.ne.jp  Thu Aug 17 15:24:50 Japan 2000

こんなんでどうでしょう。
ただ実際には対象となる図形のタイプによって処理を
かえたり、結果をWSに吐き出す、あるいはタブ区切
りのテキストにする、などにじ利用の方法に合わせた
後処理も必要になりますが。

・・あと3D多角形に関しては返す値が正しそうなの
は確認しましたが、柱状体や多段柱状体やブーリアン
などは確認してませんのであしからず。

PROCEDURE MyMain;

{3D図形の情報を調べるコマンド}

VAR
ObjH :HANDLE;
height,width,depth:REAL;
Msg:STRING;

PROCEDURE doAlert(Msg:STRING);
Begin
SysBeep;
AlrtDialog(Msg);
End;


BEGIN;
ObjH := FSActLayer;

WHILE not(ObjH = nil) DO
Begin
Get3DInfo(ObjH,height,width,depth);
Msg := Concat('h = ',height,' w = ',width,' d = ',depth);
doAlert(Msg);
Message(Msg);
ObjH := NextSObj(ObjH);
End;
END;
RUN(MyMain);


Re.:3D図形の奥行き・・・   ヒロ
email:
honda@aanda.co.jp  Thu Aug 3 13:12:22 Japan 2000

僕もいろいろやってみましたが、ワークシートの関数では、出来ないようです。
江戸の黒板当番さんのvolumn/areaが、一番近いワークシート関数だと思います。
データパレットの値は、VectorScriptを使えばとれるそうです。
Scriptは超初心者の為、具体的な答でなくてスミマセン・・・


Re.:3D図形の奥行き・・・   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Thu Aug 3 11:45:40 Japan 2000

ごめんなさいね。データパレットの数値をWorksheetに取り込めるかということ
ですね。面データを立体データにした瞬間に面データの名称等は消えてしまって
3Dのデータに置き換わるんですね。
データパレットのΔX、ΔYと「奥行き」の数値を取りだせるかですね。
それはもっと詳しい人に聞かないと分からないです。


Re.:3D図形の奥行き・・・   石男
email:
sinogaki.stn@nasuinfo.or.jp  Thu Aug 3 9:21:04 Japan 2000

江戸の黒板当番さん、ありがとう。
 >「奥行き」=volumn/areaでだめですか?
volumnはソリッドモデルと普通の3D図形の値を返しますが、areaはソリッドモデル
の値を返しませんでした。それに、volumnはソリッドモデルの体積?を「見付け」*
「見込み」という簡単な式で出しているのではないのですね。例えば、柱状体から
球を削りとった3D図形なら、「柱状体-球」というように・・・。変に関心してしま
いました。やはりWorksheetの関数では、駄目ということですか?
 Scriptの世界に入り込めということでしょうか?


Re.:3D図形の奥行き・・・   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Thu Aug 3 7:27:55 Japan 2000

これはScriptではなくてWorksheetの関数ですよね。「奥行き」とハッキリ言えないかも知れませんが、「奥行き」= volumn/areaでだめですか?
「奥行き」という言葉はコンピュータが理解できない相対的な内容な気がします。
この式でいけばObjectを選択してあげれば2次元設定時の面積を「見付け」方向として
「見込み」がでてくると思います。


3D図形の奥行き・・・   石男
email:
sinogaki.stn@nasuinfo.or.jp  Wed Aug 2 10:16:56 Japan 2000

 勉強会、大盛況でおめでとうございます。早速ですが、ワークシートを使って
3d図形の寸法表を不完全ながら使用しています。vwでいうところの「奥行き」
を返す関数はないのですか?また、ソリッドモデルを使った3d図形の「奥行き」
を返す関数はないのですか?height,widthの両関数は使っています。何か方法が、
あれば教えてください。


Re.:拾う神有り   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Fri Jun 23 11:07:43 Japan 2000

湘南シンポのミッドナイトセッションのクイズでサポートに来ている難問を
解こうというコーナーが賞品付きであったんですね。
難問ばかりでしたよ。
私なんざ他のソフトだと凄く簡単ですよ。の連続でした。サポートの方々は
VWの制限の中で真剣に取り組んでいるんですよ。VITAさんの回答でも
VITAさんのスクリプトのスキルとか色んな不明なところを考慮すると
ワークシートは一概に否定できないような気がします。
ただ色々な解決の道筋があったほうがユーザーの利益になりますよね。


拾う神有り  VITA
email:
saitoh@space-factory.com  Tue Jun 6 10:19:44 Japan 2000

あずまさん、左のクマさん、ありがとうございます。
お二人とものやり方で、希望通りになりました。
A&Aには、面積スタンプはあきらめて、
ワークシートを使え!と言われて困っていたところでした。
(これ本当)
まさに、捨てる神有れば、拾う神有り。

ところで、A&AサポートにFAXで質問するとなんか的外れな
答えが返ってくると思いませんか?
ここじゃないほうに書き込むべきかしら?


Re:ご依頼により   あずま
email:
azuma@lemon.ifnet.or.jp  Tue Jun 6 1:15:32 Japan 2000

管理人様に無理を言って書き込みを削除していただきましたが、やはりこういうことはイケナイのではと思い直してせっかく削除していただいた 内容をもう一度書き込ませていただきます。気紛れなわたくしをおゆるしください。

そういうわけで書き込んだ内容は

Re:面積スタンプについて

内部精度をこえる演算をしたためだとおもいます。
aaa:=HArea(polyH)/10000;
bbb:=Trunc(aaa);
に書き替えてみてはいかがでしょうか。

というものでした。失礼致しました。


RE:面積スタンプその後   左のクマさん
email:
hidalgo-k@exite.co.jp  Mon Jun 5 20:49:36 Japan 2000

帰ってきて、Script談話室を覗いて、びっくりしてしまいました。
Vita さん、申し訳ありません。

Line #17: Concat(Num2Str(2,ccc),'・',)
{ Error: Expected a new factor here. }

は17行目最後にコンマが入っているため、スクリプトは次の要素を期待してしまっている
わけです。
ですから、このコンマを取れば正常に動作すると思います。
(当方では動作しました)


面積スタンプその後  VITA
email:
saitoh@space-factory.com  Mon Jun 5 11:15:50 Japan 2000

左のクマさん、ありがとうございます。
早速コピーして使ってみたのですが、
エラーが出てしまうのです・・・・
以下エラーメッセージ

Line #17: Concat(Num2Str(2,ccc),'・',)

|
{ Error: Expected a new factor here. }


Line #18: EndText;

|
{ Error: Expected END }


Line #20: END;

|
{ Error: Expected a Procedure. }


ご依頼により   管理人
email:
aoyama@hokkai.or.jp  Mon Jun 5 9:34:49 Japan 2000

ご依頼により、あずまさんの回答を削除させて頂きました。
残念!


re:面積スタンプについて  VITA   左のクマさん
email:
hidalgo-k@exite.co.jp  Sun Jun 4 17:27:27 Japan 2000

ひさしぶりに覗いて、
昔そんなのをつくったなあという記憶で、書きます。
関数はTruncではなくRoundを使っていました。
VITAさんのスクリプトをちょっと変えました。

{--- 小数3位を切り捨てる方法 ---}
PROCEDURE Sample;
VAR
x,y:REAL;
polyH:HANDLE;
aaa,ccc:REAL;
bbb:LONGINT;
BEGIN
polyH:=FSActLayer;
IF polyH<>NIL THEN
BEGIN
GetPt(x,y);
aaa:=HArea(polyH)/10000-0.5;
bbb:=Round(aaa);
ccc:=bbb/100;
TextOrigin(x,y);
BeginText;
Concat(Num2Str(2,ccc),'・',)
EndText;
END;
END;
RUN(Sample);


Re:エラーにて使用できないのです。   トトロ
email:
totoro@badboy.co.jp  Thu Jun 1 22:23:14 Japan 2000

>CADが立ち上がる一歩手前でエラー表示⇒すべて終了!!

これはプリンタ設定がなされていないときに出る
エラーではないかと思います。
以前、「VectorWorks談話室」(喫茶室だったかも)で
話題になっているので、バックナンバーまたは
以前の書き込みを参照してみてください。


エラーにて使用できないのです。  fuji
email:
escala@ps.inforyoma.or.jp  Thu Jun 1 20:18:34 Japan 2000

Windows版のMiniCAD7にて
次のエラーが出ます。色々問い合わせたのですがご返答無し!
こちらに行き着いた次第です。
CADが立ち上がる一歩手前でエラー表示⇒すべて終了!!
>エラー画面のタイトルバ−にMicrosoft Visual C++ Runtime Library
> と表示されていて、1行目に、Runtime Error!
> 2行目にProgram:(MiniCad.exeのフルパス)
> 3行目に、abnormal program termination
> と表示されていますか?そして、その画面のボタン(OKボタンのみ)を押すと、
> MiniCADのウインドウもエラー画面といっしょに閉じてしまう。というエラーです
是非、直し方を教えて下さい。


面積スタンプについて  VITA
email:
saitoh@space-factory.com  Thu Jun 1 14:53:04 Japan 2000

皆さんはじめまして。
MiniCadに付いていた面積スタンプに手を入れて使っているのですが、
いまいち、希望通りになりません。
A&Aに問い合わせても、適切な答えが返ってこないので、
こちらに書き込みました。
小数点第3位を、切り捨てにしたいのですが、今使っているのは、
時々0.01・少なく表示されてしまいます。
(6.400*10.350=66.24・ が 66.23・ と出てしまう)
どなたか、面積スタンプをお使いの方、正解ご存知ですか?
以下、使っているコマンドです。長々と、ごめんなさい。
PROCEDURE Sample;
VAR
x,y:REAL;
polyH:HANDLE;
aaa,ccc:REAL;
bbb:LONGINT;
BEGIN
polyH:=FSActLayer;
IF polyH<>NIL THEN
BEGIN
GetPt(x,y);
aaa:=HArea(polyH)/1000000;
bbb:=Trunc(aaa*100.0);
ccc:=bbb/100.0;
TextOrigin(x,y);
BeginText;
Concat(Num2Str(2,ccc),'・')
EndText;
END;
END;
RUN(Sample);


Re:AppleShareIPの共有フォルダをマウント  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Tue May 23 20:22:31 Japan 2000

はじめまして、このような方法は如何でしょう?

-----------------------------------------------------------------------
tell application "Finder"
open file "共有フォルダ名" of folder "よく使う項目" of folder "システムフォルダ" of startup disk
end tell
-----------------------------------------------------------------------

前提として「よく使う項目」に対象の共有設定フォルダが登録されている事になります。MacOSバージョンも新しいものが必要です。
今実際に試してみた処、Mac起動直後の状態ではキーチェーンアクセスのパスワード要求が有るものの、セレクタでの操作無しで一発オープン出来ました。テ スト環境はMacOS J1-9.0.4です。
(キーチェーンアクセスが無い場合での確認は行っておりません)


AppleShareIPの共有フォルダをマウント  teru
email:
teruhiko@hh.iij4u.or.jp  Sat May 20 15:39:28 Japan 2000

はじめまして、MSNの検索からやってまいりました。
使用言語はAppleScriptです。よろしくお願いします。
G4Server上でAppleShareIP6.3.1が稼働しており、
共有設定されているフォルダをマウントするスクリプトを作成しました。

-----------------------------------------------------------------------
mount volume "VOLNAME" on server "SVNAME"
in appletalk zone "ZONENAME" as user name "teru" with password "haya"
-----------------------------------------------------------------------

これは、Appletalkだけの時に使っていたものを流用したのですが、
まったく動かず(エラー:-1070)、色々試してみて分かったのは、
一つでもセレクタで共有フォルダをマウントしていれば、
このスクリプトで指定されたフォルダをマウントする事が出来るみたいです。

また、AppleShareIPの場合URL文字列でも接続が可との事でそりも試しましたが、
一度セレクタで接続を確立させれば、マウントが可といった状態です。
わざわざセレクタを使用するなら、スクリプトを使う意味がありません(涙)
共有フォルダのエイリアスを使って、マウントさせようともしましたが、
結果はいっしょでした。「ネットワーク上に見つからない」と。

どなたかご存じの方がいらっしゃいましたら、ご教示下さい。


設定が間違っていました。  satopy
email:
satop@anet.ne.jp  Mon Apr 10 5:40:29 Japan 2000

ツールマクロの設定のところが、ツールでなく、シンボルにチェックが入っていました。
(人に言われるまで気がつきませんでした。思いこみは怖いですね。)
意味を理解していなかったので、うっかりチェックを入れてしまっていたようです。
これがわからずに、丸2日悩んでいました。
単純なケアレスミスで恐縮しています。お手数をおかけしました。

でも、説明していただいたおかげで、少しマクロの仕組みがわかってきました。
まだまだ覚えることは山ほどありそうです。
よろしくお願いします。
ありがとうございました。


ありがとうございます  satopy
email:
satop@anet.ne.jp  Sun Apr 9 4:22:58 Japan 2000

早々にお返事を頂き、感激しています。
さっそくやってみます。

目の前の本の著者にインターネットを通して直接説明をいただけるなんて、
すごい時代になったものだと驚いています。
あんまり初歩的な質問であきれられるかと心配しましたが、
思い切って書き込んでよかったです。


RE:2マクロ「作図」について教えて下さい。   管理人
email:
aoyama@hokkai.or.jp  Sat Apr 8 11:35:30 Japan 2000

先の説明で、下記の部分を間違えました。ごめんなさい。

【セレクションポインタ】を選んで下さい。
余白をクリックして、図形の選択を解除して下さい。
この状態で、属性パレットで、太い線(40)を選んで下さい。
これは、線の太さの初期値を変更する操作です。
「がいへき」マクロで作図して下さい。
壁の外側の線が太くなったはずです。でも、中心線は変わらないはず。

えー、壁の外側の線が太くなりません。
これを実現するためには、

「ツールマクロ」のダイアログで、
線の太さを記憶するチェックボックスを外しておく必要があります。
チェックボックスを外すと、線の太さは属性パレットの設定が優先されます。


RE:マクロ「作図」について教えて下さい。   管理人
email:
aoyama@hokkai.or.jp  Sat Apr 8 11:08:44 Japan 2000

satopyさん
> 外壁を作成するマクロなんですが、他の作業をして、また、外壁作図マクロを使う
> と通り芯だけ太くなってしまいます。これはどうしてでしょうか?

これは「階層メニュー」の「ツールマクロ」についてのご質問ですね。
試してみましたが、通り芯だけが太くなる現象は確認できませんでした。

確認ですが、マシンはMacintoshですか?
VectorWorksのバージョンは8.5ですよね?
この現象は、どのような操作をした後に起きるのでしょう?
理屈では起きないはずの現象ですから、メモリー不足などの他の原因で、
VectorWorksが正常に動作できないのかも知れません。

> マクロについては全くの素人なので、おかしな事をしているのかもしれません。

この心配は無用です。「ツールマクロ」は自動的にマクロを生成するので、
ユーザーが、マクロに対して「おかしな事」をすることはできません。
ちょっと、実験してみましょうか。

新規ファイルを開いて下さい。
画面メニューの縮尺を1/50にして下さい。

壁ツール(作成モード)を選んで下さい。
(壁ツールが無い時は画面メニューの作業画面からVW8.5建築+Rを選んで下さい)
モードバーの右端のボタンをクリックして、ダイアログを開いて下さい。
壁の厚み(幅)に200と入力して下さい。
中心線ボタンをクリックして、ダイアログを開いて下さい。
新規ボタンをクリックして下さい。
線種を選んで下さい。線の太さは(1)、実線にして下さい。
【OK】ボタンでダイアログをすべて閉じて下さい。

「階層メニュー」の「ツールマクロ」を選んで、ダイアログを開いて下さい。
【全てON】ボタンをクリックして下さい。
線の太さを記憶するチェックボックスが確認できますね?
これは、現在の属性パレットで選ばれている線の太さを記憶するものです。
文字、クラス、レイヤ、スナップなど、切り替え不要なチェックは外して下さい。
このとき、ツールにチェックがあるので、壁ツールが記憶されるわけです。
【OK】ボタンでダイアログを閉じて下さい。
コマンドの名前は「がいへき」として、【OK】ボタンです。
画面に新規のコマンドパレットが現れます。
「がいへき」という名前で、作成したばかりのマクロがありますね?

上の手順を繰り返して、「ないへき」のコマンドを作りましょう。
変更点は、
壁の厚み(幅)を、100と入力して下さい。
中心線の線の太さは、(40)を選んで下さい。

完成した2つのマクロを使ってみて下さい。
また、四角形ツールなどで線の太さを変えたりして作図もして下さい。
「がいへき」の中心線は細く、「ないへき」の中心線は太いはずです。

【セレクションポインタ】を選んで下さい。
余白をクリックして、図形の選択を解除して下さい。
この状態で、属性パレットで、太い線(40)を選んで下さい。
これは、線の太さの初期値を変更する操作です。
「がいへき」マクロで作図して下さい。
壁の外側の線が太くなったはずです。でも、中心線は変わらないはず。

では、マクロのプログラムを見てみましょう。
【option】キーを押さえたまま、
コマンドパレットの「がいへき」をダブルクリックして下さい。
ダイアログが開き、マクロのプログラムが表示されます。
PenSize(1);
というプログラムが何ケ所かにありますね?
一番最初に出てくるのが、中心線の太さです。
キャンセルボタンで、ダイアログを閉じて下さい。

【option】キーを押さえたまま、
今度は、コマンドパレットの「ないへき」をダブルクリックして下さい。
PenSize(40);
が、1つだけ見つかるはずです。
内壁の中心線は太さを40にしましたから、そのプログラムです。
40の部分を1に書き直して下さい。(半角数字ですよ)
PenSize(1);
になりましたね?
では【OK】ボタンです。

変更した「ないへき」のマクロを使ってみて下さい。
中心線が細くなったはずです。

これで、マクロの仕組みが(ちょっとだけ)判りましたから、
異常が起きるファイルのマクロを調べることができますね?
もし、PenSize(1);の部分が(40)などの他の数字に変わるなら異常です。


マクロ「作図」について教えて下さい。  satopy
email:
satop@anet.ne.jp  Sat Apr 8 8:00:05 Japan 2000

管理人さん、こんにちは
「VectorWorksガイド」やっと2/3ほど読み終えました。
自分用に少しづつカスタマイズしていこうと新しいファイルを作ってみましたが、
読んだことと、理解したことは全く違うと実感しています。
これで、3Dを仕事に使えるようになるのだろうかと少々不安です。

とっても初歩的な質問で恐縮なのですが、マクロ「作図」について教えて下さい。
外壁を作成するマクロなんですが、他の作業をして、また、外壁作図マクロを使う
と通り芯だけ太くなってしまいます。これはどうしてでしょうか?
最初に通り芯の太さを設定するのをわすれてマクロ登録したらしいので、一度
抹消して作り直したのですが、だめでした。
マクロについては全くの素人なので、おかしな事をしているのかもしれません。




 plugramer
email:  Tue Mar 7 21:43:09 Japan 2000

>Windows版のMiniCADでMiniPASCALまたは、SDKを利用して
>VCで作成したDLLの関数を呼び出すことはできるのでしょうか?
関数とは、自作の算術関数的なものを指していますか?
基本的にCやC++で構築出来るものなら、算術関数・データ構造体・
マクロルーティン等何でも利用出来ます。
VectorWorks上で利用出来るかという意味でしたら、VectorWorks版の
SDKを使用して再作成する必要があります。
りコンパイルレベルと云う意味です。


RE:VCで作成したDLLをよべますか?   管理人
email:
aoyama@hokkai.or.jp  Mon Mar 6 20:28:54 Japan 2000

管理人です。
Scriptは不得手なので、直接お答えできませんが、
もう少し、前後の事情を説明して頂くと、皆さんも回答しやすいと思います。
また、ハンドル名をお書き頂くと、コミュニケーションが取りやすいと思います。
よろしくお願いいたします。


VCで作成したDLLをよべますか?  
email:
orita@noshsys.co.jp  Mon Mar 6 17:19:03 Japan 2000

Windows版のMiniCADでMiniPASCALまたは、SDKを利用して
VCで作成したDLLの関数を呼び出すことはできるのでしょうか?


 plugramer
email:  Thu Dec 9 14:41:29 Japan 1999

lotondaさん はじめまして

これは便利ですね。
フォルダで階層分類したシンボルでも一発でたどれますね。


procedure ActivateSimbol lotonda
email:
lotonda@pop06.odn.ne.jp  Wed Dec 8 0:08:47 Japan 1999

非常にシンプル、でも結構使える(とぼくは思っている)スクリプトを提供。

procedure ActivateSimbol;
{アクティブレイヤで選択されているシンボルと同じシンボルをアクティブにします。 by lotonda 1999.11}
begin
SetActSymbol(GetSymName(FSActLayer));
end;
run(ActivateSimbol);


Vecter WorksとMini CADの相違点に関して  PERO
email:
pero@ha.bekkoame.ne.jp  Wed Oct 27 1:47:44 Japan 1999

Vecter Worksは、Mini CADの進化版として、非常に好評ですが、何故か、Mac版とWindows版では、その販売価格に、違いが、在ります。


Re(1-3):3次元座標をワークシートに取り込みたいのですが  plugramer
email:  Sun Oct 24 4:49:56 Japan 1999

>指定した座標を寸法ツールの用に図面上に印字.....
指定した座標=マウスクリックしたポイントと解釈して良いでしょうか?。
GetPt( x, y:REAL );関数を使うとユーザーのマウスクリックを待って、クリックされた点の座標を返します。
座標値を文字列データに変換した上で、
TextOrigin( x, y );
BeginText;
FinalStr {座標値を表す文字列変数}
endText;
とすると、クリックした位置に座標値の文字列を生成することになります。


処で、下記の書籍はご存じでしょうか?。
参考になるアイデアがたくさん解説されています。
未だでしたら、是非一度検討してみては如何でしょうか。

書籍名:「MiniCADプログラミング入門」
著 者:大河内勝司+中野洋一
出版者:翔泳社
価 格:3800円(税別)


Re(1-2):3次元座標をワークシートに取り込みたいのですが  plugramer
email:  Sun Oct 24 4:23:46 Japan 1999

>ワークシートにある座標値をプロットしたいのですが.....
座標値を基準点でプロットしますか?。それとも多角形としてプロットしますか?。

>テキストタブ区切りを取り込むのでは無くていい方法は......
VectorWorks以外のソフトのデータを読み込む方法に関することでしょうか?。
あるいは、VectorWorksのワークシートからの読み込みでしょうか?。


Re(1-1):3次元座標をワークシートに取り込みたいのですが  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Sun Oct 24 4:10:43 Japan 1999

North&Eastさんがどの程度Scriptの経験をお持ちか分かりませんので、取り敢えず考え方をお話ししてみます。
VectorWorksのドキュメントに定義(作成)された、全てのオブジェクト(図形や文字列などの総称)は、何らかの図形属性情報を与えられており、 3次元図形の場合3次元座標、X、Y、Zを持っていますので、これを取り出して利用します。
余談ですが、データパレットが情報を持っている様に見えますが、データパレットは図形オブジェクトの属性情報を表示するビューワーの様なものと思って下さ い。

簡単に全体の流れを考えてみます。
前提として、「柱状体」コマンドで作成されたオブジェクトを、「3D多角形に変換」コマンドで変換されているものを対象とします。

1000)対象となる3次元図形の定義範囲(レイヤー等)を設定します
1200)記入するワークシートを新規に作成します
2000)図形毎に ----------------------------------------------------
2100) ハンドル接続により該当の3D図形にアクセスします
2200) 底面になっている3D多角形にアクセスします
2210) 頂点毎に --------------------------------------------------
2220)  3D多角形の頂点の3次元座標、X、Y、Zを取り出します
2230)  座標毎に ------------------------------------------------
2231)   ワークシートの入力セル位置を設定します
2232)   3次元座標、X、Y、Zの数値を文字列に変換します
2233)   該当セルに座標数値文字列を記入します
2234)  --------------------------------------- 2230>>2233 繰返し
2240) ----------------------------------------- 2210>>2234 繰返し
2300) 頂面になっている3D多角形にアクセスします
2310) 頂点毎に --------------------------------------------------
2320)  3D多角形の頂点の3次元座標、X、Y、Zを取り出します
2330)  座標毎に ------------------------------------------------
2331)   ワークシートの入力セル位置を設定します
2332)   3次元座標、X、Y、Zの数値を文字列に変換します
2333)   該当セルに座標数値文字列を記入します
2334)  --------------------------------------- 2330>>2333 繰返し
2340) ----------------------------------------- 2310>>2334 繰返し
2300)------------------------------------------- 2000>>2340 繰返し

とこのような具合でしょうか。
ポイントは、
1)3D図形はグループ図形です。
  FIn3D(TargetObjectHandle);関数でグループの中の3D多角形にアクセスします
この中で、一番先頭が底面に相当する3D多角形で最後が頂面に相当するものです。
(NextObj(TargetObjectHandle)関数で順番に手繰っていきます)
2)ワークシートには文字列として記入する点です。
この為、座標数値を入力用の文字列に変換加工する必要があります。
3)GetVertNum(TargetObjectHandle);関数で3D多角形の頂点数を、
GetPolyPt3D(TargetObjectHandle,VertexPos,Xaxis,Yaxis,Zaxis);関数で頂点毎の
座標を得ることができます。
などの点です。


3次元座標をワークシートに取り込みたいのですが  North&East
email:
east_96@ga2.so-net.ne.jp  Fri Oct 22 23:58:27 Japan 1999

ちょっと、お聞きしたいのですが?。
構造物等の3次元座標、X、Y、Zをワークシートに取り込みたいのですが
リソースパレットにある座標値をワークシートに書き込みたいのですが、どうすればいいのか分かりません。
また、ワークシートにある座標値をプロットしたいのですが、テキストタブ区切りを
取り込むのでは無くていい方法はないのでしょうか。
また、また、出来れば指定した座標を寸法ツールの用に図面上に印字したいのですが
いろいろしたい私に、考え方とアドバイスください。



Re(13):起動時に実行するスクリプトはつくれますか?   管理人
email:
aoyama@hokkai.or.jp  Tue Oct 5 21:38:48 Japan 1999

plugramer会員、江戸の黒板当番さん、ご回答ありがとうございます。
特にplugramer会員は会員登録頂いたその日から大車輪の活躍です。
(VectorWorks 談話室の方でも)
高度な会話に管理人は呆然とするばかりですが、kuniさんの開発が順調に進むなら、
最終的には我々素人にも恩恵が得られるものと期待しています。
このところのやり取りで、びびった方と興味を持った方がいることと思います。
ScriptはVectorWorksの重要な要素ですから、初心者でも挑戦してみる価値ありです。
頼りになるアドバイザーもいることですし、
ひとつ、思いきり初心者な質問などいかがですか?


Re(12):起動時に実行するスクリプトはつくれますか?  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Thu Sep 30 10:19:06 Japan 1999

少しはお役に立てた様で何よりです。
一つ言い忘れていたことが有りましたので、付け加えます。
VC++で開発するWindows版のPluginの場合、アイコンリソース等をMacintoshの
リソースエディターで作成したものを流用しています。Macが混在する環境ではその
方がやり易いからかも知れませんが、Windows環境オンリーでアイコンリソースを含
めて開発出来るかどうか、一度A&A社に確認されておいた方が宜しいかと思います。
出来ない場合MacintoshマシーンとResEditと云うソフト(安価)が必要になります。

Kuniさんは、VectorWorksを戸建住宅設計用に社内向けカスタマイズされようとお考えなのですか?。
VectorWorksおよびSDKの同志が増えそうなことを喜ばしく思っています。
ご質問にはご協力したいと思います。


Re(11):起動時に実行するスクリプトはつくれますか?    kuni
email:
ueeda@osk.enicom.co.jp  Wed Sep 29 9:55:14 Japan 1999

plugramer さんへ

色々と細かい内容にまで、御回答していただき 本当にありがとうございます。
心配していた事がほとんど解決したような感じです、後は実際にVectorWorksを
購入して、カスタマイズに挑戦していきたいと思っています。
実際に製作をしていくとさまざまな問題が発生するち思いますが、その時はまた
ここに 書き込ませていただきますのでよろしくお願いします。
なお、VC++5.0 についても持っていますのでOKです。

最初に書けばよかったのですが、VectorWorks の検討をしている理由は、一戸建て
住宅のモデルをCADをカスタマイズするために、最も 安価な物を探しているためで、
元々、ずっとAutoCADのカスタマイズをしてきましたので、AutoCAD Architectural Desktop(9/24発売)も検討しましたが、値段の割にはカスタマイズ性も悪いため
最適なのが VectorWorks かな?と思って資料の調査を始めたところ、疑問点が出て
きたのでここで色々と質問させていただいている次第です。



Re(10):起動時に実行するスクリプトはつくれますか?  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Tue Sep 28 1:36:44 Japan 1999

VectorWorks のメニューに登録された Plugin であれば実行可能だと思います。VectorScript の DoMenuTextByName(subMenu:STRING; index:INTEGER);コマンド関数がそれです、subMenu 部分に SDK で設定する MITMリソース名を指定します。
(但し、これに関しては実証経験がありませんので確信が持てません。あしからず)

SDK に関しては一度下の HP を覗いて下さい。「MacPaPa」はMac開発者(大御所)の方が運営しているサイトで、VectorWorks 用SDKの超訳がダウンロードできます。
また、ここから diehlgraphsoft.com の SDK ダウンロードページに飛べます。
http://www.enwit.co.jp/MacPaPa/

MiniCAD 用の日本語版のマニュアルは、A&A 社の「MiniCAD SDK コンソーシアム」に入会しないと入手できません。
Windows 版 VectorWorks 用の Plugin を開発する為には、VC++5.0 が必要です。
SDK 自体が VC++5.0 でプリコンパイルされたライブラリーファイルで提供されるので....。 VC++4.2では MiniCAD7 用のものしか開発できません。VC++5.0 は現在店頭にはありませんが、VC++6.0 で何とかなります。(私は VC++6.0 を使っています)
Professional Edition 等 dll を開発できるものを用意してください。
Mac 版は CodeWarrior Pro1(Pro2でも)を使います。

確かに、VC++ だの CodeWarrior が必要というのは敷居が高いことになりますよね。
ただ、SDK で作れるものはアプリケーションレベルのソフトですから止むを得ないでしょう。VectorScript は、VectorWorks の機能のほとんどをカバーしています。一般的なユーザーの要求は SDK を利用するまでも無いと云うことでしょうか?。
VectorWorks(MiniCAD)は、生まれも育ちも Macintosh ですから、ただでさえ起動に時間のかかる Mac アプリとしては、kuni さんの様なニーズが芽生えなかったのかも知れませんね。
VectorScript への要望項目としてプッシュしていきましょう。


Re(9):起動時に実行するスクリプトはつくれますか?    kuni
email:
ueeda@osk.enicom.co.jp  Mon Sep 27 15:13:18 Japan 1999

plugramer,江戸の黒板当番 さんへ

SDKを利用すれば、私の考えていた項目は、ほとんど出来てしまいそうですね。
(とりあえず 安心しました)
1つだけ確認したいのは、SDKで作成したPlugin をVectorScript から実行出来る
でしょうか。

SDKについて本格的に調査したいのですが、正規ユーザーでなくてもダウンロード
出来るんでしょうか、また どこで出来るんでしょうか。(MiniCAD 用の日本語版
のマニュアルも含めて)。
VC++の方は、環境として VC++4.2がありますのでOKです。
また、SDKに関しての情報はどこにいけば最も取得できるんでしょうか。
(MiniCAD SDK コンソーシアム は正規ユーザーしか利用できないようなので。)

私としては、何とか開発できそうですが、Windows環境では VC++ でのSDKを
使用しないといけないというのは、少し問題ですね、個人ユーザーでは VC++
の購入とか開発環境の整備とか色々と面倒で費用のかかることになって 敷居が高い
ような気がしますね。
AutoCAD のように CAD起動時の引数にてVectorScriptを指定して実行できるような
機能があると非常に使用しやすいと思うんですが どうでしょうか。



Re(8):起動時に実行するスクリプトはつくれますか?  plugramer
email:
cwlaputa@ra2.so-net.ne.jp  Mon Sep 27 7:16:10 Japan 1999

>Vector Works を起動した時に、実行するような スクリプトは作成可能
>でしょうか?
>C++ でのプラグインでは可能でしょうか?
>(行いたいのは、起動時に 特定のファイルをopenし、DBからの情報
>にて、自動作画するなどのことです)
>よろしくお願いします。
C++の扱いが視野に入っているのでしたら、SDKを利用する手が有ると思いま
す。
SDKで作るPluginの場合、Vector Works の起動時に最終使用時に設定されて
いた WorkSpace に設定されている、メニュー&パレット内の各 Plugin が
ロードされます。 各 Plugin ではユーザーのアクションを受け取るノード
として、幾つかのインターフェイスが用意されています。
その第一番目が、"WorkSpace が選択されたら..."と云うものです。
これは Vector Works の起動時にも自動的に実行されます。
ここには通常メモリーの確保や初期化、必要データファイルの読込み、起動
画面の生成などをコーディングしますが、SDKでは基本的に OS 用に利用で
きるコードは何でも利用できますから、この部分に目的の操作をコーディン
グすれば OK かと思います。
SKD はちょっと荷が重いと云うことでしたら、VectorScript で作った Plugin
を SDK の Plugin から実行させることも可能です。
>(行いたいのは、起動時に 特定のファイルをopenし、DBからの情報
>にて、自動作画するなどのことです)
この部分は、VectorScript で十分対応できそうですね。
ちなみに、SDK 開発キットは無償でダウンロードできます。マニュアルは VW
用の物は英語のみ(概説は和訳有り)ですが、MiniCAD 用の日本語版があり
大方の部分はそのまま使えます。
VectorScript の起動だけでしたら、2〜3行のコードを追加するだけのこと
ですが、VC++ の購入と準備設定にはそこそこ時間と費用がかかります。


Re(7):起動時に実行するスクリプトはつくれますか?   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Fri Sep 24 11:14:27 Japan 1999

>この機能がそのままWINDOWSで使用できればいいんですけど。
kuniさんのお考えではVectorWorks側だけで可能な事なのでしょうか?
もし可能ならばここだけでなく江戸でもA&Aさんに作って欲しいというおねだり
キャンペーンを大々的にしなくてはいけないなどと先走っているのですが
いかがなのでしょうか?
両方のプラットフォームで外部から制御できるという事はVectorWorksの新しい
可能性ではないかと思うのです。是非そこいらへんも含めて教えて下さい。


Re(6):起動時に実行するスクリプトはつくれますか?    kuni
email:
ueeda@osk.enicom.co.jp  Tue Sep 21 10:25:07 Japan 1999

江戸の黒板当番 さんへ

江戸の黒板当番 さん > VectorWorks のコマンドラインでの入力機能がVector                 Scriptと理解していたのですが違いますか?

Vector Script は コマンドラインでの入力機能という位置ではなくて、
マクロ機能だと思います。
私が、コマンドラインでの入力 と記載しましたのは、色々な操作(線を引く等)
が line 0 0 10 10  の様にキーボードから 入力するような
インターフェイスがあるという事です。
この様な機能があれば、VectorWorks のWindowのハンドルを見つけて コマンド
を送信できるので 非常に便利だなと思っただけです。

江戸の黒板当番 さん > AppleScriptでVectorWorks の起動をできれば
          Vector Scriptとの連係になると単純に考えてしまったのですが、
          甘かったのでしょうかね。

これは立派な連係だと思います。この機能がそのまま WINDOWS で使用できればいいん
ですけど。



Re(5):起動時に実行するスクリプトはつくれますか?   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Tue Sep 21 8:58:08 Japan 1999

VectorWorks のコマンドラインでの入力機能がVector Scriptと理解していた
のですが違いますか?AppleScriptでVectorWorks の起動をできれば
Vector Scriptとの連係になると単純に考えてしまったのですが、
甘かったのでしょうかね。
後基本的に AppleScriptとVisiualBaisicとの違いが良く分かっていないだけの
ことかもしれませんが....


Re(4):起動時に実行するスクリプトはつくれますか?    kuni
email:  Mon Sep 20 15:55:26 Japan 1999

江戸の黒板当番さん、あずまさん 色々な情報をありがとうございます。

OSが Windows であるため、AppleScript が使用できないのが残念です。

VB等から、VectorWorks を操作するとなると、何らかの通信の手段が必要ですが

VectorWorks が コマンドラインでの入力機能がない事を考えると sendkey や

sendmessage のAPIで操作するのも無理な感じですね。

どうすればいいのでしょうか? トホホホ



Re(3):起動時に実行するスクリプトはつくれますか?   管理人
email:
aoyama@hokkai.or.jp  Mon Sep 20 10:16:29 Japan 1999

あずまさん、ありがとうございます。
日本語の書式を並記して頂いたので、とてもわかりやすいです。
この書き込みでAppleScriptに挑戦したいという会員が出ると思います。
今後とも、よろしくお願いいたします。
では、いつぞやのように、どなたか口火を切りませんか?
この呪文をどないせいと?


Re(3):起動時に実行するスクリプトはつくれますか?   江戸の黒板当番
email:
8550wgs@ddw.co.jp  Mon Sep 20 9:55:28 Japan 1999

てっことはWindowsならVisualBasicで外から制御できるのかしら?
Excelに座標数値どんどん入れていってその座標取込み作図という事が
やはりできるんだ。できるといいなということはトライしてから
できなかったらいう言葉ですね。早速時間を作りトライしてみます。
分からない事があったらまた教えて下さい。


Re(2):起動時に実行するスクリプトはつくれますか?   あずま
email:
azuma@lemon.ifnet.or.jp  Mon Sep 20 6:04:28 Japan 1999

こちらの会員ではないんですがかきこませていただきます。
うまく答えになっていると良いのですが。
VectorWorksはAppleScriptに対応しているようなので起動時にVectorScriptを実行さ
せることも可能です。

たとえば英語の書式なら

tell application "Finder"
with timeout of 1200 seconds
activate
select file "VectorWorks8J2"
open selection
end timeout
end tell
tell application "VectorWorks8J2 FAT"
DoScript "Rect(0,0,20,20);Oval(0,0,20,20);"
end tell

日本語の書式なら

アプリケーション“Finder”について
タイムアウト1200秒で
アクティベート
ファイル“VectorWorks8J2”を選択する
選択範囲を開く
以上
以上
アプリケーション“VectorWorks8J2 FAT”について
“Rect(0,0,20,20);Oval(0,0,20,20);”をDoScript
以上

というAppleScriptで、外部からVectorWorksを起動させ、ついでにVectorScriptを制
御して四角と円を描くことができます。


外部ファイルのデータで作図  Kazu
email:
t-kazu@ka2.so-net.ne.jp  Thu Sep 16 11:59:11 Japan 1999

こんにちは、Kazuです。

以前、MiniPascal(懐かしい...)で、テキストファイルのデータを
読み込み、データを解釈して作図する、ということをやらせたこと
があります。それも、あらかじめ多角形とわかっているものでした
から、スクリプトを作成するより、データを用意するほうが大変で
した(^^;)。本末転倒か?

が、そういったことを起動時に自動的に行うという機能は聞いたこ
とがありません。VectorWorks以外のソフトとの連携作業になるの
でしょうね。まぁ、起動時に勝手に何かやられちゃうっていうのは、
考えようによっては恐ろしいことですよね。


Re.:起動時に実行するスクリプトはつくれますか?   江戸の黒板当番
email:
8550wgs@ddw.co.jp   Tue Sep 14 23:14:57 Japan 1999

アプリケーションとしてのVectorWorksをAppleScriptやVisualBasicで立ち上がる
かと言うことでしょうか?MiniCADの時代からあまり聞かない話なので対応して
いないのかもしれません。C++のPlug-inはMiniCADSDK とCodeWarriorV10とで
作れると言うことがありましたが、A&A社等の本格的開発している所以外
作っていると言う話も聞きません。
VectorWorksが起動していいればDBなどから座標数値をコピーペーストすれば
自動的に作図はやったことがあります。
VectorWorksの外からのDBやExcelのデータを呼びに言って自動に作図してくれる
と言うのは夢なのですがVectorWorksがAppleScriptやVisualBasicに対応しないと
できないように思えます。


起動時に実行するスクリプトはつくれますか?   kuni
email:  Wed Aug 25 18:29:50 Japan 1999

みなさん こんにちは VectorWorks の導入を検討しています(超初心者です)。

現在は、AutoCAD のカスタマイズの仕事をしておりまして(約10年ほど)、
今回は、カスタマイズの出来るCADで AutoCADよりも安価なCADという事と、
建築向けのCADという事で、特にカスタマイズ性の検討をしてますが、わからない事
が多いため、質問させていただきます。
(現在はDEMO版にて確認中です)

Vector Works を起動した時に、実行するような スクリプトは作成可能
でしょうか?
C++ でのプラグインでは可能でしょうか?
(行いたいのは、起動時に 特定のファイルをopenし、DBからの情報
にて、自動作画するなどのことです)
よろしくお願いします。




「ごめんなさい」です   よーいち
email:
mono@kobe.email.ne.jp  Fri Aug 6 17:34:42 Japan 1999

lotondaさん&Kazuさん,くるみの森さんこんにちは!
KOBEよーいちです。
ごめんなさい。
もう一度 角から角までよーく見直してみました。
なんと最後の一行をコピーしていませんでした。

Run(JoinLine);

神戸もとても暑くて、ついつい安物のアイリッシュウイスキー
片手に鼻歌まじりで組み込んだのが間違いのもとでした。
皆さん大変お騒がせいたしました。
lotondaさん直接Mailしてすみませんでした。
今後ともよろしくお願いします。
*****
KOBEにお越しの際はぜひご連絡下さい。
皆さんの中には建築設計事務所の方も多いと思います。
じつは私の事務所は築後77年「渡部 節」設計の古い
ビルの中にあります。
もし興味がお有りでしたら御案内しますヨ。
(これは「喫茶室」でするはなしでしたね。)


RE:はじめまして!さっそくお助けをRE:はじめまして!さっそくお助けをはじめまして!さっそくお助けを   くるみの森
email:
atelier105@mx1.tonet.ne.jp    Thu Aug 5 22:43:35 Japan 1999

 よーいちさん、こんばんは。くるみの森です。
へんですね。うちでもVW8.0.1J2ですが、問題なく動作しますけど。
ところで、私のような初心者には、
> Plug-insフォルダから直接立ち上げると・・
がよく解りません。 Mon Jun 14 0:52:34 の lotondaさんの「呪文 」に書かれてある
初心者へ・・・のノプラグインコマンドから編集し、メニュー・「設計」・
ツールパレットの編集ノの通りにしてみても、だめなのでしょうか。
それとも、MacかWinの問題なのでしょうか。うちはMacですが。
まったく答えになってなくてすみません。でも、うちではこのツール活躍してます。


はじめまして!さっそくお助けを.....   よーいち
email:
mono@kobe.email.ne.jp  Thu Aug 5 18:18:23 Japan 1999

はじめまして。神戸の杉山 陽一と申します。
自己紹介はあらためて「談話室」でさせて頂くとして
さっそくあつかましくお助けのお願いです。
lotondaさん&Kazuさんの作られた「線分結合ツール」をさっそく
組み込んだのですが、どうもうまくというか全く作動しません。
Plug-insフォルダから直接立ち上げると「このファイルは新しいバージョンの
VectorWorksで保存されているか.........読み込めません。」という
アラートがでます。
「線分結合ツール」はVectorWorks8J2では使えないのでしょうか?
それとも基本的な間違いをしているのでしょうか?
お手数ですがお教え下さい。
よろしくお願いいたします。


RE4:MiniCADてWIN98てつかえないのですが   管理人
email:
aoyama@hokkai.or.jp  Sat Jul 10 7:16:00 Japan 1999

大谷さん、今後とも御贔屓に!
当クラブは会員意外にもオープンなのが自慢です。
でも、メロンが食べたくなったら、会員になって下さい。


RE:Re:Re:MiniCADてWIN98てつかえないのですが     大谷
email:
tetufumi@terra.dti.ne.jp  Fri Jul 9 20:30:11 Japan 1999

管理人さん、はじめまして、大谷です。

>大谷さん、ありがとうございます。
>会員でなくても助けて下さる方は、み〜んな神様です。
>今後ともよろしくお願いいたします。

自分はいつも色々な場所の掲示板や談話室で質問(質問は立派な意見、発言だと自分は思います)をして、見ず知らずの方から助けて頂いています。いつも GIVEばかりなのです。
自分の持っている情報が役にたてばいいな(TAKEもしたい!)、と思ってレクしてみました・・・。
自分も質問をすることがあると思いますが、
その時はこちらこそよろしくお願いします。


RE:Re:MiniCADてWIN98てつかえないのですが   管理人
email:
aoyama@hokkai.or.jp  Tue Jul 6 21:56:18 Japan 1999

大谷さん、ありがとうございます。
会員でなくても助けて下さる方は、み〜んな神様です。
今後ともよろしくお願いいたします。


Re:MiniCADてWIN98てつかえないのですが   大谷
email:
tetufumi@terra.dti.ne.jp  Tue Jul 6 18:39:26 Japan 1999

HAYAさん、はじめまして、大谷といいます。
会員じゃないんですけど、談話室お借りします。

>最近やっとWin98にしたのですかMinICADが動きません
>なんだかランタイムエラ−と言うものがでてきます。
>どなたか解決策教えてください。

そのランタイムエラ−ですが、
エラー画面のタイトルバ−にMicrosoft Visual C++ Runtime Library
と表示されていて、1行目に、Runtime Error! 
2行目にProgram:(MiniCad.exeのフルパス)
3行目に、abnormal program termination
と表示されていますか?そして、その画面のボタン(OKボタンのみ)を押すと、MiniCADの
ウインドウもエラー画面といっしょに閉じてしまう。というエラーですか?

もしもこのようなエラーだったら、
UNIDRV.DLLというプリンター ドライバー ライブラリーが必要だと思います。
このDLLは、Windows98のCD-ROMに収録されているのに、標準ではインストールされない
(自分の場合ですが)みたいです。
自分の場合、FAXソフトをインストールの途中で、
『Windows95用のファイルで見つからないファイルがあるので、Windows98 CD-ROMを
CD-ROMドライブに入れるように・・・』という指示が有り、
この時インストール(C:\Windows\Systemに)されたのがUNIDRV.DLLでした。
それから、MiniCAD7が起動出来るようになったので、
ほぼ間違い無くUNIDRV.DLLが無いことが原因だと思います。

以上です。失礼いたします。




いや、お恥ずかしい  Kazu
email:
t-kazu@ka2.so-net.ne.jp  Tue Jul 6 11:57:13 Japan 1999

こんにちは、Kazuです。

さすがにlotondaさんが改良するとスマートですね(^^)。
俺の「支障なく動けば満足」という考え方だと、そうはいきません。
自慢しているワケではありませんよ。

> あと、kazuさんの名前をこのツールの作者として勝手に
> 併記しちゃったんですけど、いいですよね。

作者というにはあまりにも貧弱な「改良」しかできません
でしたが、クレジットに入れていただき、ありがとうございます。

ハンドルの比較についてですが、単純に

h1 <> NIL

という比較ができるのであれば、ハンドルが変数に収まっていれば
比較ができるんじゃないかな、と深く考えもせずやってみました。
たまたま成功しました(^^;)。

基本的に自分はメンドクサガリなので、便利な道具を使いたいという
欲求は常にあります。それがScript向き(?)なのでしょうかね。


さらなる改良を試みました。  lotonda
email:
lotonda@pop06.odn.ne.jp  Mon Jul 5 21:50:12 Japan 1999

kazuさん、ありがとうございます。
ハンドルを比較できるとは知りませんでした。
そこでぼくなりにさらなる改良を試みました。
ひとつは、線分を結合する前に2つのハンドルを比較して、
同じ図形だったらそのまま振り出しに戻りる様にしてみました。
そしてもう一つ、ダブルクリックでセレクションポインタに戻るという
他のツールにある便利さを盛り込んでみました。
いかがでしょう?
あと、kazuさんの名前をこのツールの作者として勝手に
併記しちゃったんですけど、いいですよね。

くるみの森さんも入れ替えて使ってみてくださいね。
Scriptは見た感じは素っ気なくて取っ付きにくいものですけど、
ちょっとつついてみると以外と簡単なものですので、くるみの森さんも
チャレンジしてみてください。
くるみの森さんの感動する気持ちだけで、相当な才能の持ち主だと思います。

PROCEDURE JoinLine;
{Join two lines.by lotonda & kazu.1999.06.28}

VAR
h1,h2 : HANDLE;
x1,y1,x2,y2 : REAL;

BEGIN
DSelectAll;
GetLine(x1,y1,x2,y2);
IF (x1= x2) & (y1= y2) THEN
Begin
SetTool(-128);
end else begin
IF (x1<> x2) | (y1<> y2) THEN
Begin
h1:= PickObject(x1,y1);
IF h1 <> NIL THEN
Begin
SetSelect(h1);
h2:= PickObject(x2,y2);
IF h2 <> NIL THEN
Begin
SetSelect(h2);
IF (GetType ( h1 ) = 2) & (GetType ( h2 ) = 2) & (h1 <> h2) THEN
Begin
DoMenuText('線分を結合');
Redraw;
SetDSelect(h1);
SetDSelect(h2);
Redraw;
end else begin
SetDSelect(h1);
SetDSelect(h2);
End;
end else begin
SetDSelect(h1);
End;
End;
End;
End;
END;
Run(JoinLine);


線分結合の呪文を改造してみました  Kazu
email:
t-kazu@ka2.so-net.ne.jp  Mon Jun 28 16:54:48 Japan 1999

こんにちは、Kazuです。

lotondaさんの呪文、さっそく使わせてもらってます。そこで、お礼と
まではいきませんが、自分なりに改造した呪文を公開します。
といってもlotondaさんの想定する「ベテラン」ではありませんので、
以下のような呪文しか思いつきませんでした(^^;)。

●2つのハンドルを比較して、同じなら警告ウインドウを表示させ、
 先頭に戻るという、思いつくまま簡単な改造です。いまのところ、
 スクリプトのエラーもなく動いています。

ただ、同じ直線を選択したエラーの後に、ツールがセレクションポインタ
になってしまいます。作業は継続できる(抜けられない)ので、それが
今のところ問題です。解決する技術と根気は、まだありません(^^;)。

このように、まだ改良の余地のたくさんある改造ですが、これをきっかけに、
更なる改良がなされればいいですね(^^)。


PROCEDURE JoinLine;
{Join two lines.by lotonda.1999.05.03}
LABEL 1;
VAR
h1,h2 : HANDLE;
x1,y1,x2,y2 : REAL;

BEGIN
1:
DSelectAll;
GetLine(x1,y1,x2,y2);
IF (x1<>x2) | (y1<>y2) THEN
Begin
h1:= PickObject(x1,y1);
IF h1 <> NIL THEN
Begin
SetSelect(h1);
h2:= PickObject(x2,y2);
IF h2 <> NIL THEN
Begin
SetSelect(h2);
IF h1 = h2 THEN
Begin
AlrtDialog ('異なる2本の直線を選択してください');
GOTO 1;
End;
IF (GetType ( h1 ) = 2) & (GetType ( h2 ) = 2) THEN
Begin
DoMenuText('線分を結合');
Redraw;
SetDSelect(h1);
SetDSelect(h2);
Redraw;
end else begin
SetDSelect(h1);
SetDSelect(h2);
End;
end else begin
SetDSelect(h1);
End;
End;
End;
END;
Run(JoinLine);


RE:呪文   くるみの森
email:
atelier105@mx1.tonet.ne.jp  Tue Jun 15 14:29:24 Japan 1999

 すみません。感動のあまり題名等書き忘れました。
前の書き込みは私です。


 
email:  Tue Jun 15 14:26:35 Japan 1999

またまた、くるみの森です。初心者のくせしてたびたびの登場ですみません。
だってもう! ‥感動するばかりなんだモン。こんどのlotondaさんのもいいですね。
こんなすぐれものを簡単に、タダで教えてくれるなんて、皆「太っ腹!」
もともとJWCad使いだった(今もこのMacの隣でJWが起動してます。ちなみにハードは
PC-98BX2という、今では世界遺産登録をしたくなるような代物ですが、バリバリ図面を生産してます)私としては、このツールは本当に使いやすく、ま さに\(^0^)/の
気分です。プラグインコマンドというのも初めて引き出してみました。
ここ一週間ほどで、なんだかずいぶんいろんなことを覚えてしまいました。
ますます、vectorWorks と、vectorWorksClub北海道にはまりそうです。


呪文  lotonda
email:
lotonda@pop06.odn.ne.jp  Mon Jun 14 0:52:34 Japan 1999

便利な呪文が一つ出来たので紹介します。
1ヶ月ちょっとの試用期間を経てきたのでご安心を。

どんなツールかというと、
おなじみのコマンド「線分を結合」をツール化したものです。

なぜ便利かというと、
1. いちいちシフトキーやオプションキーを押して2本の直線を選択しなくてもいい。
2. 連続して何本でも結合OK。
3. 失敗も許してくれる。(フィレットツールなんかだと、失敗は許されないって感じで
「2本の直線を選択してください」なんてアラートが出ますよね。そしてまた一から
やり直し。何でこうスパルタなのかなーっていつも思ってしまうんですけど。)

使い方は、
ただ結合させたい2本の直線をクリックするだけです。
直線以外はもちろん結合できません。直線以外をクリックしたり、
何もないところをクリックしても無言で却下されます。
でも許してくれます。そのまま続けてください。
他のツールを選択すると抜けられます。

ただ一つだけバグ、
というかプログラムの甘さがあります。
同じ直線を選択したときにエラーが出ます。
何ら問題のないエラーですので、そのままOKボタンを押してください。

その他の注意
コマンドパレットに作っても使えることは使えますが、全然便利じゃありません。
これはあくまでツールなので「プラグインコマンド...」を使って、
ツールとして組み込んでください。


初心者の方へ
いかにしてこの呪文をVectorWorksにツールとして組み込むのかを説明します。
至って簡単、まず下の呪文をコピーしておいてください。コピーの範囲は
見た感じ呪文だなーと思われる部分です。
次にVectorWorksを起動して、メニューから「プラグインコマンド...」を選んで、
プラグインコマンド編集ウィンドウが出るのを待ちます。そして新規ボタン、
名前を付けます。とりあえず「線分結合ツール」にでもしましょうか。
ここを忘れないでください。OKボタンを押す前に、下のラジオボタンから
「ツール」を選びます。それでOKです。
プラグインコマンド編集ウィンドウに戻ると、右側に今作ったばかりのツール
が選択された状態で出来ています。これではまだ中身が空です。
編集ボタンを押してください。そこではじめてさっきコピーした呪文をペーストします。
そしてすぐさまOKボタン、さらにOKボタン。
これでプラグインツールが出来上がりました。とりあえず一段落。
でもまだ使えません。
今度はメニューの「設計...」を使って、ツールパレットに組み込んでください。
左側に「その他」というフォルダがあり、その中にさっき作ったツールが出来ています。
それを適当なパレットにドラッグするだけです。
(ごめんなさい、詳しくは、マニュアル参照)

ベテランの方へ
上記のバグ、フィックスしていただけないでしょうか。



PROCEDURE JoinLine;
{Join two lines.by lotonda.1999.05.03}

VAR
h1,h2 : HANDLE;
x1,y1,x2,y2 : REAL;

BEGIN
DSelectAll;
GetLine(x1,y1,x2,y2);
IF (x1<>x2) | (y1<>y2) THEN
Begin
h1:= PickObject(x1,y1);
IF h1 <> NIL THEN
Begin
SetSelect(h1);
h2:= PickObject(x2,y2);
IF h2 <> NIL THEN
Begin
SetSelect(h2);
IF (GetType ( h1 ) = 2) & (GetType ( h2 ) = 2) THEN
Begin
DoMenuText('線分を結合');
Redraw;
SetDSelect(h1);
SetDSelect(h2);
Redraw;
end else begin
SetDSelect(h1);
SetDSelect(h2);
End;
end else begin
SetDSelect(h1);
End;
End;
End;
END;
Run(JoinLine);


お互いにレベルアップしていきましょう   よっち
email:
hideto@hokkai.or.jp  Sun Jun 13 21:37:36 Japan 1999

くるみの森さん、お役に立ててなによりです。(^^)
わからないことがあったら、この場で情報交換できれば
お互いのレベルアップにつながりますし、
それこそが、このクラブの存在価値だと思います。
くるみの森さんもアドバイスできることがあったら
ぜひ、掲示板に書き込んであげてください。
私もいろいろお世話になるかと思うのでよろしくお願いします。

私も初心者なので・・・(^_^;


Re:MiniCADてWIN98てつかえないのですが   トトロ
email:
totoro@badboy.co.jp  Sun Jun 13 21:32:21 Japan 1999

>最近やっとWin98にしたのですかMinICADが動きません
Win98はMiniCAD以降の発売ですから、Win95上位互換とは言え問題があるの
かもしれませんね...。でも、Win98だからダメなんていう話はあまり耳にして
ませんので、通常なら動くものだと思います。
MiniCAD7forWinもアップデート版があったはずなので、新しいバージョンの方
をインストールしているかチェックしてみては?。(←あまり関係ないかも^^;)
私の書き込みは多分役に立たないです...いつも無駄カキコばかりでゴメンナサイm(_._)m


MiniCADてWIN98てつかえないのですが  HAYA
email:
Hayatochi@aol.com  Sun Jun 13 10:19:56 Japan 1999

最近やっとWin98にしたのですかMinICADが動きません
なんだかランタイムエラ−と言うものがでてきます。
どなたか解決策教えてください。


Re:RE:切り捨ての仕方教えて下さい   くるみの森
email:
atelier105@mx1.tonet.ne.jp  Sat Jun 12 13:47:44 Japan 1999

よっちさん ほうとうにありがとうございます。うまくいきました。早速利用させていただきました。感謝!感謝!
それにしても、金曜日の深夜に書き込みをして、翌日つまり土曜の昼前にはこうして教えてもらえる
なんて、なんて皆さん素敵な方達なんでしょう。「まさか‥」と「もしや‥」の期待どうりでほんとう
に感激しました。(涙涙) ありがとうございました。ずにのってまた初歩的な質問しますのでよろしく
お願いします。


あれっ?   よっち
email:  Sat Jun 12 11:21:30 Japan 1999

あれっ、二つも入っちゃった。
ごめんなさい。m_ _m


RE:切り捨ての仕方教えて下さい   よっち
email:  Sat Jun 12 11:18:48 Japan 1999

リファレンスマニュアルを調べたら直接
小数点第何位以下を切り捨てる、という関数は見あたりませんでした。
そのかわり"Int"という小数点以下を全て切り捨てる関数があるので
次のようにしてはどうでしょう。

1階床面積を"A1"のセルに入力、2階床面積を"B1"のセルに入力した場合、
延べ床面積を計算させたいセルに

=Int((A1+B1)*100)/100

という計算式を入力します。

ちょっと変則的な使い方ですがこれでうまく行くと思います。たぶん・・・

ちなみに小数点第2位以下を切り捨てる場合は100を10に、
第4位以下を切り捨てる場合は100を1000に代えればO.K!


RE:切り捨ての仕方教えて下さい   よっち
email:  Sat Jun 12 11:17:03 Japan 1999

リファレンスマニュアルを調べたら直接
小数点第何位以下を切り捨てる、という関数は見あたりませんでした。
そのかわり"Int"という小数点以下を全て切り捨てる関数があるので
次のようにしてはどうでしょう。

1階床面積を"A1"のセルに入力、2階床面積を"B1"のセルに入力した場合、
延べ床面積を計算させたいセルに

=Int((A1+B1)*100)/100

という計算式を入力します。

ちょっと変則的な使い方ですがこれでうまく行くと思います。たぶん・・・

ちなみに小数点第2位以下を切り捨てる場合は100を10に、
第4位以下を切り捨てる場合は100を1000に代えればO.K!


切り捨ての仕方教えて下さい   くるみの森
email:
atelier105@mx1.tonet.ne.jp  Fri Jun 11 23:46:04 Japan 1999

ワークシートで出た答えを小数点第3位以下を切り捨てる方法をどなたか教えてくれませんか。
ExceL等ではrounddownを使うようですが、vectorworksのワークシートではどうした
らいいんでしょうか。
ワークシートは大変便利で面積表などで良く使用しますが、どうしても端数であわなくなり
最後に手計算と手動で合わせています。
初歩的な質問で恥ずかしいのですが、よろしくお願いします。m(__)m


RE:この呪文をどないせいと…?   管理人
email:
aoyama@hokkai.or.jp  Sat Jun 5 9:59:06 Japan 1999

当たって砕ける危険をものともしない、くるみの森さんは勇者であります。
これで、後に続く挑戦者が現れることでしょう。ありがとうございます。
図形の表示・非表示はレイヤやクラスの操作でお馴染みですが、
lotonda会員のScriptは「選択した図形」が対象である所がポイントです。
つまり、設定ではなく、図形を個別に、しかもダイレクトに制御できるわけです。
ちなみに、作成したScriptは、他のファイルにコピー&ペーストできます。
ですから、実験用のファイルを用意して、試すと安心でしょう。
レポート、質問、大歓迎!
さあ、あなたもプログラミングの醍醐味を体験してみましょう!


この呪文をどないせいと…?   くるみの森
email:
atelier105@mx1.tonet.ne.jp  Fri Jun 4 23:22:42 Japan 1999

そう、管理人さんの言うように、初心者としては質問しようと思いました。
が、まてよ。これって図形選択マクロやツールマクロと同じなんじゃ・・?
で、とりあえず一行scriptをコピーし、よく解らないけどリソースパレットを出し、
よく解らないけど 新規→よく解らないけどvectorscriptコマンド作成→
よく解らないけど名前をつけて→よく解らないけどペースト。
で、試しに実行してみたら、選択していた図形が消えました。・・感動しました。
が、戻す方を作っていなかったので、一瞬ドキリとしました。戻らなかったら・・・
あわてて他のscriptもコピー&ペーストで試してみたら、全部うまくいきました。
なんてためになるクラブなんでしょう。
lotondaさん、管理人さんありがとうございます。


RE:6月3日のlotondaの書き込みに対する訂正   管理人
email:
aoyama@hokkai.or.jp  Fri Jun 4 22:19:00 Japan 1999

lotonda会員の依頼により、6月3日のScriptを削除いたしました。
確かに、初心者ではトラブルに対処できないかも知れません。
まことに残念です。でも、怪我の功名と言いますか、
そのお陰で、lotonda会員の「一行Script」を紹介して頂けました。
これぞ、管理人が呼びかけていた理想的なScriptです。
さあ、どなたか初心者代表として、質問ををかってでませんか?
「この呪文をどないせいと…?」


6月3日のlotondaの書き込みに対する訂正  lotonda
email:
lotonda@pop06.odn.ne.jp  Fri Jun 4 14:47:47 Japan 1999

先日、「数値位取り」のバグを修正したScriptを書き込みました。
さらに、「全てのレイヤを表示」というコマンドも付けておきました。
それぞれのScriptには何も問題はないのですが、それぞれを組み合わせて使用したときに
いくつかの問題が出てくることがわかりました。

以下は詳しい説明です。

・先日の「数値位取り」はアクティブレイヤの選択された数値と寸法値にしか実行されません。
アクティブレイヤ以外のレイヤに対しては編集可能に設定されていても実行されません。
全てのレイヤに対して実行させるようScriptを書き換えることも可能ですが、
以下の危険を伴うのでしません。

・編集を加えている寸法値に対しても実行されてしまいます。
編集を加えている寸法値とは、データパレットを使って寸法値を訂正している場合です。
たとえば天井高を示す場合に「ch=2400」に書き換えることが断面図や矩計図で多く見ら
れると思います。寸法線のレイアウト上、本来の寸法値を表示しないで文字列として書き
加えている場合などもそうです。
これらの寸法線に対しても本来の寸法値を受け取り、それに対してコマンドを実行して
しまいます。ですから本来の寸法値が「2400」で、それを「ch=2400」に書き換えていた
としてもコマンドが実行され 「2,400」に変換されてしまいます。

いまのところこれをVectorScriptで修正することは出来ないようです。
ですから対処方法としては、変換したい寸法値や数値を一つずつ選択してコマンドを実行
するしかないようです。

みなさんに大変なご迷惑をおかけしたことをお詫びします。
現在深く反省しております。


お詫びとして、以下に非常に単純で美しく、しかも3ヶ月の試用期間を経てきた安全な
Scriptを紹介します。3点セットで使用してください。
こんなの常識だよと言われる方もいらっしゃるかと思いますが...。

・選択された図形を隠します。
Hide((SEL=TRUE));

・選択された図形以外を隠します。
Hide((SEL=FALSE));

・上記のコマンドで隠している図形を表示します。
Show((ALL));

Illustratorなんかでは当たり前のコマンドですよね。
プラグインコマンドでメニューに組み込んで、ショートカットなんかを
割り当てておくと非常に便利です。


「プラグインコマンド」使ってますか?  kazu
email:
t-kazu@ka2.so-net.ne.jp  Fri Jun 4 11:20:58 Japan 1999

こんにちは、初めて書き込みします。

lotondaさんのScript、いいですね。機会があれば是非使用させて頂きたいと思
います。

さて、VW8の新機能「プラグインコマンド」ですが、皆さんはどのように活用
してらっしゃるのでしょうか。けっこう便利な機能ですよね。

私は、ちょっとした機能の拡張、たとえば複数図形の均等配置コマンドを作って
メニューに組み込んだりしています。

既にそういう機能が標準であったりすると恥ずかしいんですが(^^;)。

スクリプトの実行速度も速くなったらしく、以前なら少々待ち時間が必要であろ
うスクリプトも、それなりに快適に実行されます。が、マシンパワーをある程度
要求されるのは仕方ないんでしょうかねぇ。


RE:VW8から標準装備している「数値位取り」のバグを修正しました。   管理人
email:
aoyama@hokkai.or.jp  Thu Jun 3 14:56:46 Japan 1999

lotondaさん、ありがとうございます。
これって、貴重品なのではありませんか?
なんと気前のよい!
使用された方は、レポートをお願いします。


RE:Dynacadとの互換   天の声(管理人代筆)
email:
aoyama@hokkai.or.jp  Thu May 27 21:10:52 Japan 1999

VWの取り込み機能を使っても駄目なのでしょうか?DXF/DWGで。試みて下さい。
駄目であれば、A&Aサポート宛、その中間ファイルを添付してご相談ください。
(info@aanda.co.jp あるいはfaxで)
ユーザ番号/シリアル番号をわすれないように。


Dynacadとの互換  ja8alp
email:
ja8alp@poplar.ocn.ne.jp  Tue May 25 14:08:36 Japan 1999

管理人さん、早速の 御返事ありがとうございます。
Dyna側で、DXF File にしてMac で読んだところ、Simpl Txst では、まず
1 スタートのコードが、VEctor が「$」で始まるのに対し、矢印みたいなマークで
 あること。(hex 1FH 以下と思われます)
2 data の識別単語が、Dynaは、日本語単語もあり、対応する単語変換テーブルを
 もっていません。
特にこの「2」の問題が処理できれば、作図が表示きれる様なきがします。
pc-98は、ms-dos 3.3d です。せめて、変換テーブル表があれば、変換プログラムを
書けるのですが・・・・・。


RE:初めまして。   管理人
email:
aoyama@hokkai.or.jp  Fri May 21 20:13:44 Japan 1999

ja8alpさん、ようこそ。
会員登録いただき、ありがとうございます。
DYNA CADでDXF変換したファイルは、どの段階でトラブルになるのですか?
そもそもMacに取り込めない?
VectorWorksに取り込めない?
取り込めるが、特定の要素の表示ができない?
それから、PC-98のOSはWindows95ですか?


初めまして。  ja8alp
email:  Fri May 21 0:56:13 Japan 1999

Yahooでこのサイトが有る事をはじめて知りました。
MacでVectorWorksを使い始めてまだ、一ヶ月位なのですが、分からない事が有るので
誰か教えて下さい。
私は以前PC-98でDYNA CADを使っていたのですが、以前のデータをVectorWorksに
取り込みたいのでDXFに変換したのですが、うまく取り込めません。
どう言う風にすると、DYNA CADのDXFをVectorWorksに取り込めるのでしょうか?
教えて下さい。


RE:Scriptって何ですか?  管理人
email:
aoyama@hokkai.or.jp  Tue Apr 6 15:26:27 Japan 1999

「Script」とは、私にわかる解釈によると、プログラムと同じような意味です。
ここでは、VectorWorksに組み込まれている「VectorWorksScript」を指します。
腕さえあれば自動作図や図形データの収集、果ては積算や建具表生成まで可能です!
ただし、そこまで高度になると本職のプログラマーにお任せです。
この談話室では、もっと小さな、でも、便利な「Script」を話題にしたいです。
ちなみに、私が「Script」という言葉に出会ったのはAppleのHyperCardが最初です。


Scriptって何ですか?  ゴンスケ
email:
Lord_Gonsuke@excite.co.jp  Tue Apr 6 13:53:03 Japan 1999

談話室の名前についている「Script」って何ですか?
教えてください。


試運転を開始  管理人
email:
aoyama@hokkai.or.jp  Sun Apr 4 20:49:58 Japan 1999

本日から試運転を開始します。
しばらくは、不都合が発生するかも知れません。
その際は、管理人までご一報いただければ幸いです。


RE:VectorScriptのマニュアルは?  管理人
email:
aoyama@hokkai.or.jp  Sun Apr 4 19:47:11 Japan 1999

初歩的な質問、大歓迎です。
プログラマーではない我々が、Scriptを使えるようになりたいのです。
ベテランの方、便利な『一行Script』を紹介して下さい。
さて、
VectorScriptのマニュアルは、本ではなく、PDFというファイルになりました。
VectorWorksのフォルダの中にインストールされています。
Acrobatという同梱のソフトで見ることができます。


VectorScriptのマニュアルは?  悩める建築家
email:
aoyama@moon.co.jp  Sun Apr 4 19:45:56 Japan 1999

初歩的な質問ですみません。
VectorScriptのマニュアルが見当たりません。
MiniCadの時代にはあったのに、今は含まれてないのですか?