Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Objektdaten / Kreis zu Poly

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Objektdaten / Kreis zu Poly (1779 mal gelesen)
Gerd_Ecke
Mitglied
Bergbauingenieur


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

Beiträge: 141
Registriert: 28.08.2002

Civil 3D 2020, GeoCAD
BricsCAD 18

erstellt am: 05. Mai. 2006 13:52    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

Hallo Mitstreiter,

habe folgendes Problem :
ca 200 Kreise in Acadmap2004 mit zugeordneten Objektdaten

Ich brauche aber an diesen Objektdaten Polylinien.
Aus dem Kreisangaben eine Polylinie zu machen ist nun kein Problem,
wie bekomme ich aber in lisp die Objektdatenzuordnung hin ?

MfG
Gerd

------------------
ACAD 2000, Map 2006, GeoCAD
wenig LTplus pur (ICAD)
alles unter w2k

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 05. Mai. 2006 14:08    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 Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

was sind das für Daten ? Bsp? Xdatas? oder die Handles ?

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 05. Mai. 2006 14:11    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 Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

@cadmium

Beim Map gibt es extra Objektdaten, die (meiner Meinung nach) recht komisch in der Zeichnung gespeichert sind.

@Gerd, ich hatte da schon mal etwas gemacht .. ich schaue mal am Wochenende nach.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 05. Mai. 2006 14:47    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 Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

Kein Problen!
Der Befehl MAPCLEAN kann auch Kreise in Polylinien umwandeln, dabei bleiben alle Objektdaten erhalten. Bereinigungsvorgänge müssen keine gewählt werden, nur bei Bereinigungsmethode "Kreis in Polylinie" ankreuzen.

------------------
Mit freundlichem Gruß

Udo Hübner

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 05. Mai. 2006 20:47    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 Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Brischke:
...die (meiner Meinung nach) recht komisch in der Zeichnung gespeichert sind...

Sind sie meiner Meinung nicht.
Ich finde die sind sehr gut in der Zeichnung gespeichert.
Um da mit Lisp ranzukommen gibt es eine exzellente Lisp-Api nur für Objektdaten bzw. Map-Funktionen.

Will man anders an die Dinger ran wirds aber schwieriger weil die Einbindung über eine recht komplexe Dictionary Struktur geregelt ist.
Außerdem werden Datenfelder als Hex-Code gespeichert.

Aber für Dein spezielles Problem reicht ja bereits der Tip vom Kollegen Hübner...

------------------
Ciao,
Marc

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

Gerd_Ecke
Mitglied
Bergbauingenieur


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

Beiträge: 141
Registriert: 28.08.2002

Civil 3D 2020, GeoCAD
BricsCAD 18

erstellt am: 09. Mai. 2006 13:31    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

Hallo,

@CADmium : sind mehrere Textfelder an die man über <map> <objektdaten> kommt.

@CADHuebner : mit mapclean werden aus den Kreisen geschlossene Polylinien mit 2 Punkten die dann in der Nachfolgeapplikation aber als Linie kommen

Ich würde jetzt aus den Angaben des Kreises ein 64-eck nachzeichnen und dann diese Objektdaten übertragen wollen.

MfG
Gerd

------------------
ACAD 2000, Map 2006, GeoCAD
wenig LTplus pur (ICAD)
alles unter w2k

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 09. Mai. 2006 18:18    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 Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

Hi Gerd,
na ja "Textfelder" ist schon ein wenig untertrieben.
Nicht nur das "Textfelder" sprachlich eher schon anders belegt sind (die "Felder" in Textobjekten von AutoCAD, manchmal leider als "Schriftfelder" bezeichnet) handelt es sich hier doch eher um Strukturen die in Richtung von Datenbankfunktionen gehen, also Datenfelder und Records.

Zu Deinem Cleaning-Resultat kann ich nur sagen das das Ergebnis der Polylinienbereinigung ganz stark von den Einstellungen der Bereinigungsfunktion abhängt.
Das geht von Zwei-Bogen Polylinien bis zu Mikroschnipseln:

Es kann aber auch sein, dass Map2004 noch nicht so viele Möglichkeiten zur Polylinienbereinigung hat wie das von mir eingesetzte 2005, ich weiß es schlichtweg nicht mehr genau.

Solltest Du vorhaben die Objektdaten via Lisp zu übertragen ist das kein Problem. Es gibt eine super Lisp Api für Map-Funktionen.
Aber der Teufel steckt im Detail. Wenn Du wirklich jede Eventualität der Objektdaten berücksichtigen willst (und dazu kann ich nur dringend raten) mußt Du schon einige Dinge berücksichtigen.
Nachfolgend mal ein Auszug aus meiner Objektdaten-Lisp-Bibliothek.
Das eigentliche lesen/schreiben der Objektdaten übernehmen integrierte Funktionen der Lisp-Api. Aber es bleiben ein Haufen Dinge zu bedenken. Mein Auszug gibt Dir vielleicht schon mal einen Vorgeschmack auf das was da so kommen würde...

Code:

;|
Zentrale Funktion zum Anhängen / Ändern von Objektdaten !!
Funktion setzt die Objektdaten für ein Objekt gemäß der als Liste übergebenen Daten.
Die Datenliste wird auf Gültigkeit der Datentypen bzw. Tabellendefinitionen überprüft
und ggf. um ungültige Werte erleichtert -> "DT:MAP-OD-SUB-PURGEDATA".
Es werden folgende Operationen vorgenommen:
# Daten anhängen, wenn NICHT bereits angehängt.
# Records gemäß der übergebenen Liste manipulieren, wenn Daten bereits angehängt.
  DAS aber in aller Konsequenz, enthält ein Objekt z.B. 10 Records die Liste aber nur 2
  Records, werden die letzten acht Records gelöscht!!!
  Umgekehrt natürlich genauso. Gibt es 2 Records und die Liste enthält aber 10,
  werden daraus 10 Records.
  Die REIHENFOLGE der Listeneinträge für die Records ist die gleiche wie die
  der Records -> nth 0 ist auch RECNUM 0.
  Dadurch läßt sich z.B. die Reihenfolge der Records relativ einfach umkehren.
  Daten auslesen, Recordlist umkehren und mit dieser Funktion updaten.

# Was für die RECORDS gilt, gilt NICHT für die Tabellen. Enthält die übergebene
  Liste eine bestimmte Tabelle NICHT die aber mit dem Objekt verbunden ist,
  wird diese Tabellenbindung NICHT berührt, d.h. sie bleibt in jedem Fall bestehen.
  Zum LÖSCHEN von Tabellenbindungen gibt es eine extra Funktion.

Argumente:
ENAME = Lisp-Objectname
LSTDATA = Liste mit den anzuhängenden Daten
  Das Listenformat orientiert sich an dem der von Funktion
  "DT:MAP-OD-READ2" zurückgegebenem jedoch ohne die SubListe
  '(INT-RECNUM . REAL-RECID)
  Die RecordNumber geht aus der Position der Sublisten hervor
  (nth 0 lst)...

DELETESURPLUSTABLES = 'T wenn Tabellenbeziehungen die FÜR EIN OBJEKT BESTEHEN in der
  LISTE ABER NICHT VORKOMMEN ! GELÖSCHT ! werden sollen.

  nil wenn überzählige ignoriert werden sollen.

DELETESURPLUSFIELDS = 'T wenn überzählige Records gelöscht werden sollen

  nil wenn überzählige Records ignoriert werden sollen


Beispielanwendung:
Klonen von Objektdaten
(DT:MAP-OD-UPDATE-RECORDS
  (car (entsel "\nZielobjekt für OData wählen: "))
  (DT:MAP-OD-SUB-LISTCONVERT
    (DT:MAP-OD-READ2 (car (entsel "\nQuell-Objekt MIT OData wählen: ")))
  )
  'T ;_ Lösche überzählige Tabellen
  'T ;_ Lösche überzählige Records
)

Aktualisieren des ersten Records einer Tabelle, andere Tabellen ignorieren:
(DT:MAP-OD-UPDATE-RECORDS
  (car (entsel "\nZielobjekt für OData wählen: "))
  '(("ASSETNETZKLASSE" ((("BITCODENETZKLASSE" . 10)))))
  nil ;_ ignoriere andere Tabellen
  'T ;_ lösche überzählige Records
)

Oder auch zum Anhängen / Updaten des 0-ten Records:
(DT:MAP-OD-UPDATE-RECORDS
  (car (entsel "\nZielobjekt für OData wählen: "))
  (DT:MAP-OD-SUB-CONTRUCT-ODLIST "ASSETNETZKLASSE" "BITCODENETZKLASSE" 100)
  nil
  nil
)

|;
(defun DT:MAP-OD-UPDATE-RECORDS
                                (ENAME          LSTDATA
                                DELETESURPLUSTABLES
                                DELETESURPLUSFIELDS
                                /              FIELDVALUES
                                OBJDATA        RECDIFFERENCE
                                RECNUM          SUBOBJDATA
                                TABLENAME      TMP
                                )
  ;; Erstmal die Datenliste auf Richtigkeit prüfen.
  ;; Wenn da nix bei raus kommt, muß gar nix mehr gemacht werden.
  (if (setq LSTDATA (DT:MAP-OD-SUB-PURGEDATA LSTDATA))
    ;; Test und evtl. auslesen vorhandener Daten des zu manipulieren Objekts=
    ;; Enthält das zu manipulierende Objekt bereits OData?
    (if (setq OBJDATA (DT:MAP-OD-READ2 ENAME))
      ;; Ja? Dann...
      (progn
        ;; Handling für das eventuelle Löschen von überschüssigen Tabellen
        ;; abhängig von zweierlei:
        ;; 1. Ist das Flag überhaupt gesetzt?
        ;; 2. enthält das Objekt überhaupt solche Tabellen?
        (if DELETESURPLUSTABLES
          (progn
            ;; Liste der Tabellennamen die zu setzen sind
            (setq TMP (mapcar '(lambda (X) (strcase (car X))) LSTDATA))
            ;; Liste der Tabellennamen, die übschüssig sind
            (if (setq TMP (vl-remove-if
                            '(lambda (X) (member X TMP))
                            (mapcar '(lambda (Y) (strcase (car Y))) OBJDATA)
                          )
                )
              (progn
                ;; Löse die Records und damit die Tabelle von dem Objekt
                (foreach ELEM TMP
                  (DT:MAP-OD-DETACHALLRECORDS-FOR ENAME ELEM)
                )
                ;; ...und lies dann die Daten noch einmal neu ein
                (setq OBJDATA (DT:MAP-OD-READ2 ENAME))
              )
            )
          )
        )
        ;; Für jede Tabelle der Argumentliste...
        (foreach TABLE LSTDATA
          (setq TABLENAME (car TABLE))
          ;; Enthält das zu manipulierende Objekt OData dieser Tabelle?
          (if (setq SUBOBJDATA (MS-ASSOC TABLENAME OBJDATA))
            (progn
              ;; Nur die RECID extrahieren
              (setq SUBOBJDATA    (mapcar 'cdar (cadr SUBOBJDATA))
                    RECDIFFERENCE (- (length (cadr TABLE)) (length SUBOBJDATA))
              )
              (cond
                ;; ((zerop RECDIFFERENCE) 'NIX)
                ;; Negativ = mehr Records vorhanden als gesetzt werden sollen
                ((< RECDIFFERENCE 0)
                ;; Wenn Deleteflag gesetzt, dann löschen überzähliger Records
                (if DELETESURPLUSFIELDS
                  (progn
                    (setq RECDIFFERENCE (abs RECDIFFERENCE))
                    (repeat RECDIFFERENCE
                      ;; Löschen der überzähligen Records von hinten nach vorn
                      (ade_oddelrecord ENAME TABLENAME RECDIFFERENCE)
                      (setq RECDIFFERENCE (1- RECDIFFERENCE))
                    )
                  )
                )
                )
                ;; Positiv = Es müssen noch Records erzeugt werden
                ((> RECDIFFERENCE 0)
                (setq TMP NIL)
                (repeat RECDIFFERENCE
                  ;; Erstellt wird 'ne TempListe der neuen RecID's
                  (setq
                    TMP (cons (DT:MAP-OD-SUB-NEWSINGLERECORD ENAME TABLENAME)
                              TMP
                        )
                  )
                )
                (setq SUBOBJDATA (append SUBOBJDATA (reverse TMP)))
                )
                ('t NIL) ;_ Mach nix
              )
              ;; Jetzt ist die Anzahl der Records auf jeden Fall >= der Anzahl
              ;; der zu setzenden Werte
              (setq FIELDVALUES
                    (cadr TABLE)
                    RECNUM 0
              )
              (foreach RECORD FIELDVALUES
                (foreach FIELD RECORD
                  (ade_odsetfield
                    ENAME
                    TABLENAME
                    (car FIELD)
                    RECNUM
                    (cdr FIELD)
                  )
                )
                (setq RECNUM (1+ RECNUM))
              )
            )
            ;; Keine Daten für Tabelle vorhanden, also frei weg dranlatschen!
            (DT:MAP-OD-SUB-NEWRECORDS ENAME (list TABLE))
          )
        )
      )
      ;; Hängen keine Daten dran, also los alles ranklatschen
      (DT:MAP-OD-SUB-NEWRECORDS ENAME LSTDATA)
    )
  )
)


...

------------------
Ciao,
Marc

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

Gerd_Ecke
Mitglied
Bergbauingenieur


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

Beiträge: 141
Registriert: 28.08.2002

Civil 3D 2020, GeoCAD
BricsCAD 18

erstellt am: 10. Mai. 2006 07:42    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


map1.jpg

 
Danke Marc,

da dies eine einmalige Aktion und ich erst beginne mit LISP zu arbeiten (nebenbei 1/2 Jahr) werde ich das erst später mal in Angriff nehmen.
In der Version ACADMap2004 gibt es den letzten Punkt noch nicht.
siehe Bild.
Habe mich bei nem Kollegen mit map2006 an den Rechner gesetzt und nach Probieren sind meine Kreise jetzt Polylinien.
Ich bedanke mich für Deine Mühe.

Mit freundlichen Grüßen
Gerd Ecke

------------------
ACAD 2000, Map 2006, GeoCAD
wenig LTplus pur (ICAD)
alles unter w2k

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