Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Blockattribute in Multi-Führungslinie ausgeben

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:  Blockattribute in Multi-Führungslinie ausgeben (3292 mal gelesen)
Andyt8
Mitglied
Planungstechniker, Systemadministrator


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

Beiträge: 195
Registriert: 13.06.2003

erstellt am: 17. Jun. 2013 14: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


posl.lsp

 
Hallo,

Wir haben ein älteres AutoLisp Script, das Attribute von Blöcken auslesen und damit eine Schnellführung erstellen kann. Dies ist als Dateianhang inkludiert. Nun möchten wir auf die Multi-Führung umstellen - hat diese doch einige Vorteile.

Der neue Befehl ist "_mleader" und das Skript wurde entsprechend angepasst. Jedoch bei Blöcke mit mehreren Attributen gibt es Probleme. Das erste Attribut wird für die Multi-Führung verwendet, jedoch alle weiteren werden nach Abschluss der Multi-Führung zur Kommandozeile gesendet und da natürlich als nicht vorhandener Befehl erkannt.


Ich weiß ungefähr an was es liegt - aber nicht wie ich das lösen könnte. Kann jemand weiterhelfen?


Ich hatte schon mal versucht, dass Ganze komplett neu zu schreiben, da der Code wohl auch schon etwas älter ist - aber da bin ich leider noch früher gescheitert...

------------------
Unmögliche Vielfalt mit unmöglich vielen Variationen

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 17. Jun. 2013 16: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 Andyt8 10 Unities + Antwort hilfreich

Hello...

Hab mir deinen Code nicht angschaut, weil mir dort einfach zu viele Kommentare drinnen sind  
Habe mit Multileadern wenig erfahrung, hab jetzt mal schnell was zusammengebaut...


das einfügen des Textes ohne Commands


Wenn ich dich richtig verstanden habe...
Folgendes schreibt eine Liste von String's, in deinem Fall die gänze der attribute mehrzeilig in einen Multileader...

Code:

(defun C:My_mleader (/)
    (command "_mleader" (getpoint "\nP1") (getpoint "\nP2") "")
   
    (   (lambda (ent txt-list / txt)
            (while txt-list
                (setq txt (cons "\n" (cons (car txt-list) txt)))
                (setq txt-list (cdr txt-list))
            )  
            (setq txt (apply 'strcat (reverse (cdr txt))))
           
            (entmod
                (subst
                    (cons 304 txt)
                    (assoc 304 ent)
                    ent
                )
            )
        )
        (entget (entlast))
        '("1te Zeile" "2te Zeile") ;hier ist die Liste von Strings
    )
    (princ)
)


Sollte klar sein dass du das noch ergänzen musst, ja? 


lg reltro

[Diese Nachricht wurde von reltro am 17. Jun. 2013 editiert.]

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

Andyt8
Mitglied
Planungstechniker, Systemadministrator


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

Beiträge: 195
Registriert: 13.06.2003

erstellt am: 18. Jun. 2013 06: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

Danke für die Antwort - ich habe mittlerweile eine eigene Lösung gefunden. Ist zwar noch nicht komplett fertig - funktioniert reibungslos bei Versuchen mit Blöcken wo 1 bis 3 Attribute vorhanden waren.

Jetzt muss es nur mehr formell überarbeitet werden.


PS.: ja, die Kommentare sind auch mir zu viel. Bei der Überarbeitung werde ich diese bereinigen.

------------------
Unmögliche Vielfalt mit unmöglich vielen Variationen

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 18. Jun. 2013 09:19    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 Andyt8 10 Unities + Antwort hilfreich

Hey hey...

Zeig mal her... 
Aber Warum auf 1 2 3 Attribute beschränken?

nun kommt es darauf an, ob du selbst basteln willst oder es auch ausreicht eine Lösung zu bekommen.
Bin ja stark für basteln, desshalb hab ichs schnell mal zusammengebaut... Will dich aber nicht vom selberbasteln abhalten; außer du willst abgehalten werden 
(m)eine Lösung steht bereit, sag bescheid...

lg

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

Andyt8
Mitglied
Planungstechniker, Systemadministrator


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

Beiträge: 195
Registriert: 13.06.2003

erstellt am: 18. Jun. 2013 16: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

Es ist nicht auf 1,2,3 Attribute beschränkt. Wir brauchen das Skript nur nicht für mehr Attribute.

Wir nutzen dies für unsere dynamische Schrauben-/Normteilbibliothek. Diese haben Attribute wie DIN, Bezeichnung, Werkstoff und Länge enthalten. Das wird nach dem einfügen und anpassen einfach mit der Führungslinie beschriftet...

Also eigentlich ist es nicht nur irgendeine "Lösung" - so denke ich mal. Es ging primär darum, das bereits vorhandene Skript zu überarbeiten. Im Kern (bzw. das was ich gegenüber dem posl.lsp Skript vom ersten Beitrag geändert habe) sieht es nun wie folgt aus:

Code:

(progn (setq old_al (reverse old_al))
  (setq p2 (getpoint p1 "\nNach Punkt :"))
  (command "_mleader" p1 p2)
  (while old_al
    (setq tx (car old_al))
    (setq txco (strcat txco "\n" tx)) ; put all attributs to one variabel
    (setq old_al (cdr old_al))
  )
  (setq txco (substr txco 2)) ; remove unnecessary signs
  (command txco) ; post all attributs as one string
)

Das gesamte Skript wird mit dem nächsten Neustart der Computer im FOB Menu 7.2 for AutoCAD 2014 bei uns intern ausgerollt. Da wird es dann weiter getestet. Ein Teil der Arbeitsplätze läuft bereits auf AutoCAD 2014.

Bis jetzt lief es in der Testumgebung aber sehr gut. Ich hatte es sogar bei einem Block probiert, der 10 Attribute hatte - und auch das wurde korrekt als Multi-Führungslinie ausgegeben.

------------------
Unmögliche Vielfalt mit unmöglich vielen Variationen

[Diese Nachricht wurde von Andyt8 am 18. Jun. 2013 editiert.]

[Diese Nachricht wurde von Andyt8 am 19. Jun. 2013 editiert.]

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 18. Jun. 2013 16: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 Nur für Andyt8 10 Unities + Antwort hilfreich

Anscheind tut es was es soll... 

Hier noch meine (überflüssiggewordene  ) Variante bzw. eben der Kern...

Code:

(defun C:My_mleader (/ GetAtt att BlockRef Blockref-p mleader)
    (vl-load-com)

    (setq GetAtt
        (lambda (obj / obj)
            (if (= (type obj) 'ename)
                (setq obj (vlax-ename->vla-object obj))
            )
            (if (= (vla-get-ObjectName obj) "AcDbBlockReference")       
                (if (= :vlax-true (vla-get-hasattributes obj))
                    (mapcar
                        '(lambda (AttObj / )
                            (list
                                AttObj
                                (cons
                                    (vla-get-TagString AttObj)
                                    (vla-get-TextString AttObj)
                                )
                            )
                        )
                        (vlax-invoke obj 'GetAttributes)
                    )
                    'nil
                )
                'nil
            )
        )
    )
   
    (cond
        (    (and
                (setq Blockref-p (= (cdr (assoc 0 (entget (setq BlockRef (car (entsel "\nBlock wählen")))))) "INSERT"))
                (setq att (mapcar 'cdadr (GetAtt BlockRef)))
            )
            (command "_mleader" (getpoint "\nP1") (getpoint "\nP2") "")
            (setq mleader (entlast))
           
            (  (lambda (ent txt-list / txt)
                    (while txt-list
                        (setq txt (cons "\n" (cons (car txt-list) txt)))
                        (setq txt-list (cdr txt-list))
                    ) 
                    (setq txt (apply 'strcat (reverse (cdr txt))))
                   
                    (entmod
                        (subst
                            (cons 304 txt)
                            (assoc 304 ent)
                            ent
                        )
                    )
                )
                (entget mleader)
                att
            )
        )
        (Blockref-p (princ "\n*** Block enthält keine Attribute ***"))
        ('T (princ "\n*** gewähltes Objekt ist kein Block ***"))
    )
    (princ)
)


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

Andyt8
Mitglied
Planungstechniker, Systemadministrator


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

Beiträge: 195
Registriert: 13.06.2003

erstellt am: 19. Jun. 2013 07: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

Hallo,

Ich wollte den Code von dir ausprobieren und mal vergleichen, aber das Skript tut nicht was es soll(te). Zumindest bei mir kann das Skript nicht ausgeführt werden. Es kommt schon beim Laden "; Fehler: Fehlerhafter Argumenttyp: stringp nil"

------------------
Unmögliche Vielfalt mit unmöglich vielen Variationen

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 19. Jun. 2013 09:28    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 Andyt8 10 Unities + Antwort hilfreich

Hey

Kann ich beim besten Willen nicht nachvollziehen...
Beim laden darf es keine schwierigkeiten geben, weil dabei gar nichts ausgeführt wird außer die Definition der Funktion.

Die Funktion ist in sich komplett lokal, also dürfte es auch keinerlei Probleme geben wenn bereits irgendwelche variablen gesetzt waren.

Demnach schließe ich darauf, dass du entweder etwas verwendest das keine vl-befehle kennt... Mit was arbeitest du denn?

oooder du hast vergessen was zu kopieren oder hast zu viel kopiert...


Hab das ganze nochmals überprüft und keinen Fehler gefunden.
Getestet auf acad 2012 und 2014... rennt...

Hab was kleines ausgebessert: wenn kein Objekt gewählt wurde führte es vorher zu einem Fehler, beseitigt...


Code:

(defun C:My_mleader (/ GetAtt att BlockRef Blockref-p mleader)
    (vl-load-com)
    (setq GetAtt
        (lambda (obj / obj)
            (if (= (type obj) 'ename)
                (setq obj (vlax-ename->vla-object obj))
            )
            (if (= (vla-get-ObjectName obj) "AcDbBlockReference")       
                (if (= :vlax-true (vla-get-hasattributes obj))
                    (mapcar
                        '(lambda (AttObj / )
                            (list
                                AttObj
                                (cons
                                    (vla-get-TagString AttObj)
                                    (vla-get-TextString AttObj)
                                )
                            )
                        )
                        (vlax-invoke obj 'GetAttributes)
                    )
                    'nil
                )
                'nil
            )
        )
    )
   
    (setq BlockRef (car (entsel "\nBlock wählen")))

    (cond
        ((null BlockRef) (princ "\n*** Kein Objekt gewählt ***"))
        (    (and
                (setq Blockref-p (= (cdr (assoc 0 (entget BlockRef))) "INSERT"))
                (setq att (mapcar 'cdadr (GetAtt BlockRef)))
            )
            (command "_mleader" (getpoint "\nP1") (getpoint "\nP2") "")
            (setq mleader (entlast))
           
            (  (lambda (ent txt-list / txt)
                    (while txt-list
                        (setq txt (cons "\n" (cons (car txt-list) txt)))
                        (setq txt-list (cdr txt-list))
                    ) 
                    (setq txt (apply 'strcat (reverse (cdr txt))))
                   
                    (entmod
                        (subst
                            (cons 304 txt)
                            (assoc 304 ent)
                            ent
                        )
                    )
                )
                (entget mleader)
                att
            )
        )
        (Blockref-p (princ "\n*** Block enthält keine Attribute ***"))
        ('T (princ "\n*** gewähltes Objekt ist kein Block ***"))
    )
    (princ)
)


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