/// <summary> /// 替换审核者、设计者、日期等属性 /// </summary> /// <param name="entity"></param> public static void ReplaceProperty(AcadEntity entity, AcadBlocks blocks, Bussiness.Rules rules) { if (entity.ObjectName == "AcDbBlockReference") { var s = ((AcadBlockReference)entity); var name = blocks.Item(s.Name).Name; blocks.Item(s.Name).Name = rand.Next().ToString(); if (s.HasAttributes) { AcadAttributeReference bb; object[] aa = (object[])s.GetAttributes(); for (int i = 0; i < aa.Length; i++) { bb = aa[i] as AcadAttributeReference; if (bb != null) { if (bb.TagString != "---------" && bb.TagString != "------" && !bb.TagString.Contains("GEN-TITLE-MAT") && !bb.TagString.Contains("GEN-TITLE-DES") && bb.TagString != "01" && !bb.TagString.Contains("GEN-TITLE-SCA{6.14,1}")) { bb.TextString = ""; } if (bb.TagString == "---------") { oldCode = bb.TextString; oldCode = ReplaceStr(oldCode); var startCode = oldCode.Substring(0, RegexCode()); var endCode = oldCode.Substring(RegexCode(), oldCode.Length - RegexCode()); Hashtable hash = rules.GetRules(); foreach (DictionaryEntry de in hash) { if (startCode == de.Key.ToString()) { startCode = de.Value.ToString(); } } newCode = startCode + "0" + Rand(); if (!string.IsNullOrEmpty(newCode)) { bb.TextString = newCode; } } } } } } else if (entity.ObjectName == "AcDbMText") { AcadMText mtext = entity as AcadMText; if (mtext != null) { if (mtext.TextString.Contains("FAX") || mtext.TextString.Contains("TEL") || mtext.TextString.Contains("TOMITA")) { mtext.TextString = ""; } } } }
internal void FriendQuit() { if (mblnOpened) { mobjDictReadCodes = null; mobjDictReadValues = null; mobjAcadBlocks = null; mobjAcadDatabase = null; mblnOpened = false; } }
private bool InternReadTable(ref string nrstrErrMsg) { nrstrErrMsg = null; int dlngIdx = checked (mlngTblBeg + 1); Dictionary <object, object> dobjDictXDictionary2 = new Dictionary <object, object>(); double ddblObjectID = default(double); double ddblOwnerID = default(double); int dlngCount = default(int); bool InternReadTable = default(bool); if (hwpDxf_ReadRef.BkDXFReadRef_AcadSymbolTable(mobjAcadDatabase, mobjDictReadCodes, mobjDictReadValues, ref dlngIdx, ref ddblObjectID, ref ddblOwnerID, ref dlngCount, ref dobjDictXDictionary2, ref nrstrErrMsg)) { object dvarXDataType = default(object); object dvarXDataValue = default(object); bool dblnError = !hwpDxf_ReadBas.BkDXFReadBas_XData(ref dlngIdx, mobjDictReadCodes, mobjDictReadValues, ref dvarXDataType, ref dvarXDataValue, ref nrstrErrMsg); if (!dblnError) { mobjAcadBlocks = mobjAcadDatabase.FriendAddAcadObjectBlocks(ref nrstrErrMsg, ddblObjectID); if (mobjAcadBlocks == null) { nrstrErrMsg = "Das Objekt konnte nicht hinzugefügt werden."; dblnError = true; } else { mobjAcadBlocks.FriendSetDictXDictionary = dobjDictXDictionary2; mobjAcadBlocks.SetXData(RuntimeHelpers.GetObjectValue(dvarXDataType), RuntimeHelpers.GetObjectValue(dvarXDataValue)); bool dblnStop = default(bool); while (dlngIdx <= mlngTblEnd && !dblnError && !dblnStop) { int dlngCode = Conversions.ToInteger(mobjDictReadCodes[dlngIdx]); object dvarValue = RuntimeHelpers.GetObjectValue(mobjDictReadValues[dlngIdx]); if (dlngCode != 0 && dlngCode != 0) { nrstrErrMsg = "Ungültiger Gruppencode für Tabelleneintrag/ende in Zeile " + Conversions.ToString(checked (dlngIdx * 2 + 1)) + "."; dblnError = true; } else if (Operators.ConditionalCompareObjectEqual(dvarValue, "ENDTAB", TextCompare: false)) { dlngIdx = checked (dlngIdx + 1); dblnStop = true; } else if (!InternReadBlockRecord(ddblObjectID, ref dlngIdx, ref mobjAcadBlocks, ref nrstrErrMsg)) { dblnError = true; } } } } InternReadTable = !dblnError; } dobjDictXDictionary2 = null; return(InternReadTable); }
public bool Read(ref string nrstrErrMsg) { mobjAcadBlocks = mobjAcadDatabase.Blocks; nrstrErrMsg = null; checked { mlngLastEntry = mlngSecBeg - 1; bool Read = InternReadSection(ref nrstrErrMsg); InternCheckIndex(mlngSecEnd + 2); return(Read); } }
public void ListSection(ref int rlngIdx) { mobjAcadBlocks = mobjAcadDatabase.Blocks; InternAddToDictLine(ref rlngIdx, 0, "SECTION"); mlngSecBeg = rlngIdx; InternAddToDictLine(ref rlngIdx, 2, "BLOCKS"); if (mobjAcadBlocks != null) { InternListSection(ref rlngIdx); } mlngSecEnd = rlngIdx; InternAddToDictLine(ref rlngIdx, 0, "ENDSEC"); }
public override void Run() { this.AcadDoc = this.AcAppComObj.Documents.Open(this.AbsPath, null, null); //TODO 相应方法 AcadBlocks blocks = this.AcadDoc.Blocks; //1.获取要替换图号的规则 HistoryDto dto = Util.GetDrwingsDto(AcadDoc.Name); try { foreach (AcadBlock block in blocks) { foreach (AcadEntity entity in block) { //2.替换审核者、设计者、日期等属性 Util.ReplaceProperty(entity, blocks, this.GetDefaultRules()); //3.替换装配图中的明细表中的编号 Util.ReplaceDrawingCode(entity, AcAppComObj); entity.Update(); } } dto.FileStatus = "处理完成"; dto.FilePath = dto.FilePath.Replace("\\", "\\\\"); Util.UpdateHistory(dto); var fileName = Util.SplitCode(Util.newCode); if (AcAppComObj.ActiveDocument.Saved == false) { AcAppComObj.ActiveDocument.SaveAs(this.SavePath + fileName + "\\" + Util.newCode, AcSaveAsType.ac2013_dwg, null); this.AcadDoc.Close(); GC.Collect(); } } catch (Exception ex) { dto.FileStatus = "处理失败," + ex.Message; dto.FilePath = dto.FilePath.Replace("\\", "\\\\"); Util.UpdateHistory(dto); AcAppComObj.ActiveDocument.SaveAs(this.SavePath + "失败的图纸文件" + "\\" + Util.newCode, AcSaveAsType.ac2013_dwg, null); this.AcadDoc.Close(); } }
public void ListTable(ref int rlngIdx) { mobjAcadBlocks = mobjAcadDatabase.Blocks; if (mobjAcadBlocks != null) { InternAddToDictLine(ref rlngIdx, 0, "TABLE"); mlngTblBeg = rlngIdx; AcadBlocks acadBlocks = mobjAcadBlocks; InternAddToDictLine(ref rlngIdx, 2, acadBlocks.DXFName); InternAddToDictLine(ref rlngIdx, 5, acadBlocks.Handle); hwpDxf_List.BkDXFList_XDictionary((Dictionary <object, object>)acadBlocks.DictXDictionaries, ref rlngIdx, ref mobjDictReadCodes, ref mobjDictReadValues); InternAddToDictLine(ref rlngIdx, 330, acadBlocks.OwnerID); InternAddToDictLine(ref rlngIdx, 100, acadBlocks.SuperiorObjectName); InternAddToDictLine(ref rlngIdx, 70, acadBlocks.Count); object dvarXDataType = default(object); object dvarXDataValue = default(object); acadBlocks.GetXData(null, ref dvarXDataType, ref dvarXDataValue); hwpDxf_List.BkDXFList_XData(RuntimeHelpers.GetObjectValue(dvarXDataType), RuntimeHelpers.GetObjectValue(dvarXDataValue), ref rlngIdx, ref mobjDictReadCodes, ref mobjDictReadValues); acadBlocks = null; InternListTable(ref rlngIdx); mlngTblEnd = rlngIdx; InternAddToDictLine(ref rlngIdx, 0, "ENDTAB"); } }
/// <summary> /// 替换审核者、设计者、日期等属性 /// </summary> /// <param name="entity"></param> public static void ReplaceProperty(AcadEntity entity, AcadBlocks blocks, Bussiness.Rules rules) { if (entity.ObjectName == "AcDbBlockReference") { var s = ((AcadBlockReference)entity); var name = blocks.Item(s.Name).Name; blocks.Item(s.Name).Name = rand.Next().ToString(); if (s.HasAttributes) { AcadAttributeReference bb; object[] aa = (object[])s.GetAttributes(); for (int i = 0; i < aa.Length; i++) { bb = aa[i] as AcadAttributeReference; if (bb != null) { if (bb.TagString != "---------" && bb.TagString != "------" && !bb.TagString.Contains("GEN-TITLE-MAT") && !bb.TagString.Contains("GEN-TITLE-DES") && bb.TagString != "01" && !bb.TagString.Contains("GEN-TITLE-SCA{6.14,1}")) { bb.TextString = ""; } if (bb.TagString == "---------") { oldCode = bb.TextString; oldCode = ReplaceStr(oldCode); var startCode = oldCode.Substring(0, RegexCode()); var endCode = oldCode.Substring(RegexCode(), oldCode.Length - RegexCode()); Hashtable hash = rules.GetRules(); foreach (DictionaryEntry de in hash) { if (startCode == de.Key.ToString()) { startCode = de.Value.ToString(); } } newCode = startCode + "0" + Rand(); if (!string.IsNullOrEmpty(newCode)) bb.TextString = newCode; } } } } } else if (entity.ObjectName == "AcDbMText") { AcadMText mtext = entity as AcadMText; if (mtext != null) { if (mtext.TextString.Contains("FAX") || mtext.TextString.Contains("TEL") || mtext.TextString.Contains("TOMITA")) { mtext.TextString = ""; } } } }
private void UpdateCAD() { var showInfo = ""; var fileStaus = ""; if (string.IsNullOrEmpty(txtSavePath.Text)) { MessageBox.Show("请选择文件保存位置!", "提示信息"); return; } var FilePath = ""; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); for (int k = 0; k < lvwList.Items.Count; k++) { lblTips.Text = "当前共有: " + lvwList.Items.Count + " 张图纸需要处理,现在正在处理第 " + (k + 1) + " 张"; FilePath = lvwList.Items[k].ToString(); AcadDoc = acAppComObj.Documents.Open(FilePath, null, null); acAppComObj.Application.Visible = false; AcadBlocks blocks = AcadDoc.Blocks; HistoryDto dto = new HistoryDto(); CodeDto codeDto = new CodeDto(); dto.Id = Guid.NewGuid().ToString(); dto.FileName = AcadDoc.Name; dto.FilePath = FilePath; try { foreach (AcadBlock block in blocks) { foreach (AcadEntity entity in block) { list.Add(entity.ObjectName); ////1.替换基本属性 //Util.ReplaceProperty(entity); ////2.替换装配图的明细表编号 //Util.ReplaceDrawingCode(entity, acAppComObj); //entity.Update(); } } fileStaus = "图纸处理完成"; dto.FileStatus = fileStaus; //3.处理情况保存 //InsertHistory(dto); codeDto.Id = Guid.NewGuid().ToString(); codeDto.OldCode = Util.oldCode; codeDto.NewCode = Util.newCode; //InsertCode(codeDto); } catch (Exception ex) { fileStaus = "图纸处理异常,异常原因:" + ex.Message; dto.FileStatus = fileStaus; //3.处理情况保存 //InsertHistory(dto); continue; } dto.FileStatus = fileStaus; //判断是否需要保存,如需要则另存为 if (acAppComObj.ActiveDocument.Saved == false) { acAppComObj.ActiveDocument.SaveAs(txtSavePath.Text + "\\" + Util.newCode, AcSaveAsType.ac2013_dwg, null); GC.Collect(); } } stopwatch.Stop(); // 停止监视 TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double hours = timespan.TotalHours; // 总小时 double minutes = timespan.TotalMinutes; // 总分钟 double seconds = timespan.TotalSeconds; // 总秒数 double milliseconds = timespan.TotalMilliseconds; // 总毫秒数 lvwList.DataSource = list; MessageBox.Show(fileStaus); //MessageBox.Show("图纸修改完成,修改所花时间为:" + seconds.ToString()); MessageBox.Show(showInfo); }
private bool InternReadBlockRecord(double vdblDefOwnerID, ref int rlngIdx, ref AcadBlocks robjAcadBlocks, ref string nrstrErrMsg) { nrstrErrMsg = null; Dictionary <object, object> dobjDictReactors2 = new Dictionary <object, object>(); Dictionary <object, object> dobjDictXDictionary2 = new Dictionary <object, object>(); Dictionary <object, object> dobjDictPreviewIcon2 = new Dictionary <object, object>(); Dictionary <object, object> dobjDictBlkrefs2 = new Dictionary <object, object>(); int dlngStartIdx = rlngIdx; checked { double ddblObjectID = default(double); double ddblOwnerID = default(double); bool InternReadBlockRecord = default(bool); AcadBlock dobjAcadBlock2; if (hwpDxf_ReadRef.BkDXFReadRef_AcadSymbolTableRecord(mobjAcadDatabase, vdblDefOwnerID, "BLOCK_RECORD", mobjDictReadCodes, mobjDictReadValues, ref rlngIdx, ref ddblObjectID, ref ddblOwnerID, ref dobjDictReactors2, ref dobjDictXDictionary2, ref nrstrErrMsg)) { bool dblnError; if (Operators.ConditionalCompareObjectNotEqual(mobjDictReadCodes[rlngIdx], 100, TextCompare: false)) { nrstrErrMsg = "Ungültiger Gruppencode für Objektname in Zeile " + Conversions.ToString(rlngIdx * 2 + 1) + "."; dblnError = true; } else if (Operators.ConditionalCompareObjectNotEqual(mobjDictReadValues[rlngIdx], "AcDbBlockTableRecord", TextCompare: false)) { nrstrErrMsg = "Ungültiger Objektname in Zeile " + Conversions.ToString(rlngIdx * 2 + 2) + "."; dblnError = true; } else if (Operators.ConditionalCompareObjectNotEqual(mobjDictReadCodes[rlngIdx + 1], 2, TextCompare: false)) { nrstrErrMsg = "Ungültiger Gruppencode für Blockname in Zeile " + Conversions.ToString(rlngIdx * 2 + 3) + "."; dblnError = true; } else if (Operators.ConditionalCompareObjectNotEqual(mobjDictReadCodes[rlngIdx + 2], 340, TextCompare: false)) { nrstrErrMsg = "Ungültiger Gruppencode für Zeiger auf Layout-Objekt in Zeile " + Conversions.ToString(rlngIdx * 2 + 5) + "."; dblnError = true; } else { string dstrName = Conversions.ToString(mobjDictReadValues[rlngIdx + 1]); double ddblLayoutObjectID = Conversions.ToDouble(mobjDictReadValues[rlngIdx + 2]); rlngIdx += 3; hwpDxf_ReadBas.BkDXFReadBas_PreviewIcon(ref rlngIdx, mobjDictReadCodes, mobjDictReadValues, ref dobjDictPreviewIcon2); dblnError = !hwpDxf_ReadBas.BkDXFReadBas_Blkrefs(ref rlngIdx, mobjDictReadCodes, mobjDictReadValues, ref dobjDictBlkrefs2, ref nrstrErrMsg); if (!dblnError) { object dvarXDataType = default(object); object dvarXDataValue = default(object); dblnError = !hwpDxf_ReadBas.BkDXFReadBas_XData(ref rlngIdx, mobjDictReadCodes, mobjDictReadValues, ref dvarXDataType, ref dvarXDataValue, ref nrstrErrMsg); if (!dblnError) { if (robjAcadBlocks.FriendNameExist(dstrName)) { nrstrErrMsg = "Blockdefinition " + dstrName + " ab Zeile " + Conversions.ToString(dlngStartIdx * 2 + 1) + " existiert bereits."; dblnError = true; } else { dobjAcadBlock2 = robjAcadBlocks.FriendAddAcadObject(ref nrstrErrMsg, dstrName, ddblObjectID); if (dobjAcadBlock2 == null) { nrstrErrMsg = "Das Objekt konnte nicht hinzugefügt werden."; dblnError = true; } else { AcadBlock acadBlock = dobjAcadBlock2; acadBlock.FriendLetLayoutObjectID = ddblLayoutObjectID; acadBlock.FriendSetDictReactors = dobjDictReactors2; acadBlock.FriendSetDictXDictionary = dobjDictXDictionary2; acadBlock.FriendSetDictPreviewIcon = dobjDictPreviewIcon2; acadBlock.FriendSetDictBlkrefs = dobjDictBlkrefs2; acadBlock.SetXData(RuntimeHelpers.GetObjectValue(dvarXDataType), RuntimeHelpers.GetObjectValue(dvarXDataValue)); acadBlock = null; } } } } } InternReadBlockRecord = !dblnError; } dobjDictBlkrefs2 = null; dobjDictPreviewIcon2 = null; dobjDictXDictionary2 = null; dobjDictReactors2 = null; dobjAcadBlock2 = null; return(InternReadBlockRecord); } }