本文整理汇总了C#中Database.CloseInput方法的典型用法代码示例。如果您正苦于以下问题:C# Database.CloseInput方法的具体用法?C# Database.CloseInput怎么用?C# Database.CloseInput使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Database
的用法示例。
在下文中一共展示了Database.CloseInput方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PlotFiles
private void PlotFiles()
{
DsdEntryCollection dsdCol = new DsdEntryCollection();
int indexfile = 0;
title = $"Печать {filesDwg.Length} файлов dwg...";
foreach (var fileDwg in filesDwg)
{
if (HostApplicationServices.Current.UserBreak())
throw new Exception(General.CanceledByUser);
indexfile++;
using (var dbTemp = new Database(false, true))
{
dbTemp.ReadDwgFile(fileDwg, FileOpenMode.OpenForReadAndAllShare, false, "");
dbTemp.CloseInput(true);
using (var t = dbTemp.TransactionManager.StartTransaction())
{
DBDictionary layoutDict = (DBDictionary)dbTemp.LayoutDictionaryId.GetObject(OpenMode.ForRead);
List<Layout> layouts = new List<Layout>();
foreach (DBDictionaryEntry entry in layoutDict)
{
if (entry.Key != "Model")
{
if (!entry.Value.IsErased)
{
var layout = entry.Value.GetObject(OpenMode.ForRead) as Layout;
layouts.Add(layout);
}
}
}
// Фильтр листов
if (Options.FilterState)
{
layouts = FilterLayouts(layouts, Options);
}
List<Tuple<Layout, DsdEntry>> layoutsDsd = new List<Tuple<Layout, DsdEntry>>();
foreach (var layout in layouts)
{
DsdEntry dsdEntry = new DsdEntry();
dsdEntry.Layout = layout.LayoutName;
dsdEntry.DwgName = fileDwg;
//dsdEntry.Nps = "Setup1";
dsdEntry.NpsSourceDwg = fileDwg;
dsdEntry.Title = indexfile + "-" + layout.LayoutName;
layoutsDsd.Add(new Tuple<Layout, DsdEntry>(layout, dsdEntry));
//dsdCol.Add(dsdEntry);
}
if (Options.SortTabOrName)
{
layoutsDsd.Sort((l1, l2) => l1.Item1.TabOrder.CompareTo(l2.Item1.TabOrder));
}
else
{
layoutsDsd.Sort((l1, l2) => l1.Item1.LayoutName.CompareTo(l2.Item1.LayoutName));
}
layoutsDsd.ForEach(l => dsdCol.Add(l.Item2));
t.Commit();
}
}
}
PublisherDSD(dsdCol);
}
示例2: copyFlat
private static void copyFlat(string fileFlat, ObjectId idBt)
{
using (var dbFlat = new Database(false, true))
{
dbFlat.ReadDwgFile(fileFlat, FileOpenMode.OpenForReadAndAllShare, false, "");
dbFlat.CloseInput(true);
using (var bt = dbFlat.BlockTableId.Open( OpenMode.ForRead) as BlockTable)
{
foreach (var idBtr in bt)
{
using (var btr = idBtr.Open( OpenMode.ForRead) as BlockTableRecord)
{
if (Revit.Apartment.IsBlockNameApartment(btr.Name))
{
using (var map = new IdMapping())
{
ObjectIdCollection ids = new ObjectIdCollection(new[] { idBtr });
dbFlat.WblockCloneObjects(ids, idBt, map, DuplicateRecordCloning.Ignore, false);
}
return;
}
}
}
}
}
}
示例3: CloseAndDelete
public void CloseAndDelete(List<PanelAKR> panelsToDelete)
{
string file = dbLib.Filename;
try
{
dbLib.Dispose();
}
catch { }
File.Delete(file);
// Удаление блоков
if (panelsToDelete != null && panelsToDelete.Count > 0)
{
// Сделать копию библиотеки
PanelLibrarySaveService.BackUpLibPanelsFile();
using (ProgressMeter progress = new ProgressMeter())
{
progress.SetLimit(panelsToDelete.Count);
progress.Start($"Удаление {panelsToDelete.Count} панелей из библиотеки...");
using (var db = new Database(false, true))
{
db.ReadDwgFile(PanelLibrarySaveService.LibPanelsFilePath, FileShare.None, true, "");
db.CloseInput(true);
using (var t = db.TransactionManager.StartTransaction())
{
var bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
foreach (var item in panelsToDelete)
{
if (bt.Has(item.BlName))
{
var idPanelAkr = bt[item.BlName];
var dbo = idPanelAkr.GetObject(OpenMode.ForWrite);
try
{
dbo.Erase();
progress.MeterProgress();
}
catch { };
}
}
t.Commit();
}
db.SaveAs(PanelLibrarySaveService.LibPanelsFilePath, DwgVersion.Current);
}
Logger.Log.Error ($"Удалены панели АКР из библиотеки - {panelsToDelete.Count}шт.: {string.Join(", ",panelsToDelete)}");
progress.Stop();
}
}
}
示例4: PlotDir
// Открытие и печать всех файлов в папке
public void PlotDir(string dir)
{
var dirInfo = new DirectoryInfo(dir);
var filesDwg = dirInfo.GetFiles("*.dwg", SearchOption.TopDirectoryOnly);
Database dbOrig = HostApplicationServices.WorkingDatabase;
foreach (var fileDwg in filesDwg)
{
// Открыть файл, сделать его текущим
using (var db = new Database(false, true))
{
db.ReadDwgFile(fileDwg.FullName, FileShare.ReadWrite, false, "");
db.CloseInput(true);
HostApplicationServices.WorkingDatabase = db;
db.CloseInput(true);
multiSheetPlot(db);
HostApplicationServices.WorkingDatabase = dbOrig;
}
}
}
示例5: CreateBtrPanelFromBase
public void CreateBtrPanelFromBase(int i, string[] marks)
{
// Тест создания определения блока панели по описанию в xml базе.
PanelBase panelBase;
string testFile = @"c:\temp\test\АКР\Base\Tests\CreateBlockPanelTest\TestCreatePanels.dwg";
//File.Copy(@"c:\Autodesk\AutoCAD\Pik\Settings\Template\АР\АР.dwt", testFile, true);
using (var db = new Database(false, true))
{
db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
db.CloseInput(true);
using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
{
baseService.ClearPanelsAkrFromDrawing(db);
baseService.InitToCreationPanels(db);
Point3d pt = Point3d.Origin;
List<ObjectId> idsBtrPanels = new List<ObjectId>();
// Создание определениц блоков панелей
foreach (var mark in marks)
{
Panel panelXml = baseService.GetPanelXml(mark);
panelBase = new PanelBase(panelXml, baseService);
panelBase.CreateBlock();
if (!panelBase.IdBtrPanel.IsNull)
{
idsBtrPanels.Add(panelBase.IdBtrPanel);
}
}
// Вставка вхождениц блоков панелей в модель
using (var t = db.TransactionManager.StartTransaction())
{
foreach (var idBtrPanel in idsBtrPanels)
{
var blRefPanel = new BlockReference(pt, idBtrPanel);
var ms = db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
ms.AppendEntity(blRefPanel);
t.AddNewlyCreatedDBObject(blRefPanel, true);
pt = new Point3d(0, pt.Y + 10000, 0);
}
t.Commit();
}
}
db.SaveAs(testFile, DwgVersion.Current);
}
}
示例6: Edit
public void Edit()
{
var panelsFile = GetPanelsFile();
List<PanelAKR> panelsInLib;
dbLib = new Database(false, true);
dbLib.ReadDwgFile(panelsFile, FileShare.ReadWrite, true, "");
dbLib.CloseInput(true);
// список блоков АКР-Панелей в библиотеке (полные имена блоков).
panelsInLib = PanelAKR.GetAkrPanelLib(dbLib, true);
UI.PanelsAkrView panelsView = new UI.PanelsAkrView(panelsInLib, this);
UI.PanelsWindow panelsWindow = new UI.PanelsWindow(panelsView);
Application.ShowModelessWindow(panelsWindow);
}
示例7: GetAllPlanesTest
public void GetAllPlanesTest()
{
List<FloorArchitect> floorsAr;
string testFile = @"c:\temp\test\АКР\Base\Tests\Тест-ПостроениеФасада.dwg";
using (var db = new Database(false, true))
{
db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
db.CloseInput(true);
using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
{
BaseService baseService = new BaseService();
baseService.InitToCreationPanels(db);
floorsAr = FloorArchitect.GetAllPlanes(db, baseService);
}
db.SaveAs(@"c:\temp\test\АКР\Base\Tests\Тест-ПостроениеФасада-WindowMarks.dwg", DwgVersion.Current);
}
Assert.AreEqual(floorsAr.Count, 2);
}
示例8: Autograder
public static void Autograder()
{
const string systemVar_DwgCheck = "DWGCHECK";
Int16 dwgCheckPrevious = (Int16)Application.GetSystemVariable(systemVar_DwgCheck);
Application.SetSystemVariable(systemVar_DwgCheck, 2);
Document acDoc = Application.DocumentManager.MdiActiveDocument;
PromptStringOptions pStrOpts = new PromptStringOptions("\nEnter entire path to the folder containing all the submissions");
pStrOpts.AllowSpaces = true;
PromptResult pStrRes = acDoc.Editor.GetString(pStrOpts);
/*string[] folderpaths = Directory.GetDirectories(@"C:\Users\Vaibhav\Desktop\2D\2D Cad project\");*/
string[] folderpaths = Directory.GetDirectories(pStrRes.StringResult);
int i = 0;
foreach (string strFolderStudname in folderpaths)
{
i = i + 1;
//define dictionary for storing data.
Dictionary<string, string> dict1 = new Dictionary<string, string>();
dict1["auxinfodim"] = "";
dict1["blocksinlastlayout"] = "";
dict1["filename"] = i.ToString() + ": " + strFolderStudname;
//writestuff(strwrite,i.ToString()+": "+strFolderStudname,1);
Directory.SetCurrentDirectory(strFolderStudname + "/Submission attachment(s)/");
string[] filepaths = Directory.GetFiles(Directory.GetCurrentDirectory());
bool checkfilepass = false;
bool checkfilepdf = false;
bool checkfilepdfmulti = false;
int checkblockexistance = 0;
foreach (string strFileName in filepaths)
{
string newStr = strFileName.Substring(strFileName.Length - 3, 3);
if (newStr.Equals("dwg"))
{
/*Application.DocumentManager.Open(strFileName,false); //the boolean is for read only
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;*/
Database acCurDb = new Database(false, true);
acCurDb.ReadDwgFile(strFileName, FileOpenMode.OpenForReadAndAllShare, false, null);
acCurDb.CloseInput(true);
checkfilepass = true;
Layout taborderlayout = null;
int vp2 = 0;
string[] Layerlist = { };
using (Transaction acTrans2 = acCurDb.TransactionManager.StartTransaction())
{
DBDictionary lays = acTrans2.GetObject(acCurDb.LayoutDictionaryId, OpenMode.ForRead) as DBDictionary;
LayoutManager Lm = LayoutManager.Current;
string currentLayout = Lm.CurrentLayout;
int layoutnum = 0;
string slayouts = "NA";
int tabordercheck = 0;
int tabviewports = 0;
bool tabcheck = false;
Viewport taborderviewport=null;
Viewport tempviewport = null;
Layout firsttaborderlayout=null;
Viewport firsttaporderviewport=null;
int firsttabviewports = 0;
foreach (DBDictionaryEntry de in lays)
{
layoutnum += 1;
Layout layout = de.Value.GetObject(OpenMode.ForRead) as Layout;
string layoutName = layout.LayoutName;
if (layoutName != "Model")
{
if (slayouts.Equals("NA"))
{
slayouts = layoutName;
}
else
{
slayouts = layoutName + " , " + slayouts;
}
ObjectIdCollection vpIdCol = layout.GetViewports();
if (tabordercheck < layout.TabOrder)
{
tabordercheck = layout.TabOrder;
taborderlayout = layout;
tabcheck = true;
}
else
{
tabcheck = false;
}
int nviewports = -1;
foreach (ObjectId vpId in vpIdCol)
{
Viewport vp = vpId.GetObject(OpenMode.ForRead) as Viewport;
nviewports += 1;
tempviewport = vp;
if (tabcheck == true)
{
tabviewports = nviewports;
}
if (layout.TabOrder == 2)
{
firsttaborderlayout = layout;
firsttaporderviewport = vp;
firsttabviewports = nviewports;
//.........这里部分代码省略.........
示例9: copyObjectFromTemplate
// Копирование стиля таблиц ПИК из файла шаблона
private static ObjectId copyObjectFromTemplate(Database db, Func<Database, string, ObjectId> getObjectId, string styleName, ObjectId ownerIdTable)
{
ObjectId idStyleDest = ObjectId.Null;
// файл шаблона
var userGroup = PikSettings.UserGroupsCombined.First();
string fileTemplate = Path.Combine(PikSettings.LocalSettingsFolder, "Template", userGroup,
userGroup + ".dwt");
if (File.Exists(fileTemplate))
{
using (Database dbTemplate = new Database(false, true))
{
dbTemplate.ReadDwgFile(fileTemplate, FileOpenMode.OpenForReadAndAllShare, false, "");
dbTemplate.CloseInput(true);
ObjectId idStyleInTemplate = getObjectId(dbTemplate, styleName);
if (!idStyleInTemplate.IsNull)
{
using (IdMapping map = new IdMapping())
{
using (var ids = (new ObjectIdCollection(new ObjectId[] { idStyleInTemplate })))
{
db.WblockCloneObjects(ids, ownerIdTable, map, DuplicateRecordCloning.Replace, false);
idStyleDest = map[idStyleInTemplate].Value;
}
}
}
}
}
return idStyleDest;
}
示例10: RedefineBlockInFile
private void RedefineBlockInFile(Editor ed, Database db, List<RedefineBlock> blocksRedefine,
List<RedefineBlock> renameBlocks, FileInfo file,
ref int countFilesRedefined, ref int countFilesWithoutBlock)
{
List<Error> errors = new List<Error>();
using (Database dbExt = new Database(false, true))
{
dbExt.ReadDwgFile(file.FullName, FileShare.ReadWrite, false, "");
dbExt.CloseInput(true);
countFilesRedefined = renameAndRedefBlocksInDb(blocksRedefine, renameBlocks, file, countFilesRedefined, errors, dbExt);
dbExt.SaveAs(file.FullName, DwgVersion.Current);
}
if (errors.Count != 0)
Inspector.Errors.AddRange(errors);
}
示例11: CopyBlockFromExternalDrawing
/// <summary>
/// Копирование определенич блока из внешнего чертежа
/// </summary>
/// <param name="blNames">Имена блоков</param>
/// <param name="fileDrawing">Полный путь к чертежу из которого копируется блок</param>
/// <param name="destDb">База чертежа в который копируетсяя блок</param>
/// <exception cref="Exception">Если нет блока в файле fileDrawing.</exception>
/// <returns>Список пар значений имени блока и idBtr</returns>
public static Dictionary<string, ObjectId> CopyBlockFromExternalDrawing(IList<string> blNames, string fileDrawing, Database destDb,
DuplicateRecordCloning mode = DuplicateRecordCloning.Ignore)
{
var resVal = new Dictionary<string, ObjectId>();
var uniqBlNames = blNames.Distinct(StringComparer.OrdinalIgnoreCase);
using (var extDb = new Database(false, true))
{
extDb.ReadDwgFile(fileDrawing, System.IO.FileShare.ReadWrite, true, "");
extDb.CloseInput(true);
var valToCopy = new Dictionary<ObjectId, string>();
using (var bt = (BlockTable)extDb.BlockTableId.Open(OpenMode.ForRead))
{
foreach (var blName in uniqBlNames)
{
ObjectId id;
if (bt.Has(blName))
{
id = bt[blName];
valToCopy.Add(id, blName);
}
}
}
// Копир
if (valToCopy.Count > 0)
{
// Получаем текущую базу чертежа
using (IdMapping map = new IdMapping())
{
using (var ids = new ObjectIdCollection(valToCopy.Keys.ToArray()))
{
destDb.WblockCloneObjects(ids, destDb.BlockTableId, map, mode, false);
foreach (var item in valToCopy)
{
resVal.Add(item.Value, map[item.Key].Value);
}
}
}
}
}
// Если задан режим переопределения - то перерисовка геометрии динамических блоков
if (mode == DuplicateRecordCloning.Replace)
{
using (var t = destDb.TransactionManager.StartTransaction())
{
var bt = destDb.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
foreach (var item in resVal)
{
if (item.Value.IsValidEx())
{
var btr = item.Value.GetObject(OpenMode.ForRead) as BlockTableRecord;
if (btr.IsDynamicBlock)
{
try
{
btr.UpgradeOpen();
btr.UpdateAnonymousBlocks();
}
catch { }
}
}
}
t.Commit();
}
}
return resVal;
}
示例12: Contents
// Содержание тома (Общие данные. Ведомость комплекта чертежей.)
public void Contents()
{
// Создание файла содержания и титульных листов
string fileContent = Path.Combine(_album.AlbumDir, "00_Содержание" + _album.StartOptions.Abbr + ".dwg");
File.Copy(_sheetsSet.SheetTemplateFileContent, fileContent);
// Кол листов содержания = Суммарное кол лисчтов панелей / на кол строк в таблице на одном листе
// Но на первом листе содержания первые 5 строк заняты (обложка, тит, общие данные, наруж стен панели, том1).
//_dbFacade = HostApplicationServices.WorkingDatabase;
using (_dbContent = new Database(false, true))
{
_dbContent.ReadDwgFile(fileContent, FileShare.ReadWrite, false, "");
_dbContent.CloseInput(true);
using (new AcadLib.WorkingDatabaseSwitcher(_dbContent))
{
// Замена блока рамки из чертежа фасада, если он есть
_album.AlbumInfo?.Frame?.ChangeBlockFrame(_dbContent, false);
_album?.AlbumInfo?.CoverTitle?.ChangeCoverAndTitle(_dbContent);
using (var t = _dbContent.TransactionManager.StartTransaction())
{
int curContentLayoutNum = _countSheetsBeforContent+1;
Table tableContent;
BlockReference blRefStamp;
CopyContentSheet(t, curContentLayoutNum, out tableContent, out blRefStamp);
// Определение кол-ва марок АР
int countMarkArs = CalcMarksArNumber(_sheetsMarkSB);
// Определение кол-ва листов содержания (только для панелей без учета лтстов обложек и тп.)
_countContentSheets = CalcSheetsContentNumber(tableContent.Rows.Count, countMarkArs) + _album.StartOptions.NumberAddSheetContent;
// Заполнение штампа на первом листе содержания
FillingStampContent(blRefStamp, curContentLayoutNum- _countSheetsBeforContent, t);
// текущая строка для записи листа
int row = _firstRowInTableForSheets;
// На первом листе содержания заполняем строки для Обложки, Тит, Общ дан, НСП, Том1.
tableContent.Cells[row, 2].TextString = 1.ToString();
tableContent.Cells[row, 2].Alignment = CellAlignment.MiddleCenter;
tableContent.Cells[row++, 1].TextString = "Обложка";
tableContent.Cells[row, 2].TextString = 2.ToString();
tableContent.Cells[row, 2].Alignment = CellAlignment.MiddleCenter;
tableContent.Cells[row++, 1].TextString = "Титульный лист";
tableContent.Cells[row, 1].TextString = "Общие данные. Ведомость комплекта чертежей";
tableContent.Cells[row, 2].TextString = _countContentSheets > 1 ? "3-" + (3 + _countContentSheets - 1).ToString() : "3";
tableContent.Cells[row, 2].Alignment = CellAlignment.MiddleCenter;
row++;
tableContent.Cells[row++, 1].TextString = "Наружные стеновые панели";
tableContent.Cells[row++, 1].TextString = "ТОМ";
int curSheetArNum;
if (_album.StartOptions.NumberFirstSheet == 0)
{
curSheetArNum = _countContentSheets + _countSheetsBeforContent;// номер для первого листа Марки АР
}
else
{
curSheetArNum = _album.StartOptions.NumberFirstSheet - 1;
}
ProgressMeter progressMeter = new ProgressMeter();
progressMeter.SetLimit(_sheetsMarkSB.Count);
progressMeter.Start("Создание содержания ");
foreach (var sheetMarkSB in _sheetsMarkSB)
{
progressMeter.MeterProgress();
foreach (var sheetMarkAR in sheetMarkSB.SheetsMarkAR)
{
tableContent.Cells[row, 1].TextString = sheetMarkAR.MarkArFullName + ". Раскладка плитки на фасаде";
sheetMarkAR.SheetNumber = ++curSheetArNum;
tableContent.Cells[row, 2].TextString = curSheetArNum.ToString();
tableContent.Cells[row, 2].Alignment = CellAlignment.MiddleCenter;
row++;
CheckEndOfTable(t, ref curContentLayoutNum, ref tableContent, ref blRefStamp, ref row);
tableContent.Cells[row, 1].TextString = sheetMarkAR.MarkArFullName + ". Раскладка плитки в форме";
tableContent.Cells[row, 2].TextString = curSheetArNum.ToString() + ".1";
sheetMarkAR.SheetNumberInForm = curSheetArNum.ToString() + ".1";
tableContent.Cells[row, 2].Alignment = CellAlignment.MiddleCenter;
row++;
CheckEndOfTable(t, ref curContentLayoutNum, ref tableContent, ref blRefStamp, ref row);
}
}
progressMeter.Stop();
//Удаление пустых строк в таблице содержания
if (tableContent.Rows.Count > row + 1)
{
tableContent.DeleteRows(row, tableContent.Rows.Count - row);
}
// Удаление последнего листа содержания (пустой копии)
HostApplicationServices.WorkingDatabase = _dbContent;
LayoutManager lm = LayoutManager.Current;
//lm.CurrentLayout = getLayoutContentName(_countSheetsBeforContent + 1);
//string layoutNameToDel = (_countSheetsBeforContent + (++_countContentSheets)).ToString("00") + "_" + Settings.Default.SheetTemplateLayoutNameForContent;
lm.DeleteLayout(Settings.Default.SheetTemplateLayoutNameForContent);
//.........这里部分代码省略.........
示例13: Export
/// <summary>
/// Экспорт фасада для АР
/// </summary>
public void Export()
{
// Список панелей для экспорта
SelectPanels = new SelectionBlocks();
SelectPanels.SelectBlRefsInModel(false);
if (SelectPanels.IdsBlRefPanelSb.Count > 0)
{
Inspector.AddError("В текущем чертеже в Модели не должно быть панелей Марки СБ (только Марки АР).", icon: System.Drawing.SystemIcons.Error);
return;
}
if (SelectPanels.IdsBlRefPanelAr.Count == 0)
{
Inspector.AddError("Не найдены панели Марки АР в Моделе текущего чертежа.", icon: System.Drawing.SystemIcons.Error);
return;
}
// Определить файл в который экспортировать фасад
_fileExport = new FileExport();
_fileExport.DefineFile();
// определение фасадов (вокруг панелей АКР)
var facades = Facade.GetFacades(SelectPanels.FacadeBlRefs);
// Определение экспортируемых панелей и фасадов
CPS = new ConvertPanelService(this);
CPS.DefinePanels(facades);
using (var dbExport = new Database(!_fileExport.IsExistsFileExport, true))
{
if (_fileExport.IsExistsFileExport)
{
// удалить старые панели из файла экспорта
try
{
dbExport.ReadDwgFile(_fileExport.FileExportFacade.FullName, FileShare.Read, true, "");
}
catch (Exception ex)
{
// файл занят.
warningMessageBusyFileExportFacade(ex, _fileExport.FileExportFacade.FullName);
throw;
}
// сделать копию файла
_fileExport.Backup();
dbExport.CloseInput(true);
deletePanels(dbExport);
}
dbExport.CloseInput(true);
CPS.DbExport = dbExport;
// Копирование панелей АР в экспортный файл
copyPanelToExportFile(dbExport);
// Переопределение блока плитки из файла шаблона блоков для Экспорта фасадов.
redefineBlockTile(dbExport);
using (AcadLib.WorkingDatabaseSwitcher switchDb = new AcadLib.WorkingDatabaseSwitcher(dbExport))
{
using (var t = dbExport.TransactionManager.StartTransaction())
{
// Преобразования определений блоков
CPS.ConvertBtr();
// Преобразования торцов фасадов
CPS.ConvertEnds();
t.Commit();
}
}
CPS.Purge();
dbExport.SaveAs(_fileExport.FileExportFacade.FullName, DwgVersion.Current);
}
}
示例14: LoadSections
/// <summary>
/// Копирование блоков сечений из шаблона блоков и доп списка блоков blNames
/// </summary>
/// <param name="fileBlocksTemplate"></param>
/// <param name="service"></param>
/// <param name="blNames"></param>
/// <returns></returns>
public static List<BlockSectionAbstract> LoadSections(string fileBlocksTemplate, BaseService service, List<string> blNames,
out Dictionary<string, ObjectId> blNamesCopy)
{
blNamesCopy = new Dictionary<string, ObjectId>();
Dictionary<ObjectId, BlockSectionAbstract> blSecToCopy = new Dictionary<ObjectId, BlockSectionAbstract>();
using (var dbBlocks = new Database(false, true))
{
dbBlocks.ReadDwgFile(fileBlocksTemplate, FileOpenMode.OpenForReadAndAllShare, false, "");
dbBlocks.CloseInput(true);
using (var bt = dbBlocks.BlockTableId.Open(OpenMode.ForRead) as BlockTable)
{
foreach (ObjectId idBtr in bt)
{
using (var btr = idBtr.Open(OpenMode.ForRead) as BlockTableRecord)
{
var blNameToCopy = blNames.Find(n => n.Equals(btr.Name, StringComparison.OrdinalIgnoreCase));
if (!string.IsNullOrEmpty(blNameToCopy))
{
blNamesCopy.Add(blNameToCopy, btr.Id);
continue;
}
BlockSectionAbstract blSec = null;
if (btr.Name.StartsWith(Settings.Default.BlockPanelSectionVerticalPrefixName, StringComparison.OrdinalIgnoreCase))
{
blSec = new BlockSectionVertical(btr.Name, service);
}
else if (btr.Name.StartsWith(Settings.Default.BlockPanelSectionHorizontalPrefixName, StringComparison.OrdinalIgnoreCase))
{
blSec = new BlockSectionHorizontal(btr.Name, service);
}
if (blSec != null)
{
var resParse = blSec.ParseBlName();
if (resParse.Success)
{
blSecToCopy.Add(idBtr, blSec);
//Определение ассоциативных штриховок и объектов с которыми они связаны
blSec.getHatchAssociateIds(btr);
}
else
{
Inspector.AddError($"Не определены параметры блока сечения в файле шаблона блоков. {btr.Name}. {resParse.Error}",
icon: System.Drawing.SystemIcons.Error);
}
}
}
}
}
if (blSecToCopy.Count > 0)
{
using (ObjectIdCollection ids = new ObjectIdCollection(blSecToCopy.Keys.ToArray()))
{
foreach (var item in blNamesCopy.Values)
{
ids.Add(item);
}
using (IdMapping map = new IdMapping())
{
service.Db.WblockCloneObjects(ids, service.Db.BlockTableId, map, DuplicateRecordCloning.Replace, false);
foreach (var item in blSecToCopy)
{
item.Value.IdBtr = map[item.Key].Value;
if (item.Value._hatchsAssociatedIdsDictInTemplate != null)
{
item.Value.setHatchIdsMapping(map);
//item.Value.ReplaceAssociateHatch();
}
}
foreach (var name in blNames)
{
ObjectId idBl;
if (blNamesCopy.TryGetValue(name, out idBl))
{
blNamesCopy[name] = map[idBl].Value;
}
}
}
}
}
else
{
Inspector.AddError("Не найдены блоки сечений панелей в файле шаблона блоков АКР. " +
$"Файл шаблона {fileBlocksTemplate}. Префикс блоков {Settings.Default.BlockPanelSectionVerticalPrefixName} " +
$"и {Settings.Default.BlockPanelSectionHorizontalPrefixName}", icon: System.Drawing.SystemIcons.Error);
}
}
return blSecToCopy.Values.ToList();
}
示例15: TestDynBlSec
public void TestDynBlSec()
{
string testFile = @"c:\temp\test\АКР\Base\Tests\TestDynBlSec.dwg";
using (var db = new Database(false, true))
{
db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
db.CloseInput(true);
using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
{
ObjectId idBtrPanel;
ObjectId idBtrMs;
using (var t = db.TransactionManager.StartTransaction())
{
BlockTableRecord ms;
BlockTableRecord btrPanel;
ObjectId idBtrSec;
BlockTableRecord btrDim;
using (var bt = db.BlockTableId.GetObject(OpenMode.ForWrite) as BlockTable)
{
ms = bt[BlockTableRecord.ModelSpace].GetObject(OpenMode.ForWrite) as BlockTableRecord;
idBtrMs = ms.Id;
idBtrSec = bt["Test"];
btrPanel = new BlockTableRecord();
btrPanel.Name = "Panel";
idBtrPanel = bt.Add(btrPanel);
t.AddNewlyCreatedDBObject(btrPanel, true);
btrDim = new BlockTableRecord();
btrDim.Name = "Dim";
bt.Add(btrDim);
t.AddNewlyCreatedDBObject(btrDim, true);
}
BlockReference blRefDim = new BlockReference(Point3d.Origin, btrDim.Id);
btrPanel.AppendEntity(blRefDim);
t.AddNewlyCreatedDBObject(blRefDim, true);
BlockReference blRef = new BlockReference(Point3d.Origin, idBtrSec);
btrDim.AppendEntity(blRef);
t.AddNewlyCreatedDBObject(blRef, true);
setDynParam(blRef);
t.Commit();
}
using (var t = db.TransactionManager.StartTransaction())
{
var ms = idBtrMs.GetObject(OpenMode.ForWrite) as BlockTableRecord;
BlockReference blRefPanel = new BlockReference(Point3d.Origin, idBtrPanel);
ms.AppendEntity(blRefPanel);
t.AddNewlyCreatedDBObject(blRefPanel, true);
t.Commit();
}
}
string saveFile = @"c:\temp\test\АКР\Base\Tests\TestDynBlSec-TestSaved.dwg";
db.SaveAs(saveFile, DwgVersion.Current);
}
}