Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  externe Referenz direkt bearbeiten

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
  
PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
Autor Thema:  externe Referenz direkt bearbeiten (183 / mal gelesen)
Speedy1977
Mitglied
Planer Energieversorgung

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

Beiträge: 7
Registriert: 27.09.2024

AUTOCAD, aktuelle Version, MEP MAP klassisch, notepad++

erstellt am: 27. Sep. 2024 10:46    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,

ich versuche krampfhaft Eigenschaftsdaten aus einer externen Referenz zu ermitteln. Da ich im AutoCAD MAP 2024 arbeite handelt es sich speziel um GIS-Daten.

Das AUslesen der Daten würde ich hinbekommen oder besser habe ich schon. Aber dafür muss ich die externe Referenz in die Zeichnung kopieren, was ich nicht möchte. Die Infodatei wird von einer anderen Stelle immer aktualisiert und ich kann beim öffnen meiner Zeichnung immer auf die aktuellen Daten zugreifen. Nun mein Problem.
Da ich ca. 150 Objekte in meiner originalen Zeichnung beschriften muss (immer mit aktuellen Werten), nun der Weg über lisp.
Für mich ist nur die Frage wie ich die externe Referenz zum Bearbeiten lade, damit ich die ganzen Eigenschaften auslesen kann,...

Ich versuche mit

Code:

(setq myss (ssget "X"))
...
(setq xref (ssname myss i)
...
(command "_.refedit" xref)

auf die Referenz zuzugreifen, wobei ich alle INSERT's durchsuche, um die richtige X-Ref zu finden.

Code:

(command "_.select" xref)

Markiert mir auch die richtige Referenz nur wie übergebe ich diese?   

geht ja mit Rechtsklick und "externe Referenz direkt bearbeiten" auch...   

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

Grebe
Mitglied



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

Beiträge: 537
Registriert: 16.12.2002

erstellt am: 27. Sep. 2024 11:06    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 Speedy1977 10 Unities + Antwort hilfreich

Hilft das ?
(defun C:XOpen ( / selset n)
(if (not (setq selset (ssget "I" '((0 . "INSERT"))))) (progn
(princ "\nXref auswählen, die geöffnet werden soll : ")
(setq selset (ssget ":S" '((0 . "INSERT"))))
))
(if selset (progn
(setq n 0)
(repeat (sslength selset)
(if (eq 4 (logand 4 (cdr (assoc 70 (tblsearch "BLOCK" (cdr (assoc 2 (entget (ssname selset n)))))))))
(command "_open" (GetXrefPath (ssname selset n)))
(princ (strcat "\nKein Xref: " (cdr (assoc 2 (entget (ssname selset n))))))
)
(setq n (+ 1 n))
)
)
(princ "\nKein XRef gewählt !")
)
(princ)
)

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

cadffm
Moderator
良い精神




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

Beiträge: 22291
Registriert: 03.06.2002

Alles

erstellt am: 27. Sep. 2024 11:30    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 Speedy1977 10 Unities + Antwort hilfreich

Hi,

bis jemand mit Ahnung kommt: Wie liest du die Daten denn aus?
Mit der Antwort würde ich erkennen ob es überhaupt nötig ist irgendeine externe Datei zu öffnen.

Zudem gib es mehrere Möglichkeiten an Daten von anderen Dateien zu gelangen, aber nicht mit jeder Möglichkeit
kann alles umgesetzt werden, also auch hier ist zu prüfen ob man das auf dem Weg X Y oder Z überhaupt machen kann.
(BTW: Herzlich Willkommen)

Zeig doch mal her wie du es aktuell machst, wenn du die Daten der Xref in deine Datei kopiert hast/hattest.

Im Allgemeinen 3-4 Wege
a) Objektdaten -> können direkt ausgelesen werden, kein Import oder Öffnen nötig.
b) Not quick but dirty, Kopieren/einfügen, auslesen und die letzten Schritte Rückgängig machen bzw. Objekte Löschen.
c) Ganz elegant mit der AutoCAD internen Methode Daten aus anderen Dateien auslesen
d) Datei im Hintergrund "richtig" öffnen und auslesen

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

Speedy1977
Mitglied
Planer Energieversorgung

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

Beiträge: 7
Registriert: 27.09.2024

AUTOCAD, aktuelle Version, MEP MAP klassisch, notepad++

erstellt am: 27. Sep. 2024 12: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

Danke erst einmal für die schnelle Antwort... dafür schon einmal Daume hoch

Den gesamten Code zum Daten-Auslesen wäre hier etwas zu viel:

Es sind 3 .lsp Dateien, 1. Datei 200 Zeilen, 2. Datei 60 Zeilen, 3. Datei in Bearbeitung siehe unten
und es stehen zu viel Daten drin, die ich ungeändert nicht posten sollte.

Soviel zum finden der Daten (nur Code-Teile):

Das ist meine Hauptfunktion:

Code:

(defun c:getpofobjectandwritein ()
  (setq obj (entsel "Wähle ein Objekt: ")) ;(siehe 1.)
  (if obj
    (progn
      (setq zeropkt (list 0 0))
      (setq objType (cdr (assoc 0 (entget (car obj)))))
      (if (= objType "LWPOLYLINE")
        (progn
          (LayerAnlegen "zzz_temp_fpw")
          (command "_offset" "L" "A" "0.5" (car obj) zeropkt "") ;(siehe 2.)
          (todoliste (entlast)) ;(siehe 3.)
          (LayerLoeschen "zzz_temp_fpw")
          (print "Alle Aufgaben erledigt...")
          (princ "\n")
        )
      )
    )
    (princ "\nKeine Auswahl getroffen.")
  )
  (c:getpofobjectandwritein)
)

Zur Erklärung:
1. ich wähle eine LWPOLYLINE (diese wäre in der externen Referenz) --> möchte ich über eine Positionsbestimmung ermitteln
2. Hier erstelle ich eine Region um die geschlossene Polyline damit ich die Punkte mit den Information auch definitiv erwische
3. Hier gehts dann zur Sache... mit der übergebenen LWPOLYLINE aus (command "_offset" ...)

Soviel zum Code in "todoliste"

Code:

(setq myPkt (SelectObjectsInRegion mlo 1)) ;hier hole ich mir mit der funktion ein Selectionset (Points)

(if myPkt
  (progn
    (setq fwP (FGPandGP myPkt))
  )
  (progn
    (print "KGP")
    (setq fwP nil)
  )
)

(if fwP
  (progn
    (print "GfF-Berechnung...")
    (setq myFWHAP (SelectObjectsInRegion mlo 2)) ;;--> Siehe unten
    (if myFWHAP
      (createObjDataBlock fwP myFWHAP)
      (print "Kein FH gefunden...")
    )
  )
)


Code:

(defun SelectObjectsInRegion (myregion SetNr)
  (if myregion
    (progn
      (setq points2d (GetPolylinePoints myregion))
      (if (= SetNr 1)
        (setq selectionSet
  (ssget "_WP" points2d
    '((0 . "POINT")
      (8 . "GHZ"))))
      )
      (if (= SetNr 2)
        (setq selectionSet
  (ssget "_CP" points2d
            '((0 . "LWPOLYLINE")
              (8 . "F_0090"))))
      )
    )
  )
  selectionSet
)


Die in "selectionSet" zurückgegebenen Punkte enthalten die Informationen
Zu der funktion (createObjDataBlock fwP myFWHAP) --> hier werden die Punkte mit Daten durchlaufen und ein Block mit den Werten erzeugt. Der Block wird an einer Bestimten Stelle in der Zeichnung auf einen bestimmten Layer eingefügt. Der Teil funktioniert.

Die geschlossenen Polylines die ich mit _offset erweitere sind auf einer externen Referenz und
die Punkte mit den Daten sind auf einer externen Referenz. Das einzige was übereinstimmt sind die Koordinaten da es sich auf das Gitternetz der Erde aufbaut.

in der jetzt 3. .lsp Datei versuche ich nun den Zugriff auf die externen Referenzen zu bekommen:

Code:

(defun c:gnb ()
  (setq sss (ssget "X"))

  (defun gnbi (allss searchtype)
    (setq myss (ssadd))
    (if (or (= searchtype "") (not searchtype))
      (setq searchtype (ucase (getstring "\nWelcher Typ soll gesucht werden?:")))
    )
    (if (> (sslength allss) 0)
      (setq allsslength (sslength allss))
      (setq allsslength 0)
    )
    (if (> allsslength 0)
      (progn
        (setq i 0)
        (setq mysslength 0)
        (repeat allsslength
          (if (= searchtype (cdr (assoc 0 (entget (ssname allss i)))))
            (progn
              (ssadd (ssname allss i) myss)
              (setq mysslength (+ 1 mysslength))
            )
          )
          (setq i (+ 1 i))
        )
      )
    )

    (princ (strcat "\nEs wird nach " searchtype " gesucht. "
                  "Es gibt insgesamt " (itoa allsslength) " Objekte. "
                  "Davon sind " (itoa mysslength) " vom Typ " searchtype ".\n"))

    (if (> mysslength 0)
      (progn
        (setq i 0)
        ;(princ myss)
        (repeat mysslength
          (progn
            (princ (strcat "\nDaten des gefundenen Objekt Nr. " (itoa (+ 1 i)) ":\n"))
            (princ (strcat "\nDer Name des Objektes ist: " (cdr (assoc 2 (entget (ssname myss i))))))
            (princ "\nDie interne Objekt-ID ist: ")
            (princ (cdr (assoc -1 (entget (ssname myss i)))))
            (princ "\nDie Eigenschaften sind: \n")
            (princ (entget (ssname myss i)))
            (setq i (+ 1 i))
          )
        )
      )
    )

    (if (> mysslength 0)
      (if (member (ucase (getstring "\nSoll ein Objekt eingelesen werden ja/nein?")) '("j" "ja" "J" "JA"))
        (progn
          (setq objnr (- (getint "\nWelches Objekt (Obj-Nr.) soll ausgelesen werden:") 1))
          (setq readobj (ssname myss objnr))
          (if readobj
            (progn
              (princ (strcat "\nObjekt mit dem Namen '" (cdr (assoc 2 (entget readobj))) "' wurde gewählt...\n"))
              (command "_.-refedit" nil readobj "OK" "A" "N")
            )
            (princ "Falsche Nummer eingegeben...")
          )
          (gnbi newss "")
        )
      )
    )
  )
  (gnbi sss "INSERT")
  (princ "\nEnde...")
  (princ)
)

... So versuche ich an die Daten zu kommen... Viel Code aber   

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

Speedy1977
Mitglied
Planer Energieversorgung

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

Beiträge: 7
Registriert: 27.09.2024

AUTOCAD, aktuelle Version, MEP MAP klassisch, notepad++

erstellt am: 30. Sep. 2024 10:20    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,

viel Text und Code ich weiß, aber keiner eine Idee?

 

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

Speedy1977
Mitglied
Planer Energieversorgung

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

Beiträge: 7
Registriert: 27.09.2024

AUTOCAD, aktuelle Version, MEP MAP klassisch, notepad++

erstellt am: 30. Sep. 2024 10:40    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

Für mich stellt sich halt die Frage, warum bei

Code:

(command "_.-refedit" readobj "OK" "A" "N")

der Fehler: "Referenz nicht gefunden" kommt... Code falsch???

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

cadffm
Moderator
良い精神




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

Beiträge: 22291
Registriert: 03.06.2002

Alles

erstellt am: 30. Sep. 2024 11:07    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 Speedy1977 10 Unities + Antwort hilfreich

Der Code ist nicht zwingend falsch (prüfe es aber auch nicht), aber der Befehl erwartet nunmal keinen Objektname.
Möchte man RefEdit nutzen, so müßte man die Referenz durch eine Pickwahl angeben, also eine Koordinate übermitteln
an welcher Acad nach einem Objekt suchen soll. (Tip: Vergesse nicht die Ansciht entsprechend zu zoomen. Per Hand machst du das auch immer   )

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1991
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 30. Sep. 2024 11:25    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 Speedy1977 10 Unities + Antwort hilfreich

Schau dir doch mal die vla-copyobject Methode an. Damit kannst du dir doch alles aus der Ref holen was du verwursten willst.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

Speedy1977
Mitglied
Planer Energieversorgung

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

Beiträge: 7
Registriert: 27.09.2024

AUTOCAD, aktuelle Version, MEP MAP klassisch, notepad++

erstellt am: 30. Sep. 2024 11: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

Sorry für die blöde Rückfrage...

"vla-copyobject" gibt es bei mir nicht... und wird in der "AutoLISP: Reference" auch nicht angezeigt
muss ich da was nachinstallieren oder ist das einfach nur nicht dokumentiert?

das andere Teste ich... und melde mich wieder

Danke schon mal...

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1991
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 30. Sep. 2024 11:56    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 Speedy1977 10 Unities + Antwort hilfreich

Hier mal etwas zu der copyobjects Thema....
Code:


(defun CopyBlock (DwgName BlkName / blocks dbxDoc)
  (setq blocks
      (vla-get-blocks
        (vla-get-ActiveDocument (vlax-get-acad-object))
      )
  )
  (setq dbxDoc
      (vla-GetInterfaceObject
        (vlax-get-acad-object)
        "ObjectDBX.AxDbDocument"
      )
  )
  (vla-open dbxDoc DwgName)
  (vla-CopyObjects
      dbxDoc
      (vlax-safearray-fill
        (vlax-make-safearray
            vlax-vbObject
          '(0 . 0)
        )
        (list
            (vla-item
              (vla-get-blocks dbxDoc)
              BlkName
            )
        )
      )
      blocks
  )
  (vlax-release-object dbxDoc)
  (vla-item blocks BlkName)
)
(if(and(setq obj(car(entsel)))
      (setq datei
                      (findfile (vla-get-path
                                  (vlax-ename->vla-object  obj)
                                  )
                                )
                    )
  )
(CopyBlock datei "fenster")
)


------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

Speedy1977
Mitglied
Planer Energieversorgung

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

Beiträge: 7
Registriert: 27.09.2024

AUTOCAD, aktuelle Version, MEP MAP klassisch, notepad++

erstellt am: 30. Sep. 2024 13:30    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

So...

zu vla-objectcopy:

Hier habe ich ein problem mit dem "ObjectDBX.AxDbDocument" ... fehlende "acdb20.dll" oder ich arbeite gerade in der falschen Version von ACAD (AutoCAD MAP 2024) ...
da habe ich noch keine richtige Antwort gefunden...

Bei

Code:

(vla-GetInterfaceObject (vlax-get-acad-object) "ObjectDBX.AxDbDocument")

kommt immer einen Automatisierungsfehler...

ABER...

cadffm , du hattest die Lösung!

vielen, vielen Dank...

Meine Hochachtung Der 3D-Point bringt die Lösung   


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)2024 CAD.de | Impressum | Datenschutz