注目の投稿

技術者として人として

 技術者として人として これまで、生きてきて、ひとりで解決していくものと考えていた。 知り合いなどの助言もあるが、それだけでも、やり切れない場合があった。 長い間、この性格を作り上げてきて正確などは、変わることがないだろうと決めつけていた。 思考は、そうそう簡単には変わらないもの。 ひとりでは、変わらないものであるということに気づくことができた。 日本では、カウンセリングという文化が浸透していないが、古くは仏教など、生活の為に、必要な事を、学ぶ機会が少ないと思う。 カウンセリングは、それを、実現できるものと思う。 ひとりでは解決できないこと、それは、正しい方法を見つけられないから。それを、学んでいないからで、専門的な第三者が心理学などを通して教えてくれることは救いとなる。 生きにくい世の中であることは間違いない。 生きやすくする方法もあると知ることができた。 技術者は孤独になるときがあり、ひとりでなんともならない時の対策方法を見失う時がある。日本ではカウンセリング文化が浸透していないような気がするが、ひとりでは解決出来ない時。救われる方法があると知る事になる。 https://t.co/LBKNwUyXg5 — chsugiyama (@chx_sugi_001) January 3, 2023

エクセルからAUTOCADで選択中の円の座標を取得(Ver.2)

 エクセルからAUTOCADで選択中の円の座標を取得


選択している円のデータ情報を知りたいという質問がありましたので、下記のように変更しました。

エクセルのVBAのみで、Autocad側のマクロの操作はありません。

SelectionSets.Add 選択セットを使用しています。VBAの最後に削除しています。


AUTOCADのコードでは、ThisDrawingですが、Excelから設定するには、AcadDocと書き直します。
ThisDrawing.SelectionSets.Add("Sample")
AcadDoc.SelectionSets.Add("Sample") 

AcadDocは下記のように定義
Set AcadDoc = AcadApp.ActiveDocument()

参照設定
AutoCAD 2021 Type Library にチェックしています。


  • AUTOCADで、選択した円のデータを抽出
1.エクセルで、マクロ起動。

2.AUTOCAD画面で円を選択。
  右クリックで確定
3.VBA 動作 
  円を青色に変更、Excelに座標を書き出す。

  • VBA CODE エクセル

Option Explicit

Private AcadDoc As AutoCAD.AcadDocument     'モジュール定義
Private AcadApp As AutoCAD.AcadApplication  ' AutoCAD アプリケーション変数


Public Sub AutocadSelectionSET()

    Set AcadApp = GetObject(, "AutoCAD.Application")    ' xls追加
    Set AcadDoc = AcadApp.ActiveDocument()
         
    Dim objSelSet As AcadSelectionSet
    Dim objEntity As AcadEntity

    Dim objCircle As AcadCircle
    Dim Str As String
    Dim N

    Set objSelSet = AcadDoc.SelectionSets.Add("Sample")  'いったん選択セットを設定する。
    
    Call objSelSet.SelectOnScreen ' autocad 画面上で、円を選択する。マクロ起動後にAUTOCAD画面で選択する。


    N = ActiveCell.Row
         
         Cells(N, ActiveCell.Column + 0) = "objCircle.center(0)"
         Cells(N, ActiveCell.Column + 1) = "objCircle.center(1)"
         Cells(N, ActiveCell.Column + 2) = "objCircle.center(2)"



    N = ActiveCell.Row + 1

    For Each objEntity In objSelSet
      
      If objEntity.ObjectName = "AcDbCircle" Then
         Set objCircle = objEntity
           
         'Str = "OBJ name" & objEntity.ObjectName & "半径" & objCircle.Area & vbCrLf & "中心座標" & objCircle.center(0) & "," & objCircle.center(1) & "," & objCircle.center(2)
            ' MsgBox Str
           
            ' MsgBox "ECXEL 現在のセルの左に入力します。"
            
         Cells(N, ActiveCell.Column + 0) = objCircle.center(0)
         Cells(N, ActiveCell.Column + 1) = objCircle.center(1)
         Cells(N, ActiveCell.Column + 2) = objCircle.center(2)
         
      
         objEntity.Color = acBlue  ' 選択した円を青くする。不要の場合は削除する。
      
         N = N + 1
      End If
    Next
    

    AcadDoc.SelectionSets("Sample").Delete      '使用後 選択セット削除する。

End Sub


コメント

このブログの人気の投稿

DesignSpark Mechanical オブジェクトの拡大、縮小 "Scale the body"

DesignSpark Mechanical ブレンド SurfaceからSolid作成

DesignSpark Mechanical エクスポートDXF(2D,3D)