cad 二次開發(一)


開發平台:VB +CAD 2004

由於變態的客戶不願意 裝CAD 2010,只用CAD 2004, 但是只有06 才支持.Net 方式,所以只能用古老的VB開發

實現功能:把幾個dwg 文件,合並到一個DWG 里,然后把所有的圖層 合並到一個圖層,所有的顏色為白色。然后自動保存新的文件

 

參考資料:《VisualBasic與AutoCAD二次開發》張晉西.pdf

              C#語言操作ActiveX_automation CAD二次開發實例教程.pdf

            AutoCAD+ActiveX二次開發技術.pdf

            基於Visual+C#的AutoCAD+開發及其在工程中的應用.pdf

Option Explicit
Dim cadapp As AcadApplication
Dim foldname As String





Private Sub Command3_Click()
'創建一個新的文檔
'cadapp.Documents.Add
'Call aaa
 On Error Resume Next
Dim k As Integer
Dim fname As String

'ReDim AA(List1.ListCount - 1) As String



For k = 0 To List1.ListCount - 1
fname = List1.List(k) & ".dwg"
 'AA(k) = fname
 

Next

'For k = 0 To List1.ListCount - 1
'
'MsgBox (AA(k))
'
'
'Next
 Dim a As Boolean
 a = IsNumeric(Mid(Text1.Text, 1, 3))
 If a = True Then
 
 
 MsgBox "全是數子"
 
 Else
 
 
 MsgBox "中文"
 
 End If
 
 

Call CreateFolder



End Sub

Private Sub Command4_Click()

 If List1.SelCount = 1 Then
 
 List1.RemoveItem List1.ListIndex
 
 
 End If
 

End Sub

Private Sub Form_Load()

  On Error Resume Next
  Set cadapp = GetObject(, "AutoCAD.Application")
  

  If Err Then
    Err.Clear
    Set cadapp = CreateObject("AutoCAD.Application")
    

    If Err Then
      MsgBox ("沒有安裝CAD")
      Exit Sub
    End If
  End If


End Sub
Private Sub Command1_Click()
  Dim ssetObj As AcadSelectionSet
  Set ssetObj = cadapp.ActiveDocument.SelectionSets.Add("Test1")
  
  AppActivate cadapp.Caption
  
  Dim FType(0) As Integer
  Dim FData(0) As Variant
  FType(0) = 0
  FData(0) = "*text"
  
  Dim FilterType As Variant
  Dim FilterData As Variant

  FilterType = FType
  FilterData = FData
  ssetObj.SelectOnScreen FilterType, FilterData
  AppActivate 圖幅下載.Caption
  
  Dim pickedObjs As AcadEntity
  
  
  For Each pickedObjs In ssetObj
   
  
   pickedObjs.Highlight (True)
   
   ' MsgBox (pickedObjs.TextString)
     Dim a As Boolean
 a = IsNumeric(Mid(pickedObjs.TextString, 1, 3)) And Len(pickedObjs.TextString) = 10
 
 If a = True Then
 
   
   List1.AddItem (pickedObjs.TextString)
   
  End If
  
   
 '  List1.AddItem (pickedObjs.Layer)
  
  pickedObjs.Update
  Next
  
  ssetObj.Delete
  
 
End Sub
Private Sub Command2_Click()


Label3.Caption = "正在創建。。。。。。。"

   On Error Resume Next
   
  Dim acaddoc As AcadDocument
  
  cadapp.Documents.Add
  '插入dwg文件
  
  Dim fcount As Integer
  fcount = List1.ListCount
  Dim fk As Integer
  Dim flong As Integer
  flong = fcount - 1
  
  
 ReDim fname(flong) As String
 
  
  
  For fk = 0 To fcount - 1
  
   fname(fk) = List1.List(fk)
   
  
  Next
  
  Dim findex As Integer
  
  Label3.Caption = "正在打開文件"
  For findex = 0 To fcount - 1
  
  
  Dim insertedBlock As AcadBlockReference
  Dim Pt_Temp_1(0 To 2) As Double
  Pt_Temp_1(0) = 0
    Pt_Temp_1(1) = 0
    Pt_Temp_1(2) = 0
    
    Dim Txtstr As String
    
    Txtstr = "F:\CAD數據\" & fname(findex) & ".dwg"
    
    If Dir(Txtstr) <> "" Then
    
    
    Set insertedBlock = cadapp.ActiveDocument.ModelSpace.AttachExternalReference(Txtstr, List1.List(findex), Pt_Temp_1, 1, 1, 1, 0, False)
 '  cadapp.ActiveDocument.Blocks.Item(insertedBlock.Name).Bind False
   cadapp.ActiveDocument.Blocks.Item(insertedBlock.Name).Bind True
 '必須綁定為 True ,要不然不能炸開塊 
    insertedBlock.Delete
    
    End If
    
 Next findex
 
  
   
   '炸開塊
   
  
   
   
     Label3.Caption = "正在顯示塊。。。。。。。"
   For findex = 0 To fcount - 1
    
  Dim explodeobjts As Variant
 Dim Iblock As AcadBlockReference
 Dim insertpoint(0 To 2) As Double
 insertpoint(0) = 0
 insertpoint(1) = 0
 insertpoint(2) = 0
 
 
Set Iblock = cadapp.ActiveDocument.ModelSpace.InsertBlock(insertpoint, List1.List(findex), 1, 1, 1, 0)
 
 ZoomExtents
' MsgBox (Iblock.name)
 
 Iblock.Explode
  
   
   Iblock.Delete
   
   cadapp.ActiveDocument.Blocks.Item(List1.List(findex)).Delete
   
   
   Next findex
   
   
   
'
' Dim cadlayer As AcadLayer
' Set cadlayer = cadapp.ActiveDocument.Layers.Item("Tk")
'
'   cadlayer.Delete
'刪除圖框

 Label3.Caption = "正在刪除圖框。。。。。。。"
Dim TksetObj As AcadSelectionSet

Set TksetObj = cadapp.ActiveDocument.SelectionSets.Add("Tk")


Dim TkType(0) As Integer
Dim TkData(0) As Variant

TkType(0) = 8
TkData(0) = "Tk"


Dim TkFileterType As Variant
Dim TkFileterData As Variant

TkFileterType = TkType
TkFileterData = TkData


TksetObj.Select acSelectionSetAll, , , TkFileterType, TkFileterData

Dim Tkpickobject As AcadEntity

For Each Tkpickobject In TksetObj

  Tkpickobject.Delete
  
Next

TksetObj.Delete

 
   '合並圖層
   
    Label3.Caption = "正在合並圖層。。。。。。。"
   Dim Ientity As AcadEntity
   
   For Each Ientity In cadapp.ActiveDocument.ModelSpace
     If Ientity.Layer <> "0" Then
       Ientity.Layer = "0"
       
       End If
       
    
   Next Ientity
   
   
   '(command "-purge" "la" lay_name "N")
  

'  cadapp.ActiveDocument.SendCommand "PURGE" & vbCr & "la"&vbCr& "NET"& vbCr "N"&Chr(13)

   

 
'   Dim cadlayer As AcadLayer
' Set cadlayer = cadapp.ActiveDocument.Layers.Item("HYD")
'
'
'   On Error Resume Next
'   cadlayer.Delete
   
'   If Err <> 0 Then
'    MsgBox "該圖層不能被刪除"
'   End If
   
'   Dim cadlayer As AcadLayers
' ' cadapp.ActiveDocument.Layers.Count
'   Dim i As Integer
'   For i = 0 To cadapp.ActiveDocument.Layers.Count - 1
'      If cadapp.ActiveDocument.Layers.Item(i).Name <> "0" Then
'
'          cadapp.ActiveDocument.Layers.Item(i).Delete
'
'      End If
'
'
'   Next i
 
 
'  MsgBox (cadapp.ActiveDocument.Layers.Item(1).Name)
'  MsgBox (cadapp.ActiveDocument.Layers.Count)
'    explodeobjts(0).Delete
   
'   Dim BlockObj As AcadSelectionSet
'
'    Set BlockObj = cadapp.ActiveDocument.SelectionSets.Add("Test2")
'
'    Dim gpcode(0) As Integer
'    Dim datavalue(0) As Variant
'        gpcode(0) = 0
'        datavalue(0) = "INSERT"
'
'    Dim groupcode As Variant, datacode As Variant
'        groupcode = gpcode
'        datacode = datavalue
'        BlockObj.Select acSelectionSetAll, , , groupcode, datacode
'
'    Dim i As Integer
'    Dim ENT As AcadBlock
'    Dim Qty As Integer
'        Qty = 0
'        For i = 0 To BlockObj.Count - 1
'            Set ENT = BlockObj(i)
'                ENT.Explode
'                Qty = Qty + 1
'         Next i
'         MsgBox "炸開" & Str(Qty) & "個塊!"
'保存圖形
    
     Label3.Caption = "正在保存文件。。。。。。。"
    Call CreateFolder

    Dim filename As String
    filename = foldname + "\" + Text1.Text + ".dwg"
    
   cadapp.ActiveDocument.SaveAs filename
     AppActivate 圖幅下載.Caption
       If Err Then
      MsgBox Err.Description
     
      Exit Sub
      
   End If
   
   
  
   MsgBox "成功!生成" + filename
   
   Label3.Caption = "創建完畢!"
   
End Sub

Public Function CreateFolder()

 Dim fso As New FileSystemObject

Dim riqi As String
riqi = Format(Now, "YYYY-MM-DD") + "—" + Text1.Text + "—" + Text2.Text


'MsgBox riqi

foldname = "F:\圖幅下載\小雞雞\" + riqi

If fso.FolderExists(foldname) Then

   MsgBox "創建的文件夾已經存在", vbOKOnly, "警告"
   

Else
  fso.CreateFolder (foldname)
  If Err Then
      MsgBox Err.Description
     
   End If
   
  'MsgBox "創建成功"

End If

End Function


Private Sub Form_Unload(Cancel As Integer)
   'cadapp.Quit
  Set cadapp = Nothing
 
End Sub

 注意的問題:

一:以塊的方式,插入dwg 文件,必須綁定為True ,要不然不能炸開。

插入后不能顯示到當前modelspace,需從blocks 里從新插入才能顯示

二:合並完圖層 后,發現不能刪除圖層,可以用“PURGE"命令 清理,就能刪除了

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM