<CommandMethod("pic")> _
Public Sub SelectObjectsOnscreen()
Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acCurDb As Database = acDoc.Database
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
Dim acSSPrompt As PromptSelectionResult = acDoc.Editor.GetSelection()
If acSSPrompt.Status = PromptStatus.OK Then
Dim acSSet As SelectionSet = acSSPrompt.Value
acObjIdColl = New ObjectIdCollection()
' Part 1 collect items to merge into new drawing
For Each acSSObj As SelectedObject In acSSet
If Not IsDBNull(acSSObj) Then
acObjIdColl.Add(acSSObj.ObjectId)
End If
Next
acTrans.Commit()
End If
End Using
'Part 2 Need to change part 2 so it copys multiple parts in then saves
Dim sLocalRoot As String = Application.GetSystemVariable("LOCALROOTPREFIX")
Dim sTemplatePath As String = sLocalRoot + "Template\acad.dwt"
Dim TemplatePath As String = "D:\Documents and Settings\UserName\My Documents\2011 Acad Blocks\Temp.dwg"
Dim acDocMgr As DocumentCollection = Application.DocumentManager
Dim acNewDoc As Document = acDocMgr.Add(sTemplatePath)
Dim acDbNewDoc As Database = acNewDoc.Database
Using acLckDoc As DocumentLock = acNewDoc.LockDocument()
Using acTrans = acDbNewDoc.TransactionManager.StartTransaction()
Dim acBlkTblNewDoc As BlockTable
acBlkTblNewDoc = acTrans.GetObject(acDbNewDoc.BlockTableId, OpenMode.ForRead)
Dim acBlkTblRecNewDoc As BlockTableRecord
acBlkTblRecNewDoc = acTrans.GetObject(acBlkTblNewDoc(BlockTableRecord.ModelSpace), OpenMode.ForRead)
' Clone the objects to the new database
Dim acIdMap As IdMapping = New IdMapping()
acCurDb.WblockCloneObjects(acObjIdColl, acBlkTblRecNewDoc.ObjectId, acIdMap, DuplicateRecordCloning.Ignore, False)
acTrans.Commit()
End Using
End Using
'' Set the new document current
acDocMgr.MdiActiveDocument = acNewDoc
'' Regenerate the drawing
Application.DocumentManager.MdiActiveDocument.Editor.Regen()
End Sub
//
// CodeHimBelonga KDUB 2011.11.13.
using System.Windows.Forms;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;
using AcUtils = Autodesk.AutoCAD.Internal.Utils;
[assembly: CommandClass(typeof (KDUB_Testing.DXF4into.MyCommands))]
namespace KDUB_Testing.DXF4into
{
public class MyCommands
{
[CommandMethod("DXF4", CommandFlags.Modal | CommandFlags.Session)]
public void DXF4Into1() {
var doc = AcadApp.DocumentManager.MdiActiveDocument;
var ed = doc.Editor;
var db = doc.Database;
string[] fnlist = SelectDXFFile();
if (fnlist == null) {
return;
}
foreach (string fn in fnlist) {
ed.WriteMessage("\n" + fn);
var TmpDb = new Database(false, true);
TmpDb.DxfIn(fn, fn + ".log");
Matrix3d Transform = Matrix3d.Identity;
using (DocumentLock docLock = doc.LockDocument()) {
using (Transaction tr = doc.TransactionManager.StartTransaction()) {
db.Insert(Transform, TmpDb, true);
tr.Commit();
}
}
}
}
public string[] SelectDXFFile() {
var dialog = new OpenFileDialog {
CheckFileExists = true,
CheckPathExists = true,
DefaultExt = "dxf",
DereferenceLinks = true,
Filter = "DXF Files (*.dxf)|*.dxf|All files (*.*)|*.*",
Title = "Select dxf file",
Multiselect = true
};
if (dialog.ShowDialog() != DialogResult.OK) {
return null;
}
return dialog.FileNames;
}
}
}
'
' CodeHimBelonga KDUB 2011.11.13.
Imports System.Windows.Forms
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime
Imports AcadApp = Autodesk.AutoCAD.ApplicationServices.Application
Imports AcUtils = Autodesk.AutoCAD.Internal.Utils
<Assembly: CommandClass(GetType(KDUB_Testing.DXF4into.MyCommands))>
Namespace KDUB_Testing.DXF4into
Public Class MyCommands
<CommandMethod("DXF4", CommandFlags.Modal Or CommandFlags.Session)> _
Public Sub DXF4Into1()
Dim doc = AcadApp.DocumentManager.MdiActiveDocument
Dim ed = doc.Editor
Dim db = doc.Database
Dim fnlist As String() = SelectDXFFile()
If fnlist Is Nothing Then
Return
End If
For Each fn As String In fnlist
ed.WriteMessage(vbLf & fn)
Dim TmpDb = New Database(False, True)
TmpDb.DxfIn(fn, fn & ".log")
Dim Transform As Matrix3d = Matrix3d.Identity
Using docLock As DocumentLock = doc.LockDocument()
Using tr As Transaction = doc.TransactionManager.StartTransaction()
db.Insert(Transform, TmpDb, True)
tr.Commit()
End Using
End Using
Next
End Sub
Public Function SelectDXFFile() As String()
Dim dialog = New OpenFileDialog() With { _
Key .CheckFileExists = True, _
Key .CheckPathExists = True, _
Key .DefaultExt = "dxf", _
Key .DereferenceLinks = True, _
Key .Filter = "DXF Files (*.dxf)|*.dxf|All files (*.*)|*.*", _
Key .Title = "Select dxf file", _
Key .Multiselect = True _
}
If dialog.ShowDialog() <> DialogResult.OK Then
Return Nothing
End If
Return dialog.FileNames
End Function
End Class
End Namespace
Public Function SelectDXFFile() As String()
Dim dialog = New OpenFileDialog()
With dialog
.CheckFileExists = True
.CheckPathExists = True
.DefaultExt = "dxf"
.DereferenceLinks = True
.Filter = "DXF Files (*.dxf)|*.dxf|All files (*.*)|*.*"
.Title = "Select dxf file"
.Multiselect = True
End With
If dialog.ShowDialog() <> DialogResult.OK Then
Return Nothing
End If
Return dialog.FileNames
End Function
AcadApp.DocumentManager.MdiActiveDocument.SendStringToExecute("Zoom e\n", false, false, false);
TmpDb.DxfIn(fn, fn + ".log");