Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Einfüge Punkt von Block

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:  Einfüge Punkt von Block (2386 mal gelesen)
Ralf-CAD-Support
Mitglied
Techniker


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

Beiträge: 47
Registriert: 09.03.2007

PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016

erstellt am: 10. Aug. 2015 21: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

Hallo Zusammen,

anbei eine Routine, welche ursprünglich den Einfügepunkt von einem gesuchten Text (nach WKS, auch in Blöcken) auflisten soll.
Leider klappt dass nicht. Enfügepunkt von Text innerhalb vom Block wird ausgegeben.
Jetzt versuche ich den Block Einfügepunkt zu bestimmen. Komme aber nicht weiter.
Evtl. kann mit jemand helfen.
Vorab vielen Dank

(defun findtxtinblock (stext      /          acapp      adocs
                          BLOCK      ITEM      textpos    arrayTextpos
                          textinfo
                          )
  (setq acapp (vlax-get-acad-object)
        adocs (vla-get-ActiveDocument acapp)
        ) ;_ ende von setq

  (vlax-for BLOCK (vla-get-blocks adocs)
    (vlax-for ITEM BLOCK
      (if (member (strcase (setq entName (vla-get-ObjectName ITEM)))
                  '("ACDBMTEXT" "ACDBTEXT")
                  ) ;_ ende von member
        (if (wcmatch (setq text (strcase (vla-get-textstring ITEM)))
                    (strcase stext)
                    ) ;_ ende von wcmatch
          (progn
            (setq blname (vla-get-Name BLOCK))
            (setq textpos      (vla-get-InsertionPoint ITEM)
                  arrayTextpos (vlax-variant-value textpos)
                  textinfo
                              (strcat
                                (rtos (vlax-safearray-get-element arrayTextpos 0) 2 2)
                                ", "
                                (rtos (vlax-safearray-get-element arrayTextpos 1) 2 2)
                                ", "
                                (rtos (vlax-safearray-get-element arrayTextpos 2) 2 2)
                              )      ; end strcat 
            ) ;_ end of setq           
          ) ;_ ende von progn
        ) ;_ ende von if
      ) ;_ ende von if
    ) ;_ ende von vlax-for
  ) ;_ ende von vlax-for
) ;_ ende von defun

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: 10. Aug. 2015 21: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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

Für den Fall das du heut Abend noch arbeiten willst riskiere ich mal eine evtl falsche Antwort(kann gerade nicht am CAD nachsehen):

1. So wie ich das sehe wird nie die Position im WKS ermittelt, immer nur im OCS des inserts?
Aus dem effeff würde ich jetzt sagen das die Transformation von OCS nach WKS fehlt(der Basispunkt ist ja in Abhängigkeit des Hochzugsvektors/der Normalen nicht immer 0,0,0. Auch kann man via Programm einen anderen Basispunkt setzen und von dynamischen Blöcken mit einem Blockbasispunktparameter vermute ich ebenfalls eine andere Speicherinformation zum Basispunkt.
Mein Stichwort wäre hier zunächst TRANS als AutoLispfunktion, zusammen mit BLOCK wird man einige Googletreffer landen.

2.Text: Was ist für dich der Basispunkt? Wenn du damit den normalen (Ausrichtung LINKS bzw LinksOben für Mtexte meinst, dann dann stimmt der Part vielleicht, sollten jedoch auch die geänderten Ausrichtung-Basispunkte gemeint sein, so wirst du Fallweise auch die Eigenschaft AligmentPoint(oder so ähnlich) auswerten müssen.

Sollte ich also richtig liegen, so gibt es zwei Baustellen.
Teste zunächst nur mit TEXT Objekten deren Ausrichtung Links ist und nehme dich dem ermitteln dieser Koordinate an.

Wenn der Basispunkt des Blockes 0,0,0 entspricht und die Normale(dxf Gruppencode 210), dann sollten aktuell die Koordinaten des InsertPoints-Text dem WKS entsprechen.
Sollte der Blockbasispunkt ungleich 0,0,0 sein, dann ist der Wert aber falsch!
Es fehlt die Transformation von ObjektKoordinatensystem Text, zu Block, zu WKS.

Kenne die VL-Eigenschaftsnamen nicht auswendig, auch nicht die entsprechende TRANS-Funktion in VL ohne nachzuschlagen, aber mit den Hinweisen solltest du schon weiterkommen.

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

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

Ralf-CAD-Support
Mitglied
Techniker


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

Beiträge: 47
Registriert: 09.03.2007

PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016

erstellt am: 10. Aug. 2015 22:09    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

Guten Abend und vielen Dank für die Info.
Mit den Suchbegriffen habe ich jetzt auch einiges gefunden!
Danke nochmals - vg und schönen Abend noch !

[Diese Nachricht wurde von Ralf-CAD-Support am 10. Aug. 2015 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: 10. Aug. 2015 23:34    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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

Dabei fällt mir noch auf das dieses Vorhaben wie beschrieben, nach meiner Erfahrung zumindest, unsinnig ist.
Mir würde spontan keine Situation einfallen in der es Sinnvoll wäre Textpositionen Im Modellbereich und in gleichem Atemzug in Blockdefinitionen zu suchen.

Was hingegen oft benötigt wird, ist die Positionen von Text im Modell/Papierbereich inkl. der Positionen von Texten welche durch Blockreferenzen(Inserts) dargestellt werden.
Für diesen Fall Muß man dann bei der Transformation des Punktes auch noch das OCS des Inserts bedenken, die Skalierung, Drehung und den Einfügepunkt desselben.

Wenn du aber wirklich die Lage im Modell und (nur) die Lage in der Blockdefinition(BLOCK) benötigst, dann wüßte ich rein aus Interesse mehr von der Aufgabe, wozu braucht man dies?

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

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: 11. Aug. 2015 07:10    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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

... das Vorhaben ist grundsätzlich nicht möglich, weil es keine eindeutige Antwort gibt. Oder es ist möglich, dann allerdings nicht mit dem obigen Code.

Text ist grundsätzlich Bestandteil einer Blockdefinition. Auch der Modellbereich ist intern eine Blockdefinition, nur, dass du diese nicht innerhalb der aktuellen Zeichnung referenzieren kannst. Der Modellbereich ist imgrunde ein ständig geöffneter Blockeditor (sinnbildlich). Auf diese Blockdefinition können X Blockreferenzen verweisen. Was du am Bildschirm siehst, ist eine Blockreferenz.
Folglich kann ein Text, der nicht im Modellbereich erstellt ist, beliebig oft in der Zeichnung zu sehen sein, trotzdem dieser nur einmal definiert ist.
Demzufolge muss das Finden von Texten an dieser Stelle mehrere Ergebnisse zulassen.
Wenn du nun noch beachtest, dass auch beliebige Verschachtelungsstrukturen der Blöcke und Blockreferenzen in einer Zeichnung existieren können, bedeutet dies in der Folge auch, dass es nicht genügt, die Referenzen der den Text beinhaltenden Blockdefinitionen zu prüfen, sondern auch deren übergeordneten Blockdefinitionen, inwieweit diese referenziert sind. Willst du wirklich alle Texte finden, die sichtbar sind, muss deine Programmstruktur an irgendeiner Stelle eine Rekursion beinhalten, da dir beim Programmstart nicht bekannt ist, wie tief die Verschachtelungen der Blöcke und Blockreferenzen der aktuellen Zeichnung sind.

Das alles bitte als Denkanstoß verstehen, dahingehend, ob deine Aufgabenstellung korrekt beschrieben oder diese überhaupt sinnvoll zu lösen ist.

Das Thema habe ich für eine Stücklistenfunktin bearbeitet, welche eben auch alles sichtbare auswertet, weshalb diese Thematik mir nicht unbekannt ist, denn ob man einen Block bestimmten Namens oder einen Text mit bestimmten Inhalt sucht, ist von der Programmlogik egal.

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

Ralf-CAD-Support
Mitglied
Techniker


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

Beiträge: 47
Registriert: 09.03.2007

PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016

erstellt am: 11. Aug. 2015 12:23    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,
vielen Dank für deinen Beitrag. Du hast alle Punkte angesprochen die mir bisher sorgen bereitet haben. Respekt!
Doch nun zu der Aufgabenstellung. Ich benutzte bisher eindeutigte Texte im Modellbereich um auf den Einfügepunkt hin ein BKS zu setzen. Basierend darauf wurden Koordinatenbereichen definiert für jeden weiteren zu erfassenden Text. Somit hatte ich die Möglichkeit Schriftfeldinformationen zu erfassen, diese für Attribute oder Prop. zu nutzen (für die Übergabe an PDM). Hat bisher super funktioniert, bis Zeichnungen kamen, in denen diese eindeutigen Texte in Blöcken (z.b. Blockname: "A$C2") verpackt waren. Somit bisheriges Ansatz dahin.
Meine Idee war zudem, wenn ein entsp. Textblock mehrfach vorhanden war, sucht die Routine dennoch die Textbereiche ab, wenn mehrere gefunden werden, dann soll diese Blockrefenz akzeptiert und verwendet werden !?!
Hoffe ich konnte mit meine Worten die Anforderungen erkennbar weitergeben? VG Ralf

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: 11. Aug. 2015 12:44    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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

" Ich benutzte bisher eindeutigte Texte im Modellbereich um auf den Einfügepunkt hin ein BKS zu setzen. Basierend darauf wurden Koordinatenbereichen definiert für jeden weiteren zu erfassenden Text. "

Das alleine hört sich schon schlimm an, aber da stecken wir ja nicht drin und ich nehme es mal als gegeben hin.
Bleibt man also bei dem Ansatz und deinem Wunsch, so hast du von Brischke und mir nun gezeigt bekommen wie
groß die Thematik ist (wenn man es ordentlich machen will) ist.

Gerade in deinem Anwendungsfall hört es sich so an das die Daten wirklic wichtig sind und daher sollte man nicht mit etwas halbgarem arbeiten.

Allerdings: Der faule Mensch würde auch im Modellbereich alle Blockreferenzen auflösen können, die Texte ermitteln und das ganze ungeschehen machen können.

Jetzt ist die Frage was du mit den Informationen anfängst?

"Meine Idee war zudem, wenn ein entsp. Textblock mehrfach vorhanden war, sucht die Routine dennoch die Textbereiche ab, wenn mehrere gefunden werden, dann soll diese Blockrefenz akzeptiert und verwendet werden !?!"
In deinem Beispiel behandelst du aktuell ja überhaupt keine Blockreferenzen.


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

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: 11. Aug. 2015 15: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 Nur für Ralf-CAD-Support 10 Unities + Antwort hilfreich

Hallo Ralf,
klingt für mich nach einer Aufgabenstellung, die ich ebenso mal zu lösen hatte. Es ging darum, aufgelöste oder niemals als Block eingefügte Schriftfelder zu erkennen und diese dann nachträglich korrekt als Attributblock einzufügen.
Dazu habe ich auch anhand eines erkennbaren Textmusters versucht einen "Basis"Text zu finden und anhand definierter Lagebeziehungen die zugehörigen Textinformationen qualifiziert zu ermitteln.
In deinem Fall, einfache Verschachtelung, ist eine Transforation der aus der Blockdefinition ermittelten Textposition notwendig - natürlich für jede Referenz des Blockes. Die Transforationsmatrix ist auch in den Elementdaten enthalten oder kann mit VL-??? abgefragt werden. Da ich auf'm Handy kein Acad habe, kann ich dazu keine genaueren Angsben machen.
Falls du an meiner bestehenden Lösung Interesse hast, ich habe noch diverse andere Lösungen zur Hand, kannst du mich in 3Wochen direkt ansprechen, dann habe ich auch wieder ein Acad auf'm Schirm.

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

Ralf-CAD-Support
Mitglied
Techniker


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

Beiträge: 47
Registriert: 09.03.2007

PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016

erstellt am: 12. Aug. 2015 09: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 und vielen Dank für die Infos.

Gerne lasse ich die Routine von Profis checken.

VG

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