<HTML>
<HEAD>

<TITLE>ActiveX B</TITLE>


<SCRIPT language="JavaScript">
<!--

	if (navigator.appVersion.charAt(0)>=3){
		var img= new Array()
		img[0] = new Image(); img[0] .src = "home2.gif"
		img[1] = new Image(); img[1] .src = "home1.gif"
	}
    
	function setimg(i,p){
	if(navigator.appVersion.charAt(0) >= 3 ){
        	document.images[i].src=img[p].src;
	}}

//-->
</SCRIPT>
</HEAD>



<BODY bgcolor="#ffffff" text="#000000" link="#663333" vlink="#663333">
<CENTER>
<DIV align="right"><A href="../../index.html" target="_top" onmouseover="setimg('home',1)" onmouseout="setimg('home',0)"><IMG src="home2.gif" alt="Home"  border="0" name="home"></A></DIV>
</CENTER>


<HR size=1><BR>
<h2>AutoCAD 2000 ActiveX によるカスタマイズ　B</h2>
<A href="#step1">■ＡｃｔｉｖｅＸで何ができるか？</A><BR>
<A href="#step2">■ＡｃｔｉｖｅＸを使ったサンプル</A><BR>


<HR size=1><BR>

<A name="step1"></A>
<B>■ＡｃｔｉｖｅＸで何ができるか？</B><BR>
<BLOCKQUOTE>
ＡｃｔｉｖｅＸで何ができるか？と聞かれると。AutoCADの持つオブジェクトを外部のソフトから操作できる。と言った答えになるかと思います。でも、やっぱり何のこっちゃ？て感じだと思います。で、もう少し解り易く、具体的に説明します。<p>

<IMG src="acad1.gif" alt="acad1"  border="0" name="acad1"><p>
これはAutoCADのオブジェクトプロパティ管理でAddLineサンプルで描いた線の情報を見ています。この線オブジェクトは、始点、終点座標、画層、線種などの情報を持っています。このオブジェクトプロパティ管理で始点座標を変更すると、結果はすぐに線に反映されます。<BR>
ＡｃｔｉｖｅＸでAutoCADの持つオブジェクトを外部のソフトから操作するとは、例えばVBでこの線の始点プロパティを変更すると言った事です。<p>

線のオブジェクト名は AcadLine です。<BR>
Dim lineObj As AcadLine　と言った形で宣言し<BR>
線を描くのは、AddLine メソッドを使用します。<p>

作図されている線の編集またはクエリーを行うには、次に示すメソッドとプロパティを使用します。<p>

<Table border>
<TR>
<TD>メソッド</TD>
<TD>プロパティ</TD>
</TR>
<TR>
<TD>ArrayPolar</TD>
<TD>Angle</TD>
</TR>
<TR>
<TD>ArrayRectangular</TD>
<TD>Application</TD>
</TR>
<TR>
<TD>Copy</TD>
<TD>Color</TD>
</TR>
<TR>
<TD>Delete</TD>
<TD>Document</TD>
</TR>
<TR>
<TD>GetBoundingBox</TD>
<TD>Delta</TD>
</TR>
<TR>
<TD>GetExtensionDictionary</TD>
<TD>EndPoint</TD>
</TR>
<TR>
<TD>GetXData</TD>
<TD>Handle</TD>
</TR>
<TR>
<TD>Highlight</TD>
<TD>HasExtensionDictionary</TD>
</TR>
<TR>
<TD>IntersectWith</TD>
<TD>Hyperlinks</TD>
</TR>
<TR>
<TD>Mirror</TD>
<TD>Layer</TD>
</TR>
<TR>
<TD>Mirror3D</TD>
<TD>Length</TD>
</TR>
<TR>
<TD>Move</TD>
<TD>Linetype</TD>
</TR>
<TR>
<TD>Offset</TD>
<TD>LinetypeScale</TD>
</TR>
<TR>
<TD>Rotate</TD>
<TD>Lineweight</TD>
</TR>
<TR>
<TD>Rotate3D</TD>
<TD>Normal</TD>
</TR>
<TR>
<TD>ScaleEntity</TD>
<TD>ObjectID</TD>
</TR>
<TR>
<TD>SetXData</TD>
<TD>OwnerID</TD>
</TR>
<TR>
<TD>TransformBy</TD>
<TD>PlotStyleName</TD>
</TR>
<TR>
<TD>Update</TD>
<TD>StartPoint</TD>
</TR>
<TR>
<TD>Thickness</TD>
<TD>　</TD>
</TR>
<TR>
<TD>Visible</TD>
<TD>　</TD>
</TR>
</Table><p>

これらのメソッドとプロパティを使ってAutoCAD上と同じようにオブジェクトを操作できるのです。<BR>
例えば、AddLineサンプルの線の色を変えるのは「Color」プロパティを使います。<P>

lineObj.Color = acRed<BR>
※もちろんAddLineで線を描いた後に...<BR>


</BLOCKQUOTE><BR>

<A name="step2"></A>
<B>■ＡｃｔｉｖｅＸを使ったサンプル</B><BR>
<BLOCKQUOTE>
AddLineサンプルをチョット変更し、「Copy」「Move」メソッドと「Color」プロパティを使って複数の色の線を描いてみました。<p>

<IMG src="ActiveX1.gif" alt="ActiveX1"  border="0" name="ActiveX1"><p>
AutoCAD上で、こんな感じになれば成功です。<p>
ActiveXサンプルソース<BR>
<table border="1"><td>
<FONT COLOR="#00ff00">'      ActiveX Sample for AutoCAD 2000</FONT><BR>
<FONT COLOR="#00ff00">'</FONT><BR>
<FONT COLOR="#00ff00">'　　　by akira nishio  2000.1.2</FONT><BR>
<BR>
Option Explicit<BR>
<BR>
Public AcadApp As AcadApplication<BR>
Public AcadDoc As AcadDocument<BR>
<BR>
Public Sub Main()
<BLOCKQUOTE>
   
<FONT COLOR="#00ff00">'**********アプリケーションの初期化**********</FONT><BR>
On Error Resume Next<BR>
<FONT COLOR="#00ff00">'AutoCAD 2000アプリケーションオブジェクトを取得</FONT><BR>
Set AcadApp = GetObject(, "AutoCAD.Application.15")<BR>
<FONT COLOR="#00ff00">'AutoCAD 2000アプリケーションオブジェクト取得に失敗した時</FONT><BR>
If Err Then<BR>
　　<FONT COLOR="#00ff00">'AutoCAD 2000を起動<BR></FONT>
　　Set AcadApp = CreateObject("AutoCAD.Application.15")<BR>
　　<FONT COLOR="#00ff00">'エラーオブジェクトをクリア</FONT><BR>
　　Err.Clear<BR>
End If<BR>
<FONT COLOR="#00ff00">'AutoCADを表示<BR></FONT>
AcadApp.Visible = True<BR>
<BR>
Set AcadDoc = AcadApp.ActiveDocument<BR>
<BR>
<FONT COLOR="#00ff00">'********** AddLineサンプルより ***********</FONT><BR>
<FONT COLOR="#00ff00">' This example adds a line in model space</FONT><BR>
<BR>
Dim lineObj As AcadLine<BR>
Dim startPoint(0 To 2) As Double<BR>
Dim endPoint(0 To 2) As Double<BR>
<BR>
<FONT COLOR="#00ff00">' Define the start and end points for the line</FONT><BR>
startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#<BR>
endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#<BR>
<BR>
<FONT COLOR="#00ff00">' Create the line in model space<BR></FONT>
Set lineObj = AcadDoc.ModelSpace.AddLine(startPoint, endPoint)<BR>
<BR>
<BR>
<FONT COLOR="#00ff00">'********** ActiveXサンプル ***********</FONT><BR>
<BR>
Dim NewLineObj(10) As AcadLine<BR>
Dim i As Integer<BR>
Dim point1(0 To 2) As Double<BR>
Dim point2(0 To 2) As Double<BR>
<BR>
point1(0) = 0: point1(1) = 0: point1(2) = 0     <FONT COLOR="#00ff00">'移動ベクトル始点<BR></FONT>
point2(0) = 0: point2(1) = 0: point2(2) = 0     <FONT COLOR="#00ff00">'移動ベクトル終点<BR></FONT>
    <BR>
For i = 1 To 10<BR>
　　<FONT COLOR="#00ff00">'ラインオブジェクトのコピー<BR></FONT>
　　Set NewLineObj(i) = lineObj.Copy<BR>
　　<FONT COLOR="#00ff00">'色を変える<BR></FONT>
　　NewLineObj(i).Color = i * 10<BR>
　　<BR>
　　point2(0) = i<BR>
　　<FONT COLOR="#00ff00">'移動<BR></FONT>
　　NewLineObj(i).Move point1, point2<BR>
Next i<BR>
<BR>
Update<BR>
ZoomExtents<BR>

</BLOCKQUOTE>
End Sub<BR>
</table>
<P>



</BLOCKQUOTE><BR>




</BODY>
</HTML>
