現在のコードは下記の通り。
-----Delphi Code Begin
FormにButton,Editをふたつ。
まだ、プレビュー機能は実装していない。
unit UntiDenSin;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, StdCtrls, ExtDlgs;
type
TForm1 = class(TForm)
Button2: TButton;
OpenDialog1: TOpenDialog;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
ICAD: OLEVariant;
ICADHWND: HWND;
BlkOutName: string[255]; //外部ブロック
BlkOnlyName: string[255]; //内部ブロック
BlkX,BlkY: string[255]; //X,Y方向の尺度
BlkAngle: string[255]; //角度
MyIndex: integer;
USERS1: string[255]; // BlkOutName
USERS2: string[255]; // BlkOnlyName
USERS3: string[255]; // BlkX
USERS4: string[255]; // BlkY
USERS5: string[255]; // BlkAngle
IsBlkSelect: boolean; //ブロックが選択されているか
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
ICADHWND:=FindWindow('IntelliCADApplicationWindow',nil);
if IsWindow(ICADHWND) then
begin
//IntelliCADを検出
Icad := GetActiveOleObject('ICAD.Application');
//外部ブロック名の取得
if OpenDialog1.Execute then
begin
IsBlkSelect := true;
BlkOutName := OpenDialog1.FileName;
SetForegroundWindow(ICADHWND);
//外部ブロック
ICAD.ActiveDocument.SetVariable('USERS1',BlkOutName);
//内部ブロック
MyIndex := LastDelimiter('',BlkOutName);
BlkOnlyName := BlkOutName;
Delete(BlkOnlyName,1,MyIndex);
MyIndex := LastDelimiter('.',BlkOnlyName);
Delete(BlkOnlyName,MyIndex,4); //少し乱暴なやりかた
ICAD.ActiveDocument.SetVariable('USERS2',BlkOnlyName);
//X方向の尺度
BlkX := Edit1.Text;
ICAD.ActiveDocument.SetVariable('USERS3',BlkX);
//Y方向の尺度
BlkY := Edit2.Text;
ICAD.ActiveDocument.SetVariable('USERS4',BlkY);
//角度
BlkAngle := '0';
ICAD.ActiveDocument.SetVariable('USERS5',BlkAngle);
//Lispをロードする
//Icad.LoadLisp('C:CADDenSindensin.lsp');
//Lispを実行する
//Icad.RunCommand('densin' + #13);
end
else
ShowMessage('CANCEL');
end
else
ShowMessage('IntelliCAD is nowhere');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsBlkSelect then
begin
//Lispをロードする
Icad.LoadLisp('C:CADDenSindensin.lsp');
//Lispを実行する
Icad.RunCommand('densin' + #13);
end
else
ShowMessage('Select block');
end;
end.
-----Delphi Code End
-----Lisp Code Begin
;;File Name "densin.lsp"
;;Command Name "des"
;;
;;Action "DenSin用ブロック挿入"
;;
;;;;How to Use
;;(1)単体では動作しない
;;(2)DenSin.exeから自動ロード、自動実行
;;Code Begin----------
;*****エラー処理(数値以外の入力)
(defun *error* (msg)
(princ msg)
(princ)
)
(defun C:densin()
;;外部ブロック
(setq exblk_name (getvar "USERS1"))
;;内部ブロック
(setq inblk_name (getvar "USERS2"))
;;内部ブロック名の確認
(if (tblsearch "block" inblk_name)
(setq ins_name inblk_name)
(setq ins_name exblk_name)
)
;*****直行モードをOFF
(setvar "ORTHOMODE" 0)
;;ブロックを原点に挿入
(setq ins_p "0,0,0")
(setq ins_x (getvar "USERS3"))
(setq ins_y (getvar "USERS4"))
(setq ins_a (getvar "USERS5"))
(command "insert" ins_name ins_p ins_x ins_y ins_a)
;;挿入したブロックを選択
(setq myblock (entlast))
;;ブロックを移動
(command "move" myblock "" ins_p )
(setq ins_np (getpoint))
(command ins_np)
;*****直行モードをON
(setvar "ORTHOMODE" 1)
;;ブロックを回転
(command "rotate" myblock "" ins_np )
)
;;Code End-------------
----Lisp Code End
-----Delphi Code Begin
FormにButton,Editをふたつ。
まだ、プレビュー機能は実装していない。
unit UntiDenSin;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, StdCtrls, ExtDlgs;
type
TForm1 = class(TForm)
Button2: TButton;
OpenDialog1: TOpenDialog;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
ICAD: OLEVariant;
ICADHWND: HWND;
BlkOutName: string[255]; //外部ブロック
BlkOnlyName: string[255]; //内部ブロック
BlkX,BlkY: string[255]; //X,Y方向の尺度
BlkAngle: string[255]; //角度
MyIndex: integer;
USERS1: string[255]; // BlkOutName
USERS2: string[255]; // BlkOnlyName
USERS3: string[255]; // BlkX
USERS4: string[255]; // BlkY
USERS5: string[255]; // BlkAngle
IsBlkSelect: boolean; //ブロックが選択されているか
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
ICADHWND:=FindWindow('IntelliCADApplicationWindow',nil);
if IsWindow(ICADHWND) then
begin
//IntelliCADを検出
Icad := GetActiveOleObject('ICAD.Application');
//外部ブロック名の取得
if OpenDialog1.Execute then
begin
IsBlkSelect := true;
BlkOutName := OpenDialog1.FileName;
SetForegroundWindow(ICADHWND);
//外部ブロック
ICAD.ActiveDocument.SetVariable('USERS1',BlkOutName);
//内部ブロック
MyIndex := LastDelimiter('',BlkOutName);
BlkOnlyName := BlkOutName;
Delete(BlkOnlyName,1,MyIndex);
MyIndex := LastDelimiter('.',BlkOnlyName);
Delete(BlkOnlyName,MyIndex,4); //少し乱暴なやりかた
ICAD.ActiveDocument.SetVariable('USERS2',BlkOnlyName);
//X方向の尺度
BlkX := Edit1.Text;
ICAD.ActiveDocument.SetVariable('USERS3',BlkX);
//Y方向の尺度
BlkY := Edit2.Text;
ICAD.ActiveDocument.SetVariable('USERS4',BlkY);
//角度
BlkAngle := '0';
ICAD.ActiveDocument.SetVariable('USERS5',BlkAngle);
//Lispをロードする
//Icad.LoadLisp('C:CADDenSindensin.lsp');
//Lispを実行する
//Icad.RunCommand('densin' + #13);
end
else
ShowMessage('CANCEL');
end
else
ShowMessage('IntelliCAD is nowhere');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsBlkSelect then
begin
//Lispをロードする
Icad.LoadLisp('C:CADDenSindensin.lsp');
//Lispを実行する
Icad.RunCommand('densin' + #13);
end
else
ShowMessage('Select block');
end;
end.
-----Delphi Code End
-----Lisp Code Begin
;;File Name "densin.lsp"
;;Command Name "des"
;;
;;Action "DenSin用ブロック挿入"
;;
;;;;How to Use
;;(1)単体では動作しない
;;(2)DenSin.exeから自動ロード、自動実行
;;Code Begin----------
;*****エラー処理(数値以外の入力)
(defun *error* (msg)
(princ msg)
(princ)
)
(defun C:densin()
;;外部ブロック
(setq exblk_name (getvar "USERS1"))
;;内部ブロック
(setq inblk_name (getvar "USERS2"))
;;内部ブロック名の確認
(if (tblsearch "block" inblk_name)
(setq ins_name inblk_name)
(setq ins_name exblk_name)
)
;*****直行モードをOFF
(setvar "ORTHOMODE" 0)
;;ブロックを原点に挿入
(setq ins_p "0,0,0")
(setq ins_x (getvar "USERS3"))
(setq ins_y (getvar "USERS4"))
(setq ins_a (getvar "USERS5"))
(command "insert" ins_name ins_p ins_x ins_y ins_a)
;;挿入したブロックを選択
(setq myblock (entlast))
;;ブロックを移動
(command "move" myblock "" ins_p )
(setq ins_np (getpoint))
(command ins_np)
;*****直行モードをON
(setvar "ORTHOMODE" 1)
;;ブロックを回転
(command "rotate" myblock "" ins_np )
)
;;Code End-------------
----Lisp Code End
※コメント投稿者のブログIDはブログ作成者のみに通知されます