vrs

Użytkownik forum
  • Postów

    11
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Odpowiedzi opublikowane przez vrs

  1. Żeby temat zamknąć:

    Plik generowany przed kod VB, poprzez metodę DxfOut również nie działa. Tak jak wyżej pisałem po wygenerowaniu tak pliku nie można go otworzyć w ZWCADzie, a dokładniej problemem jest BlockTableRocord. Nie wiedzieć czemu, plik jest nieprawidłowo eksportowany.

    jest jednak rozwiązanie problemu eksportu rysunku do pliku dxf. Działa ono tylko w VB.Net. Działający kod:

    Public Function exportDatabaseToDxf(_path As String, _document As Document) As Boolean
            Dim document As Document = _document
            Dim ss As ZcadSelectionSet = document.ZcadDocument.SelectionSets.Add("sample")
            document.ZcadDocument.Export(_path, "dxf", ss)
            document.ZcadDocument.SelectionSets.Item("sample").Delete()
            Return True
    End Function

    Problem rozwiązany.

  2. Udało się zrobić :)  Musiałem jedynie kod Vb umieścić w nowym projekcie i dodać go jako referencję do aktualnego projektu. Jednak to nie koniec problemów z exportem. Plik jest tworzony w określonej lokalizacji, nie wyskakują żadne błędy, ale nie mogę go otworzyć. Przy próbie otwarcia pokazuje się komunikat "Plik DXF jest niepoprawny lub niekompletny". Próbowałem różnych wartości w DwgVersion, ale to nic nie dało. Oczywiście jak rysunek, który eksportuję, zapiszę normalnie, przez opcję Zapisz jako, to nie mam problemów z jego otwarciem. Co ciekawe, wyeksportowany plik bez problemów otwiera się w ZWCAD 2012. Ma ktoś pomysł gdzie może leżeć przyczyna ?

  3. ehhh kolejny błąd w ZWCADzie. Niedobrze.

     

    Co do łączenia VB z C# to również nie miałem okazji ich łączyć w ramach projektu, jednak pewnie jest to możliwe i staje się kolejnym wyzwaniem przedemną :) Tak więc biorę się do roboty.

     

    Dzięki wielkie za pomoc. Przedemną jeszcze wiele wyzwań jeśli chodzi o ZWCADa i C#, więc jeszcze nie raz będę pisał i pytał. Dobrze, że mam kogo pytać :) Jeszcze raz dzięki :good:

  4. Problem stanowi trzeci parametr metody dxfOut, czyli wersja pliku, w jakiej ma być on zapisany. W pryzpadku metody saveAs wersja pliku określana jest klasą DwgVersion, a w dxfOut jest to klasa ZcDb.ZcDbDwgVersion, czyli coś innego. Problem z tym, że ja nie mam w projecie przestrzeni nazw ZcDb. Możliwe, że brakuje mi jakiejś referencji, jednak nie mam pomysłu jakiej. W referencjach mam następujące biblioteki: ZwDatabaseMgd.dll, ZWCAD.exe, ZwManaged.dll.

  5. Metoda saveAs działa, ale zapisuje w formacie dwg, a ja potrzebuję koniecznie pliku dxf, ponieważ trafia on później do innego programu, który wymaga pliku dxf. Chyba, że jest możliwość użycia tej metody do zapisu w formacie dxf.

     

    W przypadku dxfOut podkreśla całą linię.

  6. Potrzebuję zapisać / wyeksportować rysunek do formatu dxf. 

    Wiem, że jest metoda DxfOut z poziomu Database, ale jak bym nie podał jej argumentów, to VS ciągle podkreśla mi kod, mówiąc, że metoda ma nieprawidłowe argumenty. 

    database.DxfOut(_sciezka, 16, DwgVersion.AC1021, false);

    Oczywiście _sciezka to zwykły string. Najprawdopodobniej przyczyną jest określenie wersji pliku. Próbowałem z różnymi wersjami dwg, ale to nic nie dało.

  7. Poniżej kod dla AAutoCad, na podstawie którego ja próbuję to samo zrobić w ZwCad.

    using Autodesk.AutoCAD.ApplicationServices;
    using Autodesk.AutoCAD.DatabaseServices;
    using Autodesk.AutoCAD.Runtime;
    using Autodesk.AutoCAD.EditorInput;
    using Autodesk.AutoCAD.Geometry;
    
    public class PointMonitorTooltips
    {
      [CommandMethod("SM")]
      public static void StartMonitor()
      {
        Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
        ed.PointMonitor += new PointMonitorEventHandler(ed_PointMonitor);
      }
    
      [CommandMethod("XM")]
      public static void StopMonitor()
      {
        Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
        ed.TurnForcedPickOn();
        ed.PointMonitor -= new PointMonitorEventHandler(ed_PointMonitor);
      }
    
      static void ed_PointMonitor(object sender, PointMonitorEventArgs e)
      {
        Editor ed = (Editor)sender;
        Document doc = ed.Document;
        try
        {
          FullSubentityPath[] paths = e.Context.GetPickedEntities();
          // Go through the results of the selection
          // and detect the curves
          string curveInfo = "";
          Transaction tr = doc.TransactionManager.StartTransaction();
          using (tr)
          {
            // Open each object, one by one
            foreach (FullSubentityPath path in paths)
            {
              ObjectId[] ids = path.GetObjectIds();
              if (ids.Length > 0)
              {
                ObjectId id = ids[ids.GetUpperBound(0)];
                DBObject obj = tr.GetObject(id, OpenMode.ForRead);
                if (obj != null)
                {
                  // If it's a curve, get its length
                  Curve cv = obj as Curve;
                  if (cv != null)
                  {
                    double length = cv.GetDistanceAtParameter(cv.EndParam) - cv.GetDistanceAtParameter(cv.StartParam);
                    // Then add a message including the object
                    // type and its length
                    curveInfo += obj.GetType().Name + "'s length: " + string.Format("{0:F}", length) + "\n";
                  }
                }
              }
            }
            // Cheaper than aborting
    
            tr.Commit();
          }
          // Add the tooltip of the lengths of the curves detected
          if (curveInfo != "")
            e.AppendToolTipText(curveInfo);
        }
        catch
        {
          // Not sure what we might get here, but not real action
          // needed (worth adding an Exception parameter and a
          // breakpoint, in case things need investigating).
        }
      }
    }
  8. Witam,

    Od jakiegoś czasu tworzę własną bibliotekę dll do ZwCada w C#. Potrzebuję mieć możliwość po najechaniu kursorem myszki na obiekt (linia, blok itp.) wyświetlenia, w okienku na palecie, informacji o obiekcie znajdującym się pod kursorem. Wiem, że jest coś takiego jak Point Manager, jednak to nie działa. Może coś robię źle, ponieważ bazuję na informacji jak go wykorzystać w AutoCad a nie ZwCad. Dotychczas nie miałem problemów z przenoszeniem kodu z AutoCad do ZwCad, wszystko zawsze działało. Oczywiście w Google szukałem, jednak nie mogę nic znaleźć.

     

    Point Monitor dodaję w następujący sposób:

    editor.PointMonitor += new PointMonitorEventHandler(pointMonitor);
    private void pointMonitor(object sender, PointMonitorEventArgs e)
    {
       // mój kod
    }

    Niestety nie ma żadnej reakcji.

     

    Pracuję na:

    Visual Studio Community 2013 Update 4

    W projekcie ustawiony .NET Framework 4.5

    ZwCad+ 2015