Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  textfield in attribut

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:  textfield in attribut (2280 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Feb. 2010 09: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!

Ich möchte gern die Abfrage textfield an ein Attribut in einem Block "layer-area" übergeben. Mit der beigefügten function ist es möglich die Ausgabe in einen MTEXT auszuwerfen.
Mein Problem, mit den ActiveX-functions habe ich noch nicht die volle Kontrolle (Beispiel kann ich nicht die Variable obj abfragen, wo vermutlich der Flächenwert steht).

Hier ist der angepasste Ansatz von Dorfy, den ich ein bissel umgestrickt habe bezüglich eines area-objekts

(defun c:lnkfld (/ aws n *model-space*)
  (vl-load-com)
;;get a reference to model space
  (setq *model-space*
(vla-get-ModelSpace
  (vla-get-ActiveDocument (vlax-get-acad-object))
  )
)
;;select aws
  (setq aws (ssget '((0 . "LWPOLYLINE"))))
  (setq n 0)
  (repeat (sslength aws)
    (linkedlength
      (ssname aws n)
      (cdr (assoc 10 (entget (ssname aws n))))
    )
    (setq n (1+ n))
  )
)
;;pass this function an entity and a point
(defun LinkedLength (ent pt / obj objID ip width str)
;;convert the entity to an object
  (setq obj  (vlax-ename->vla-object ent)
;;get the object ID
objID (vla-get-objectid obj)
;;convert the point
ip    (vlax-3D-Point pt)
;;set the width for the MTEXT
width 0.0
;;set the string - this creates the field
str  (strcat
      "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
      (rtos objID 2 0)
      ">%).area \\f \"%lu2%pr2\">%"
      )
)
;;Create the MTEXT entity containing the field.
  (vla-addMText *model-space* ip width str)
)

Grüsse cp

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: 03. Feb. 2010 09: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 cadplayer 10 Unities + Antwort hilfreich

Zunächst sollte man nochmal eindeutig klären was du willst:

Hast du eine BlockREFERENZ(INSERT) an der bereits ein Attribut "klebt" und möchtest nur noch den Attributwert hinzufügen oder
möchtest du der Blockreferenz ein zusätzliches Attribut hinzufügen (mit deinem gewünschten Textwert) ? Und falls es die
Vermutung 2 ist: Was soll mit der Blockdefinition geschehen, soll diese ebenfalls eine zusätzliche Attributdefinition
erhalten oder nicht ?

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Feb. 2010 09: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


block.dwg.txt

 
ich habe bereits einen Block "layer-area" definiert, nach dem beigefügtem Muster
1.Attribut: für den layer, wo die LWPL befindet
2.Attribut: für die Flächegrösse, die mittels textfield übergeben werden soll (dyn. beibehalten)


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: 03. Feb. 2010 10:02    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 cadplayer 10 Unities + Antwort hilfreich

Der Flächenwert interessiert dich doch nicht, den liest später das Textfeld von selbst aus,
du benötigst nur die ObjectID welche das Programm ja bereits aus der Polylinie holt.
Dazu brauchst du noch den Layer der Polylinie wenn ich das richtig verstehe ? => (vla-get-layer obj)
[EDIT: Den Layer lässt du aber doch auch über ein Textfeld auslesen, oder?]


Das einzige was du jetzt noch benötigst ist der Programmteil in dem
steht "füge diese Daten in ObjektX ein",
wobei "X" einmal das 1.Attribut. Um da ran zu kommen gibt es mehrere Möglichkeiten:
Du pickst die Attribute (dafür mußt du 2x eine Objektwahl vornehmen
und zudem müssen die Attribute sichtbar sein)
oder du wählst die Blockreferenz und das Programm ermittelt die entsprechenden Attribute selbst.

Version2 -> Ob die Blockreferenz automatisch ermittlet werden kann, kann ich
nicht beurteilen - habe mir die DWG aber auch nicht angesehen muß ich zugeben.
Frage: Wie ermittelst du denn die Blockreferenzen bzw. Attribute die bearbeitet werden sollen ?

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

[Diese Nachricht wurde von cadffm am 03. Feb. 2010 editiert.]

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 03. Feb. 2010 10:54    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 cadplayer 10 Unities + Antwort hilfreich

hi, ...  ...

Code:
...
;;Create the MTEXT entity containing the field.
  ;(vla-addMText *model-space* ip width str)
  (setq BlkNme "layer-area"
bp pt
Xscale 1
Yscale 1
Rot 0
tag2 (strcat(vla-get-layer obj))
tag1 str);(strcat(rtos(vla-get-area obj)2 2))
  (command "_.Insert" BlkNme bp Xscale Yscale Rot tag1 tag2)
)

...

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Feb. 2010 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

genau das ist die Frage:
Kann die BLOCKRREFERENZ (Attribut "area") auch wie beim MTEXT-REFERENZ ausgeworfen werden ?

Ich mag diese Kopplung zwischen MTEXT-referenz <-> Objekt LWPLOLYLINE

Rein manuell ist es möglich wie die block.dwg verdeutlicht die Kopplung aufzubauen zwischen
BLOCKRREFERENZ <-> LWPLOLYLINE

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: 03. Feb. 2010 11:41    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 cadplayer 10 Unities + Antwort hilfreich

Es ist für mich recht schwer deinen Worten zu folgen und wie DU
die Blockreferenz ermitteln willst ist mir ja immer noch nicht klar !

Händisch ? via Programm ? (bekommst du das hin?)

Setzt du die Blockreferenz erst ab (dann siehe Dorfy) oder gibt es die
bereits und du somit möchtest Attributwerte editieren ?

Soll jetzt irgendwo noch ein Mtext(mit Feld) erstellt werden oder was ist los ?

Vorschlag, schreibe nochmal genau deinen IST-Stand(Zeichnung) und deinen
Soll-Stand(Zeichnung).

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Feb. 2010 12:33    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

Hi nochmal!
Um meinem Gedankengang besser folgen zu können, bitte ich Euch gern mal die block.dwg zu öffnen, diese enthält 3 Objekte.
-geschlossener pline
-mtext mit textfield-kopplung zum pline
-block namens "layer-area" mit 2 Attributen für Layername und Flächengrösse mit textfield-kopplung zum pline

Die Funktion "lnkfld" geht bestens, um ein mtext-objekt zu bedienen
Ich benötige gleiche Funktion, um ein Attribut in einem Block zu bedienen.

Ein Vorteil ist: wenn man den pline in seiner Grösse ändert, ändert sich auch die Angabe der Flächengrösse - das finde ich klasse (dynamisch).

PS: es lässt sich für mich genau prüfen in welcher Variable die Flächengrösse steht, tippe mal auf var objID


cp

[Diese Nachricht wurde von cadplayer am 03. Feb. 2010 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: 04. Feb. 2010 01: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 cadplayer 10 Unities + Antwort hilfreich

Hallo cadplayer,

den Code habe ich mir nicht weiter angesehen.
Fakt ist allerdings, dass zu Beginn weder die Blockreferenz Kenntnis von der zugehörigen Polyline hat und umgekehrt die Polyline auch nicht, wohin diese verlinkt ist.
Daher gibt es auch nur einen Weg:
1. Polyline wählen
2. Blockreferenz wählen (oder alternativ, Blockreferenz einfügen)

Bist du soweit, dann sind dir also beide Elemente bekannt. Nun musst du noch die Attribute ermitteln. ... und den gleichen Text, wie dieser in das MText-Element geschrieben wird, in das entsprechende Attribut schreiben. - fertig.

Bei Fragen ...

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 04. Feb. 2010 06:54    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:

Die Funktion "lnkfld" geht bestens, um ein mtext-objekt zu bedienen
Ich benötige gleiche Funktion, um ein Attribut in einem Block zu bedienen.

Hi,
cadffm fragte bereits wie dein Block eingefügt wird bzw ob er schon an Ort und Stelle liegt?!
Hast du die Zeilen die ich oben gebracht habe mal in den Code eingebaut und probiert?

Ach, und die Flächengröße wird "vom Feld ermittelt" (...area...), alternativ siehe oben gebrachte Zeilen, hinter tag1... 

So, nu aber mal die Fragen beantworten und mal probieren 

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

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



Solution Manager (m/w/d) Business Development

Wir sind Cideon. Prozessoptimierer und Systemintegrator, Produktdatenberater und digitaler Enabler. Wir sind Teil der Friedhelm Loh Group. Familien­unternehmen und Global Player, Innovationsführer und Top-Arbeitgeber.

Zur Unterstützung unseres Solution Management Teams suchen wir Sie an einem unserer bundes­weiten Standorte zum nächst­möglichen Termin.

Solution Manager (m/w/d) ...

Anzeige ansehenBusiness Development
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 04. Feb. 2010 08: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

Danke Leute für den Stoff - mich beschleicht das Gefühl, das ich Euch langsam folge

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