Example #1
0
 /// <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 = "";
             }
         }
     }
 }
Example #2
0
 internal void FriendQuit()
 {
     if (mblnOpened)
     {
         mobjDictReadCodes  = null;
         mobjDictReadValues = null;
         mobjAcadBlocks     = null;
         mobjAcadDatabase   = null;
         mblnOpened         = false;
     }
 }
Example #3
0
        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);
        }
Example #4
0
 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);
     }
 }
Example #5
0
 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");
 }
Example #6
0
        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();
            }
        }
Example #7
0
 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");
     }
 }
Example #8
0
 /// <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 = "";
             }
         }
     }
 }
Example #9
0
        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);
        }
Example #10
0
        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);
            }
        }