Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  CADconv DXFKONV
  DXF manipulieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  DXF manipulieren (2406 mal gelesen)
bronstein
Mitglied


Sehen Sie sich das Profil von bronstein an!   Senden Sie eine Private Message an bronstein  Schreiben Sie einen Gästebucheintrag für bronstein

Beiträge: 1
Registriert: 05.03.2010

erstellt am: 05. Mrz. 2010 06:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


orginal.txt

 
Hallo,
ich habe eine DXF-Zeichnung im AutoCAD Format AC1014 und möchte diese mit Hilfe von einem selbst geschriebenen Programm manipulieren, sprich einzelne Bauteile herrauslöschen, in dem ich den Positionsbezeichner angebe.

Ich habe mal in Delphi eine kleiner Funktion geschrieben, die auch teilweise funktioniert.

Das Bauteile BR500, kann man damit löschen (links unten)
Beim Bauteil X28 funktioniert das aber nicht (in der Mitte)

So sieht meine Funktion aus:
function LoescheBT(Bauteil: String; DXF: TStringList):Boolean;
var
  check: Boolean;
  t, y, status: Integer;
begin
  check := false;
  t := 0;
  while check = false do
  begin
    if Bauteil = DXF[t] then
    begin
      //AcDbEntintiy
      while t > 0 do
      begin
        if DXF[t] = 'AcDbEntity' then
        begin
          dec(t);
          break;
        end;
        dec(t);
      end;
      y := t;
      status := 0;
      while t < DXF.Count-1 do
      begin
        if (DXF[t+6] = 'AcDbText') and (status = 2) then
        begin
          check := true;
          break;
        end;
        if (DXF[t] = 'AcDbText') then
          inc(status);
        Form1.Memo2.Lines.Add(DXF[t]);
        DXF.Delete(t);
        //inc(t);
      end;
    end;
    inc(t);
    if t > DXF.Count-1 then
      break;
  end;
  result := check;
end;

Kurze Erklärung der Funktion.
Die Funktion geht das DXF-File Zeile für Zeile durch (nach unten), bis es auf das angegebene Bauteil kommt (BR500). Danach geht sie wieder solange nach oben, bis sie auf "AcDbEntity" stößt. Jetzt werden die Zeilen nach unten gelöscht, bis zweimal AcDbText gekommen ist und bis die aktuelle Zeile plus 6 Zeilen weiter kein AcDbText kommt.

Im Anhang habe ich mal die Zeichnung von der ich spreche

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz