<HTML>
<HEAD>

<TITLE>ActiveX C</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 によるカスタマイズ　C</h2>
<A href="#step1">■AutoCAD上で選択したオブジェクトの情報を得るにはどうしたらいいか？</A><BR>
<A href="#step2">■ＡｃｔｉｖｅＸを使った選択セットサンプル</A><BR>


<HR size=1><BR>

<A name="step1"></A>
<B>■AutoCAD上で選択したオブジェクトの情報を得るにはどうしたらいいか？</B><BR>
<BLOCKQUOTE>
実はこれ、随分悩みました。選択セットを使えばいいのはすぐに解ったのですが、作成したプログラムを動かすと１度目は動くのに、２度目からはエラーになる。なぜか？？？１度選択セットを作成するとそれはAutoCAD上に残ってしまいます。そのため同一名の選択セットがAutoCAD上に存在しないかチェックしないと２度目からはエラーとなるのです。<p>

VBのプログラムでAutoCAD 2000の状態が解らなくなったときは、プログラムをブレイクしウオッチ式の追加で「AcadDoc」（VBAのときは「ThisDrawing」）を見ると理解しやすいと思います。<BR>
<IMG src="vb4.gif" alt="vb4"  border="0" name="vb4"><p>



</BLOCKQUOTE><BR>

<A name="step2"></A>
<B>■ＡｃｔｉｖｅＸを使った選択セット サンプル</B><BR>
<BLOCKQUOTE>
選択セット作成時に同一名が無いかチェックしています。サンプルは選択されたオブジェクトを赤にします。<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.3</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">'********** ActiveX 選択セット サンプル ***********<BR></FONT>
<BR>
Dim sset As AcadSelectionSet<BR>
Dim SsetName As String<BR>
Dim i As Long<BR>
Dim con As Long<BR>
<BR>
SsetName = "SS1"<BR>
con = AcadDoc.SelectionSets.Count<BR>
<BR>
i = 0<BR>
Do<BR>
　　If i = con Then<BR>
　　　　<FONT COLOR="#00ff00">'同一名の選択セットが無い場合は新規に作成<BR></FONT>
　　　　Set sset = AcadDoc.SelectionSets.Add(SsetName)<BR>
　　　　Exit Do<BR>
　　ElseIf SsetName = AcadDoc.SelectionSets.Item(i).Name Then　<BR>
　　　　<FONT COLOR="#00ff00">'同一名の選択セットが有る場合は選択セットをクリア<BR></FONT>
　　　　Set sset = AcadDoc.SelectionSets.Item(i)<BR>
　　　　sset.Clear<BR>
　　　　Exit Do<BR>
　　End If<BR>
i = i + 1<BR>
Loop<BR>
<BR>
<FONT COLOR="#00ff00">'AutoCADへフォーカスを移す<BR></FONT>
AppActivate AcadApp.Caption<BR>
<FONT COLOR="#00ff00">'AutoCADの表示を最大化<BR></FONT>
AcadApp.WindowState = acMax<BR>
<FONT COLOR="#00ff00">'AutoCAD 画面上でオブジェクトを選択するよう要求<BR></FONT>
sset.SelectOnScreen<BR>
<BR>
Dim ent As Object<BR>
<BR>
For Each ent In sset<BR>
　　ent.Color = acRed   <FONT COLOR="#00ff00">'各オブジェクトの色を赤に変更<BR></FONT>
　　ent.Update          <FONT COLOR="#00ff00">'各オブジェクトを更新<BR></FONT>
Next ent<BR>
<BR>
</BLOCKQUOTE>
End Sub<BR>
</table>
<P>



</BLOCKQUOTE><BR>




</BODY>
</HTML>
