Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Zugriff auf Text innerhalb von Blöcken

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:  Zugriff auf Text innerhalb von Blöcken (2021 mal gelesen)
-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 07. Dez. 2016 21:48    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,

ich komme hier nicht weiter bzw. steh auf dem Schlauch.
Ich möchte alle Texte einer DWG in eine XML Schreiben mit Objekt_id um beim Import wieder die Texte dem jeweiligem Objekt zu zuweisen.

Also mit Textobjekten hab ich es schon hinbekommen, nur mit den Text in Blöcken weiß ich nicht, wie ich das machen soll.
Vielleicht weiß jemand den richtigen bzw. einen anderen Weg um eine XML für ein Übersetzungsbüro zu erstellen und dann
diese je nach Wunsch nach der Sprache in die DWG zu laden.

Code:

(vl-load-com)

(defun textauslesen_XML ( _O )
       (setq TXTLIST nil
TEXT nil )
(setq TXTLIST(mapcar 'cdr (vl-remove-if-not'(lambda(X) (member (car X) '( 1 3))) _O )))
(setq TEXT (apply 'strcat TXTLIST))
)
 
(defun c:Textexport_XML ( /  AUSWAHL excelFILE FILE INDEX Inhalt)
(if (and (setq FILE (getfiled "TEXT-Export" "" "XML" 1 ))
(setq excelFILE (strcat "\"" FILE "\"" ))    
(setq AUSWAHL (ssget '((0 . "*TEXT,*LEADER" )))) ;(ssget "_x" '((0 . "*TEXT"))))
)                 
(progn
(setq INDEX -1)
(repeat (sslength AUSWAHL )
(setq _O (entget (ssname AUSWAHL (setq INDEX (1+ INDEX )))))
;Text auslesen
(setq TEXT nil)
(setq TEXT (textauslesen_XML _O))
;Text auslesen ende
(setq _ID (cdr (assoc 5 _O ))); ID auslesen
;text
(if (= Inhalt nil )
(setq Inhalt (strcat "<ROW>\n<OBJECT_ID>"_ID "</OBJECT_ID>\n<TEXT>" TEXT "</TEXT>\n</ROW>\n" ))
(setq Inhalt (strcat Inhalt "<ROW>\n<OBJECT_ID>"_ID "</OBJECT_ID>\n<TEXT>" TEXT "</TEXT>\n</ROW>\n" ))
)
)
(setq Inhalt (strcat "<?xml version='1.0' encoding = 'UTF-8' ?>\n<DATA>\n" Inhalt "</DATA>" ))
(vk_WriteTextStream_XML Inhalt FILE "UTF-8" )
)

(command "shell" excelFILE ) 
)

(defun c:Textimport_XML ( / AUSWAHL FILE INDEX)
(if (and (setq FILE (getfiled "TEXT-Import" (getvar "dwgprefix") "XML" 8 ))
(setq Inhalt (vk_ReadTextStream_XML FILE "UTF-8" ))
)
(progn
(setq AUSWAHL (ssget "_X" '((0 . "*TEXT,*LEADER" ))))
(setq INDEX -1)
(repeat (sslength AUSWAHL )
(setq _O (entget (ssname AUSWAHL (setq INDEX (1+ INDEX )))))
(setq OBJ (vlax-ename->vla-object (ssname AUSWAHL INDEX )))
(setq _ID (cdr (assoc 5 _O )))
(if (vl-string-search _ID Inhalt )
(progn
(setq position1 (+ (vl-string-search _ID Inhalt ) (strlen _ID ) 20  ))
(setq position2 (+ (vl-string-search "</TEXT>" Inhalt position1 ) 1 ))
(setq _TXTi(substr inhalt position1 (- position2 position1 )))
;(setq _TXTi (strcat "GEÄNDERT " _TXTi ))
(princ _TXTi )
(vla-put-textstring OBJ _TXTi )
)
)
)
)
(alert "Kein Text gefunden" )
)

)

(defun vk_WriteTextStream_XML (Stream FileName Charset / ADODBStreamObj Result)
  (if (setq ADODBStreamObj (vlax-create-object "ADODB.Stream"))
    (progn (setq Result (vl-catch-all-apply
  (function
    (lambda ()
      (vlax-put ADODBStreamObj "Charset" Charset)
      (vlax-invoke ADODBStreamObj "Open")
      (vlax-invoke-method ADODBStreamObj "WriteText" Stream 0)
      (vlax-invoke ADODBStreamObj "SaveToFile" FileName 2)
    )
  )
)
   )
   (vlax-release-object ADODBStreamObj)
   (if (not (vl-catch-all-error-p Result))
     FileName
   )
    )
  )
)

(defun vk_ReadTextStream_XML (FileName Charset / ADODBStreamObj Result)
(if (and (setq FileName (findfile FileName))
(setq ADODBStreamObj (vlax-create-object "ADODB.Stream"))
)
    (progn (setq Result (vl-catch-all-apply
  (function
    (lambda ()
      (vlax-put ADODBStreamObj "Charset" Charset)
      (vlax-invoke ADODBStreamObj "Open")
      (vlax-invoke ADODBStreamObj "LoadFromFile" FileName)
      (vlax-invoke-method ADODBStreamObj "ReadText" -1)
    )
  )
)
   )
   (vlax-release-object ADODBStreamObj)
   (if (not (vl-catch-all-error-p Result))
     Result
   )
    )
  )   
)


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

Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 08. Dez. 2016 06: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 Nur für -ikarus- 10 Unities + Antwort hilfreich

Hallo,

Zu deiner Frage... Texte in verwendeten Blöcken bekommst du so:

Code:
(setq countr 0 blist '())
(if (setq olist (ssget "_X" '((0 . "INSERT"))))
(repeat (sslength olist)
(setq elem (ssname olist countr))
(setq elem1 (tblobjname "BLOCK" (cdr (assoc 2 (entget elem)))))
(if (not (member elem1 blist))
(progn
(setq blist (cons elem1 blist))
(while (not (= (cdr (assoc 0 (entget elem1))) "ENDBLK"))
(if (= (cdr (assoc 1 (entget elem1))) "TEXT")
(progn
;elem1 ist dein Text... Mach was damit!
)
)
(setq elem1 (entnext elem1))
)
)
)
(setq countr (+ countr 1))
)
)

Aber generell stellst du dir das ganze vielleicht etwas leichter vor, als es ist...
Was ist mit Mtexten? Mit Attributen? Textüberschreibungen in Bemaßungen? Das alles vielleicht noch in Blöcken verschachtelt?

Gruß
Stefan

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 08. Dez. 2016 07: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 Nur für -ikarus- 10 Unities + Antwort hilfreich

Hallo Ikarus,
hier nochmal eine vla-Variante, fast wie die Lösung von Stefan.

Es werden alle Blockdefinitionen in der Zeichnung durchlaufen (auch Modellbereich und Layouts), wenn dort Texte (=(vla-get-Objectname Item)"AcDbText") gefunden werden wird für die Rückgabeliste der Blockname, das vla-Text-Objekt und der Textwert zurückgegeben.

Wie die Laufzeit bei riesigen Zeichnungen ist weiß ich nicht, ich habe das nur in einer überschaubaren Zeichnung mal getestet:

Code:

(defun c:test ( / RETLIST)
  (vlax-for BlocksItem
        (vla-get-blocks
          (vla-get-activedocument
            (vlax-get-acad-object))
          )
    (vlax-for Item BlocksItem
      (if(=(vla-get-Objectname Item)"AcDbText")
        (setq RetList
              (cons
                (list
                  (vla-get-name BlocksItem)
                  Item
                  (vla-get-TextString Item))
                RetList))))
    )
    RetList)

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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: 1968
Registriert: 05.09.2000

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

erstellt am: 08. Dez. 2016 08: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 Nur für -ikarus- 10 Unities + Antwort hilfreich

Der Grund warum auch die Version von Jörn bevorzugt werden sollte ist:
1. Es werden auch MTexte berücksichtigt
2. Es werden auch lange Texte, die ansonsten im Gruppencode 3 stehen würden ausgelesen

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

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 08. Dez. 2016 08:51    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 -ikarus- 10 Unities + Antwort hilfreich

Moin Martin,
MTexte würden nur berücksichtigt werden, wenn man z.B. folgendes einfügt:

(member(vla-get-Objectname Item)'("AcDbText" "AcDbMText")

oder?

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 08. Dez. 2016 09:27    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 für eure schnelle Antwort.

Ich schaue mir das mal genauer an, wenn ich das so überfliege, dann müsste ich in die XML einen TAG für inBLOCK und inDOKUMENT sowie einen TAG für vonMTEXT, vonTEXT, vonATTRIBUT und vonBEMUEBERSCHREIBUNG setzten. Bin ich mit dem Gedankengang auf dem richtigen Weg?

Gruß
Jürgen

[Diese Nachricht wurde von -ikarus- am 08. Dez. 2016 editiert.]

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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 08. Dez. 2016 09: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 Nur für -ikarus- 10 Unities + Antwort hilfreich

Die Grundidee deiner Lösung ist schon merkwürdig, aber egal, zumindest verwundert mich die Lösung
jedes Objekt(pro Zeichnung) einzeln zu übersetzen und dies nicht allgemeingültiger zu gestalten.
Neue Objekte werden nicht übersetzt, andere Dateien auch nicht. Für sowas gibt es professionelle Lösungen.
Aber bleiben wir dabei, dann:

Deine Importfunktion ist generell der falsche Weg, denn wenn du ein Handle hast, dann kannst du das Objekt DIREKT ansprechen.
Dein Weg über Auswahlsatz und vergleichen von Handle auf vorhanden sein in einer Liste ist kannst du in die Tonne hauen.

Von der Konstruktion her:
(defun SchreibTextwert (Handle Wert / Obj)
  WertXY in Objekt mit HandleZ schreiben
)

(handent HANDLE) => ENAME und vom ENAME zum Vla-Objekt kannst du ja bereits.
Mit der nötigen Fehlerkontrolle sollte der Großteil mit vla-put-TextString in das Objekt geschrieben werden können.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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: 1968
Registriert: 05.09.2000

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

erstellt am: 08. Dez. 2016 10:04    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 -ikarus- 10 Unities + Antwort hilfreich

Jo, Jörn, sorry hab nicht richtig hingeschaut 
@-ikarus-
Dein Code brücksichtigt erstmal gar keine Blockdefinitionen. Um diese auch zu bearbeiten, musst du eine Schleife durch die Blocktabelle gehen und da die Blöcke durchgehen um nach Texten innerhalb der Definitionen zu suchen.
Dann kannst du die CAD-Handles mit den Werten in eine xml oder Excel oder Textdatei schreiben lassen.
Der Weg zurück nach CAD ist denn das Gleiche - nur Rückwärts
Ich habe das Gleiche schon einmal gemacht, auch für Textübersetzungen, allerdings wird nach Excel geschrieben

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

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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 08. Dez. 2016 11:04    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,

das Übersetzungsbüro arbeitet mit SDL Trados und möchte die Texte wenn es machbar ist, im XML Format.

Mir persönlich sagt das Programm nichts.
Villeicht gibt es ja auch einen einfacheren weg als der von mir angedachte.

Vielen dank für eure Antworten. Die warden mich schonmal weiterbringen.

Gruß
Jürgen

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

cadwomen
Ehrenmitglied V.I.P. h.c.
Mädchen für fast alles


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

Beiträge: 2966
Registriert: 26.08.2002

ACAD R11 - 2018.1.2
(Plant3D)
AVIS
ACAD LT 2013- 2020
ZWCAD 2015 Versuch "nun ja"
[s]History P3D 2012/(13) SP und Hotfix([/s]<P>
Windows 10 / 64 Bit
Xeon CPU 3.5GHz
16GB Ram
NVIDIA Quadro P2000
3x Dell TV100 88P Monitore

erstellt am: 08. Dez. 2016 11:22    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 -ikarus- 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von -ikarus-:
...
das Übersetzungsbüro arbeitet mit SDL Trados und möchte die Texte wenn es machbar ist, im XML Format.
Mir persönlich sagt das Programm nichts.....

Hallo Ikarus

deshalb gilt eigentlich immer sich erst mal mit Quelle und Ziel vertraut zu machen.
Ebenso eine genaue Beschreibung was das Ziel ist ( okay vergesse ich auch immer wieder , aber wollt es gesagt haben )

löst vieles schon von vornherein

cu cw

------------------
Also ich finde Unities gut ... und andere sicher auch
------------------------------------------------
cadwomen™
Plant ist wie Öl suchen, je tiefer man bohrt desto mehr kommt ans Tageslicht

[Diese Nachricht wurde von cadwomen am 08. Dez. 2016 editiert.]

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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 12. Dez. 2016 14:04    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,

hab da wieder eine Fragen, wenn ich die Objecte im Modelspace und Paperspace durchgehe und den Text mit (vla-put-TextString Item Wert_  )
setzte dann wird dieser geändert, nur in den Blöcken passiert nichts.
Kann mir jemand vielleicht sagen was ich falsch mache?


Code:

(defun Block*Text_Import ( Handle_ Wert_ / RETLIST) ; Alle Text in den Blöcken
    (vlax-for      BlocksItem
                    (vla-get-blocks
                        (vla-get-activedocument
                              (vlax-get-acad-object)
                        )
                    )
                    (vlax-for Item BlocksItem
                        (if    (= (vla-get-Handle Item) Handle_ ) ;vla-HandleToObject
                              (vla-put-TextString Item Wert_  )
                              (princ)
                        )
                    )
    )
)


Danke
Gruß Jürgen

[Diese Nachricht wurde von -ikarus- am 12. Dez. 2016 editiert.]

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: 12. Dez. 2016 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 -ikarus- 10 Unities + Antwort hilfreich

Regenerieren hilft auch nicht?

Grüße!
Holger

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


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 12. Dez. 2016 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

Hallo Holger,

Regenerieren hilft auch nicht.

Gruß
Jürgen

[Diese Nachricht wurde von -ikarus- am 12. Dez. 2016 editiert.]

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: 12. Dez. 2016 14:15    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 -ikarus- 10 Unities + Antwort hilfreich

ich würde sagen: dann ist irgendwo ein Fehler in den Daten .. aus dem Code lässt sich da nichts erkennen.

Grüße!
Holger

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


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 12. Dez. 2016 14:17    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


Textexport_xml.lsp

 
Hallo,

ich hänge die Datei mal an

Gruß Jürgen

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: 12. Dez. 2016 14:27    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 -ikarus- 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von -ikarus-:
...ich hänge die Datei mal an...

Ohne jetzt intensiv geschaut zu haben: Der Codeausschnitt weiter oben prüft, ob die Handle gleich einer gegebenen Hanlde ist und setzt dann den Textstring. Bist du dir sicher, dass die Handle stimmt und diese einem Textelement zugeordnet ist? Kommt das Programm an diese stelle beim Debuggen überhaupt an? Dass die Blöcke bei dir nicht aktualisiert werden hängt aus meiner Sicht mit den Daten zusammen -- das müsstest du prüfen.


Grüße!
Holger

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


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 12. Dez. 2016 15:00    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 Holger,

ich werde die Daten noch mal heute Abend prüfen.

Danke für deine Hilfe

Gruß Jürgen

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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 13. Dez. 2016 06:29    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,
hab jetzt gefunden woran es lag.

Code:
(vla-put-TextString Item Wert_  )

zu
Code:
(progn (vla-put-TextString Item Wert_  ) Wert_)

geändert und es geht.

Zitat:
Original erstellt von -ikarus-:

Code:

(defun Block*Text_Import ( Handle_ Wert_ / RETLIST) ; Alle Text in den Blöcken
     (vlax-for      BlocksItem
                    (vla-get-blocks
                         (vla-get-activedocument
                              (vlax-get-acad-object)
                         )
                    )
                    (vlax-for Item BlocksItem
                         (if     (= (vla-get-Handle Item) Handle_ ) ;vla-HandleToObject
                               (vla-put-TextString Item Wert_  )
                              (princ)
                         )
                    )
     )
)



Jetzt hab ich noch ein Problem mit *Paberspace es werden nur die Objekte auf dem zuletzt aktiven Layout geändert, wo ran könnte das liegen?

Danke für die gute Hilfe.

Gruß
Jürgen

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: 1968
Registriert: 05.09.2000

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

erstellt am: 13. Dez. 2016 09:05    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 -ikarus- 10 Unities + Antwort hilfreich

Das ist sicher nur Augescheinlich wahr.
Der Codeschnipsel geht alle Blockcontainer (Modelspace, alle Layouts und alle sonstigen Blockdefinitionen) der Zeichnung durch.
Ich vermute den Fehler eher in den CAD-Handles. Diese sind wahrscheinlich nicht richtig.
Code:
(vlax-for      BlocksItem
                    (vla-get-blocks
                        (vla-get-activedocument
                              (vlax-get-acad-object)
                        )
                    )
  (prin1 BlocksItem)(terpri)
                    (vlax-for Item BlocksItem
                        (prin1 item)(terpri)
                    )
    )

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

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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 13. Dez. 2016 09:17    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 CADwiesel,

danke für deine Antwort, ich gehe das in Ruhe noch einmal durch.

Gruß
Jürgen

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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 13. Dez. 2016 09:55    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 -ikarus- 10 Unities + Antwort hilfreich

Du solltest dich meiner Antwort 08. Dez. 2016 09:52 (doch) noch einmal annehmen, alles löschen und bei Null anfangen.

Lisp
1. Aufbau/Struktur "langsam" erarbeiten damit es auch verstanden wird.
Forum
2. Das Querbeet zwischen Posting, Postingcode und Code aus dem Anhang ist nicht so schön.
    Da behält man schwer den Überblick und vor allem: Da hat kaum jemand Lust den Überblick zu behalten(!)

Deine Lösung zu dem einen Problem passt nicht zu deinen Codes,
es ist sicher nicht "die Lösung".

Zu deiner letzten Frage: Das liegt daran das Autodesk mit dem  "Paperspace" den (letzten)aktiven Layoutbereich verknüpft.
In anderem Codeteil werden aber alle Objekte bearbeitet - wie Wiesel schon sagte.
Du hast da einfach etwas kopiert, was nicht zu deiner Aufgabe passt.

Mit einem Beispiel verdeutlicht sieht dein Ablauf so aus:
Alle entsprechenden Einträge aus dem Modell werden in deine Exportliste geschrieben,
Alle entsprechenden Einträge aus dem (zuletzt) aktiven Layoutbereich werden in deine Liste geschrieben.
Alle entsprechenden Einträge aus der Blocktabelle werden in deine Liste geschrieben.

Die DWG hat zwei Layouts, in beiden + Modell sind drei Texte enthalten:

Code:
("aus c:Model*Text" "*Model_Space" "70" #<VLA-OBJECT IAcadText 000000002dbd7068> "1A6" "MeinModelltext3")
("aus c:Model*Text" "*Model_Space" "70" #<VLA-OBJECT IAcadText 000000002dbd7d88> "1A5" "MeinModelltext2")
("aus c:Model*Text" "*Model_Space" "70" #<VLA-OBJECT IAcadText 000000002ddaf2b8> "15E" "MeinModelltext1")
("aus c:Paper*Text" "*Paper_Space" "174" #<VLA-OBJECT IAcadText 000000002dbd7158> "1BA" "MeinLayout2text1")
("aus c:Paper*Text" "*Paper_Space" "174" #<VLA-OBJECT IAcadText 000000002dbd6f78> "1B9" "MeinLayout2text2")
("aus c:Paper*Text" "*Paper_Space" "174" #<VLA-OBJECT IAcadText 000000002ddae4a8> "17C" "MeinLayout2text3")
("aus c:Block*Text" "*Paper_Space5" "6C" #<VLA-OBJECT IAcadText 000000002dbd5ad8> "1B1" "MeinLayout1text3")
("aus c:Block*Text" "*Paper_Space5" "6C" #<VLA-OBJECT IAcadText 000000002dbd6258> "1B0" "MeinLayout1text2")
("aus c:Block*Text" "*Paper_Space5" "6C" #<VLA-OBJECT IAcadText 000000002ddb1a18> "151" "MeinLayout1text1")
("aus c:Block*Text" "*Paper_Space" "174" #<VLA-OBJECT IAcadText 000000002dbd7158> "1BA" "MeinLayout2text1")
("aus c:Block*Text" "*Paper_Space" "174" #<VLA-OBJECT IAcadText 000000002dbd6f78> "1B9" "MeinLayout2text2")
("aus c:Block*Text" "*Paper_Space" "174" #<VLA-OBJECT IAcadText 000000002ddae4a8> "17C" "MeinLayout2text3")
("aus c:Block*Text" "*Model_Space" "70" #<VLA-OBJECT IAcadText 000000002dbd7068> "1A6" "MeinModelltext3")
("aus c:Block*Text" "*Model_Space" "70" #<VLA-OBJECT IAcadText 000000002dbd7d88> "1A5" "MeinModelltext2")
("aus c:Block*Text" "*Model_Space" "70" #<VLA-OBJECT IAcadText 000000002ddaf2b8> "15E" "MeinModelltext1")

>> Wofür speicherst du so viel Information, wenn diese nicht berücksichtigt wird beim Import? <<

Das sieht schon schlimm aus, da sind 15 Einträge erstellt worden, es wird aber noch schlimmer bei deiner Import-Variante:
Für die NEUN Textobjekte in der Zeichnung, zu denen du 15 Datensätze exportiert hast (also 6 Stück doppelt),
wird der Handle-Vergleich 375x durchgeführt, obwohl es nur um 9 Objekte geht.

Also: Zurück auf Null und die Textausgab "Modellbereich / Layoutbereich XX Objekte" spare ich mir mal.

c:Model*Text uninteressant, löschen
c:Paper*Text uninteressant, löschen
c:Block*Text scheint ja alles zu berücksichtigen, behalten.

C:Textimport_XML komplett umkrempeln, dabei kann man gleich
Model*Text_Import löschen
Paper*Text_Import löschen
Block*Text_Import löschen

Und jetzt mein Vorschlag von vor ein paar Tagen:
Durchlaufe die importliste und spreche die Objekte DIREKT an.

Code:
(defun C:Textimport_XML ( / HANDLE_ WERT_ OBJ)


     ; Importieren

           ; Alles nötige um die Importliste zu durchlaufen

  ; Durchlauf der Liste

           ; INNERHALB foreach, mapcar,repeat, while oder wie auch immer man es umsetzt
           ; nun HANDLE_ und WERT_ definieren (eigentlich unnötig dies an eine Variable zu hängen, dient aber deiner Übersicht)
           ; setq handle_ wert_ ..

       ; ---- schnipp ----
       
           ; Hier der Part um das Objekt zu ermitteln und den Wert zu schreiben:
   (if (and
; Ist Acad das Handle in dieser Datei aktuell bekannt?
(handent HANDLE_)
; VLA-Object ermitteln, falls das Objekt aktuell existiert / könnte ja gelöscht worden sein
(setq OBJ (vlax-ename->vla-object (handent HANDLE_)))
; Hat das aktuelle Objekt mit dem Handle überhaupt eine Eigenschaft "Textstring"?
(vlax-property-available-p OBJ 'Textstring)
       )
       ; Wenn alles zutrifft, dann mach!
       (if (vl-catch-all-error-p (vl-catch-all-apply ; Diese Konstruktion kann Fehler abfangen, das Programm läuft also auch im Fehlerfall weiter
    'vla-put-Textstring (list OBJ WERT_) ; Wert zuweisen
)
   )
   ; Wenn es zu einem Fehler kam
   (princ(strcat "\nProblem bei Handle '" HANDLE_ "' - Gesperrte Layer? Oder kein Objekt mit Textstring Eigenschaft?"))
       )
       ; Wenn nicht alle Bedingungen von IF erfüllt wurden
       (princ(strcat "\nObjekte mit Handle '" HANDLE_ "' nicht verfügbar"))
   )

       ; ---- schnapp ----
 
           ; SchleifenGedöns
 
)


------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

-ikarus-
Mitglied
Zeichner


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

Beiträge: 142
Registriert: 12.02.2007

ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015
Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro,
Visual Studio 2013
Notepad++
Rechner: HP Z620 Workstation
NVIDIA Quadro K4000

erstellt am: 13. Dez. 2016 10:29    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,

vielen Dank für deine Antwort.
Ich werde versuchen das so wie von dir beschriebene Ablaufschema umzusetzen.

Danke

Gruß Jürgen

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