| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für BricsCAD |
| |
| App-Store CADSOMA wächst und wächst, eine Pressemitteilung
|
Autor
|
Thema: Z-Höhe eines Blockes in Attribut aktualisieren (2200 / mal gelesen)
|
Rick vs Bricscad Mitglied Bautechniker
Beiträge: 22 Registriert: 22.06.2018 Bricscad V17.2.12 Windows 7 64bit
|
erstellt am: 10. Aug. 2018 12:43 <-- editieren / zitieren --> Unities abgeben:
Moin, ich habe ich Vermessungspunkte die aus einem Block mit Attributen bestehen. In den Attributen wird die Höhe des Blockes bzw. des Messpunktes beschreiben. Nun muss ich für einen Breich ca. 1.800 Blöcke in der Höhe anheben. Ich verschiebe also die Blöcke in Z-Richtung. Die Attribute behalten nun leider ihren Text. Die Z-Höhe hat sich geändert aber der Text/ das Attribut zeigt noch die alte Höhe an. Gibt es dazu einen Befehl oder eine lisp? Danke euch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 10. Aug. 2018 13:14 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
Für derartiges gibt es die Technik der FELDer, auch in Blöcken und Attributen, selbst in Attributedefinitionen als Vorlage für die Attribute an Blockreferenzen. Aber auch TEXT und MTEXT usw. Also, starte mal Befehl ATTDEF und schau mal einen Millimeter rechts vom Eingabefeld für Vorgabe: Wie du von deiner jetztigen Situation zum Ziel kommst bedarf längerer Erklärungen, dafür habe ich keine Zeit und hoffe du kannst die Sache mit der Aktualisierung selbst handeln oder es kommt noch wer anders zu Hilfe.
Alternatov gibt es dazu wirklich Lisp Programme welche die Z-Höhe der Blockreferenz als Textwert in ein Attribut schreibt, wo der Text dann zwar in dem Moment aktuell, aber weiterhin "dumm" ist, also bei der nächsten Höhenänderung sich wieder nicht selbst aktualisiert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rick vs Bricscad Mitglied Bautechniker
Beiträge: 22 Registriert: 22.06.2018 Bricscad V17.2.12 Windows 7 64bit
|
erstellt am: 10. Aug. 2018 13:20 <-- editieren / zitieren --> Unities abgeben:
|
Rick vs Bricscad Mitglied Bautechniker
Beiträge: 22 Registriert: 22.06.2018 Bricscad V17.2.12 Windows 7 64bit
|
erstellt am: 13. Aug. 2018 07:43 <-- editieren / zitieren --> Unities abgeben:
Morgen, der Tipp mit FELDER ist gut! Das könnte man für eigene Blöcke so einbasteln. Der Block von dem ich hier spreche wir aus einem Aufsatzprogramm erzeugt. Dort habe ich leider wenig Möglichkeiten diesen zu verändern. Ich wäre daher doch ganz froh über die "längere Erklärung" Falls es hilft, habe ich den besagten Block mal angehängt. (Am liebsten wäre es mir, wenn man den Text des Attributes einmalig aktualiseren könnte. Eine Lisp zum Anschreiben von Höhen habe ich. Nur steht dann dieser Test "lose" neben dem Block. Falls ich mal einen Block schieben muss, müsste ich den Text ebenfalls mit anpacken) [Diese Nachricht wurde von Rick vs Bricscad am 13. Aug. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 13. Aug. 2018 08:15 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
Einmalig: Dann brauchst du eine Programmierlösung, alos ein Lisp wie dein "Höhen anschreiben", muß dann eben nur erweitert werden. Wer Felder nicht noch für andere Fälle einsetzt in der Datei, kann auch mal nach FIRLEDEVAL schauen (was man so wei so kennen muß wenn man mit Feldern arbeitet) Warum solle man ab und an den falschen Wert ablesen wollen? Sorry, bei sowas bin ich raus. Fall dann noch weiter Interesse an den Feldern besteht: Vorgehen ist abhängig davon ob der Name der Attribute verändert werden darf oder nicht, angenommen er darf: Dann erstelle ich einen Block mit gleichem Namen, jedoch mit anderen Attributnamen für X Y und H, darin als Attributwert die X,Y und Z Wert als Feldausdruck vordefiniert. Hat man dann eine Datei mit den Originalblöcken, die aktuelle Blockdefinition entspricht aber der neuen gepimpten, dann reicht ein ATTSYNC und schon habe ich alle Blockreferenzen mit den aktuellen Werten wie geünscht. Sollte man die Attributnamen nicht verändern dürfen muß man zunächst die drei Attribute löschen und dann ergänzen mit den Feldern als Vorgabewert, bei beiden Vorgängen aktualisiere ich die Attribute der Blockreferenzen mit Attsync. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rick vs Bricscad Mitglied Bautechniker
Beiträge: 22 Registriert: 22.06.2018 Bricscad V17.2.12 Windows 7 64bit
|
erstellt am: 13. Aug. 2018 08:51 <-- editieren / zitieren --> Unities abgeben:
Nein man sollte immer den richtigen Wert ablesen! Da habe ich mich wohl falsch ausgedrückt. Die Idee mit dem Block ändern, in dem man den Text der Höhe durch ein FELD ersetzt finde ich gut. Nur bekomme ich das leider nicht hin. Ich würde hier bei Feldnamen Objekte->Objekt wählen. Anschließend wähle ich das abzufragende Objekt aus. Entweder die Linie des X oder ich setze mir mittig in das X einen Punkt. In beiden Fällen kann ich bei der Blockeigenschaft (Linie, Punkt) keine "Höhe" oder "Position Z" auswählen um mir diese dann ausgeben zu lassen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 13. Aug. 2018 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
Zitat: Original erstellt von Rick vs Bricscad: Anschließend wähle ich das abzufragende Objekt aus. Entweder die Linie des X oder ich setze mir mittig in das X einen Punkt. In beiden Fällen kann ich bei der Blockeigenschaft (Linie, Punkt) keine "Höhe" oder "Position Z" auswählen um mir diese dann ausgeben zu lassen.
Der Schnittpunkt des X ist der Blockbasispunkt, also der Punkt auf den sich später die X,Y,Z Position für die Blockreferenz bezieht, diese(n) kann man sich anzeigen lassen. Wenn du Objekt-Objekt (eine Linie des X) wählst bist du falsch, zwar könntest du den Startpunkt oder den Endpunkt dieser Linie auswählen/Anzeigen, aber die Linie ist ja Teil des Blockes(der Blockdefinition) und diese verändern Ihre Position nie (ist nur einmal in der Datei vorhanden, in der Blockdefinition). Du benötigst: Objekt-Blockplatzhalten, dann werden dir die möglichen Eigenschaften der späteren (oder vorhandenen) Blockreferenzen angeboten, dort findest du dann auch die Eigenschaft "Position".
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rick vs Bricscad Mitglied Bautechniker
Beiträge: 22 Registriert: 22.06.2018 Bricscad V17.2.12 Windows 7 64bit
|
erstellt am: 13. Aug. 2018 09:28 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 BricsCAD V11 - V24 Pro Visual Basic
|
erstellt am: 13. Aug. 2018 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
Hi, Welches Bricscad hast Du denn? Wenn Du mind. Pro hast und VBA installiert ist (geht aber nur bei 32 Bit) könnte ich Dir da einen Code schicken der alle Blockattribute auf einmal ändert. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 BricsCAD V11 - V24 Pro Visual Basic
|
erstellt am: 13. Aug. 2018 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
Ansonsten gäbe es hier Lisp-Lösungen Für Deinen Fall mal die demo.lsp abgeändert: Code:
(vl-load-com) (defun c:Demo (/ attlst i obj pt ss val) (if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "PKT_0") (66 . 1)))) ; <= hier den Blocknamen richtig eintragen (repeat (setq i (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))) pt (vlax-get obj 'InsertionPoint) val (rtos (last pt) 2 3) attlst (vlax-invoke obj 'GetAttributes) ) (foreach a attlst (if (= (vla-get-TagString a) "H") ; <= hier den Attributnamen richtig eintragen (vla-put-TextString a val) ) ) ) ) (princ) )
[Edit]Auf Hinweis von runkelrübe (Danke dafür) falschen Link korrigiert [Diese Nachricht wurde von KlaK am 15. Aug. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
T.Moses Mitglied
Beiträge: 82 Registriert: 16.03.2005 Win10, Core i9-9900k @5.0 GHz, 32 GB Ram, NVidia GT1030
|
erstellt am: 13. Aug. 2018 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
Seit V17 wird VBA sowohl in x86 (32 bit) als auch in x64 (64 bit) Versionen unterstützt Im Ordner ./VBA im BricsCAD-Installations-Ordner sind die 2 VBA Runtime Module, müssen manuell installiert werden (in x86 Windows nur die x86 Runtime, in x64 Windows können beide Runtimes installiert werden). viele Grüsse ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 BricsCAD V11 - V24 Pro Visual Basic
|
erstellt am: 13. Aug. 2018 16:44 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
|
Rick vs Bricscad Mitglied Bautechniker
Beiträge: 22 Registriert: 22.06.2018 Bricscad V17.2.12 Windows 7 64bit
|
erstellt am: 14. Aug. 2018 07:30 <-- editieren / zitieren --> Unities abgeben:
Danke für die zahlreichen Lösungsansätze!! Ich benutze Bricscad Pro V17.2.12 @T.Moses VBA habe ich installiert, danke für die Info, auch wenn ich mit VBA leider leider nicht umgehen kann :-( (Bei mir gab es nur eine Datei zum installieren) @KlaK Ich habe Windows 7 64 bit. Was heißt Demo? Kann man die Lisp nur eingeschränkt nutzen? Ich bin für jede Lösung dankbar die mir da einwenig arbeit abnimmt. Vielen Dank für eure Hilfe!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 14. Aug. 2018 08:07 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
Dann erstelle endlich deine Blockdefinition mit den Feldern, das ist eine sauber "ootb" Lösung die bei jedem, immer, sofort und auch in (Autocad) LT Versionen läuft! Ich bin jetzt zu Faul an eine Brics-Station zu rennen, habe daher mit ACAD2019 das Beispiel erstellt(dwg2013) und dabei angenommen die Attributnamen und Reihenfolge wäre dir egal.
Also Block in deiner eingehenden Datei neu definieren (zB. Befehl EINFÜGE, dann die anhängende Datei wählen), Befehle ATTSYNC auf die Blockreferenzen loslassen, fertig.
[Diese Nachricht wurde von cadffm am 14. Aug. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rick vs Bricscad Mitglied Bautechniker
Beiträge: 22 Registriert: 22.06.2018 Bricscad V17.2.12 Windows 7 64bit
|
erstellt am: 14. Aug. 2018 09:26 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 BricsCAD V11 - V24 Pro Visual Basic
|
erstellt am: 15. Aug. 2018 07:17 <-- editieren / zitieren --> Unities abgeben: Nur für Rick vs Bricscad
Zitat: Original erstellt von Rick vs Bricscad:
@KlaK Ich habe Windows 7 64 bit. Was heißt Demo? Kann man die Lisp nur eingeschränkt nutzen?
Demo ist einfach der Name des Befehls so wie ihn der ursprüngliche Verfasser genannt hat. Wie Du ihn nennen willst bleibt alleine Dir überlassen. Ich habe die Programmsequenz ja nur aus dem obigen Link kopiert und für Deinen Block / Blockattribut angepasst. Die Lisp ist also voll nutzbar. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rick vs Bricscad Mitglied Bautechniker
Beiträge: 22 Registriert: 22.06.2018 Bricscad V17.2.12 Windows 7 64bit
|
erstellt am: 16. Aug. 2018 14:00 <-- editieren / zitieren --> Unities abgeben:
|