Hi,
I try to do this :
1 - Read a DWG and put all ViewTableRecord in a list
2 - Create ViewTableRecord using the list.
I don't get any error but my code does not create any view, something must be wrong but I don't know what.
public struct INFOVIEW
{
public Point2d viewCenter;
public Point3d viewTarget;
public Vector3d viewDirection;
public double viewHeight;
}
private void btnView_Click(object sender, EventArgs e)
{
List
<INFOVIEW
> list
= new List
<INFOVIEW
>();
Document doc = AcadApp.DocumentManager.MdiActiveDocument;
Database dbXref
= new Database
(false,
true);
using (doc.LockDocument())
{
using (dbXref)
{
try
{
dbXref.ReadDwgFile("C:\\TEMP\\viewtesting.dwg", FileShare.ReadWrite, false, "");
}
catch
{
dbXref.Dispose();
return;
}
using (Transaction tr = dbXref.TransactionManager.StartTransaction())
{
ViewTable vt = (ViewTable)tr.GetObject(dbXref.ViewTableId, OpenMode.ForWrite);
foreach (ObjectId id in vt)
{
ViewTableRecord vtr = (ViewTableRecord)tr.GetObject(id, OpenMode.ForWrite);
INFOVIEW newInfo;
newInfo.viewCenter = vtr.CenterPoint;
newInfo.viewTarget = vtr.Target;
newInfo.viewDirection = vtr.ViewDirection;
newInfo.viewHeight = vtr.Height;
list.Add(newInfo);
}
tr.Commit();
}
dbXref.Dispose();
}
Database db = doc.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
ViewTable vt2 = (ViewTable)tr.GetObject(db.ViewTableId, OpenMode.ForWrite);
foreach (INFOVIEW vtrList in list)
{
ViewTableRecord viewTBR
= new ViewTableRecord
(); viewTBR.Target = vtrList.viewTarget;
viewTBR.ViewDirection = vtrList.viewDirection;
viewTBR.Height = vtrList.viewHeight;
viewTBR.CenterPoint = vtrList.viewCenter;
vt2.Add(viewTBR);
tr.AddNewlyCreatedDBObject(viewTBR, true);
}
tr.Commit();
}
}
}