K.R

Użytkownik forum
  • Postów

    8
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez K.R

  1. Poniższy kod (działający w ACAD) powinien jako wyjście dać wielostronicowy plik PDF umieszczony w katalogu rysunku:

    using (Transaction tr = db.TransactionManager.StartTransaction())
    
            {
                DsdEntryCollection collection = new DsdEntryCollection();
    
                foreach (ObjectId layoutId in layoutList)
    
                {
                    Layout layout = tr.GetObject(layoutId, OpenMode.ForRead) as Layout;
    
                    if (!layout.LayoutName.Contains("Model") && layout.LayoutName.Contains(layoutName))
                    {
                        DsdEntry entry = new DsdEntry
                        {
                            DwgName = doc.Name,
    
                            Layout = layout.LayoutName,
    
                            Title = layout.LayoutName,
    
                            Nps = layout.PlotSettingsName,
    
                            NpsSourceDwg = doc.Name
                        };
    
                        collection.Add(entry);
                    }
                }
    
                string pdfFile = (path == "" ? dwgPath : path) + name + ".pdf";
    
                DsdData dsdData = new DsdData
                {
                    SheetType = SheetType.MultiPdf,
    
                    ProjectPath = path == "" ? dwgPath : path,
    
                    DestinationName = (path == "" ? dwgPath : path) + name + ".DWG",
    
                    IncludeLayerInfo = true,
    
                    PromptForDwfName = false
    
    
                };
    
    
                string dsdFile = dwgPath + name + ".dsd";
    
    
                if (System.IO.File.Exists(dsdFile)) System.IO.File.Delete(dsdFile);
    
    
                dsdData.SetDsdEntryCollection(collection);
    
                string str, newStr;
                string tmpFile = Path.Combine(dwgPath, "temp.dsd");
                dsdData.WriteDsd(tmpFile);
                using (StreamReader reader = new StreamReader(tmpFile))
                using (StreamWriter writer = new StreamWriter(dsdFile))
                {
                    while (!reader.EndOfStream)
                    {
                        str = reader.ReadLine();
                        if (str.Contains("Has3DDWF"))
                        {
                            newStr = "Has3DDWF=0";
                        }
                        else if (str.Contains("OriginalSheetPath"))
                        {
                            newStr = "OriginalSheetPath=" + dsdData.DestinationName;
                        }
                        else if (str.Contains("OUT"))
                        {
                            newStr = "OUT=" + dwgPath;
                        }
                        else if (str.Contains("IncludeLayer"))
                        {
                            newStr = "IncludeLayer=TRUE";
                        }
                        else if (str.Contains("PromptForDwfName"))
                        {
                            newStr = "PromptForDwfName=FALSE";
                        }
                        else if (str.Contains("LogFilePath"))
                        {
                            newStr = "LogFilePath=" + Path.Combine(dwgPath, "print.log");
                        }
                        else
                        {
                            newStr = str;
                        }
                        writer.WriteLine(newStr);
                    }
                }
                File.Delete(tmpFile);
                        
                dsdData.ReadDsd(dsdFile);
    
                if (System.IO.File.Exists(pdfFile))
                    System.IO.File.Delete(pdfFile);
    
    
                using (PlotConfig pc = PlotConfigManager.SetCurrentConfig("DWG to PDF.pc5"))
    
                {
                    
                    publisher.PublishExecute(dsdData, pc);
                }
    			tr.Commit();
    
            }

    Przygotowany plik .dsd jest poprawny.

    Wykonanie metody

    publisher.PublishExecute(dsdData, pc);

    nie powoduje nic, ani błędu, ani poprawnego działania, czyli wyświetlenia okna z postępem drukowania.

     

  2. Miałem jakiś błąd w pliku.

    RECOVER poprawił błedy i ZWCAD już wstawia bloki, ale atrybuty wieloliniowe zamienia na jednoliniowe.

    Przykład w załączonym pliku:

    Bloki MCB, MCCB i RCD_MCB - atrybut DESCRIPTION3

    Te, które są wstawione na rysunku zostały wstawione w Autocadzie LT 2010.

    ZWCad wersja "2018.03.16(29562)_x64" zamienia właściwości atrybutów.

    Autocad nie znajduje błędów w pliku, ZWCad znajduje.

    TEMPLATE2.dwg

  3. Witam,

    Mam problem ze wstawianiem bloków z wieloliniowym atrybutem w ZWCADzie 2018.

    Próba wstawienia takiego bloku kończy się dziwnym zachowaniem programu.

    Polecenie INSERT zostaje natychmiast przerwane i blok nie zostaje wstawiony.

    Identycznie sytuacja wygląda jak robię to z programu w VBA.

    Czy ktoś spotkał się z podobnym problemem i potrafi znaleźć rozwiązanie?

    Z góry dziękuję za pomoc.