| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Neu: ECAD-Anbindung an Cideon Conify - Konfiguration im Maschinenbau zu Ende gedacht, eine Pressemitteilung
|
Autor
|
Thema: Attribute in Blöcken automatisch nummerieren (+1) (12391 mal gelesen)
|
domda0 Mitglied
Beiträge: 149 Registriert: 21.04.2004
|
erstellt am: 23. Mai. 2011 01:18 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wie mein Betreff schon aussagt würde ich gerne ein bestimmtes Attribut in einem von mir erstellten Block, automatisch um +1 hochzählen lassen (von einem durch den User einzugebenden Ausgangswert) Ich hatte vor langer zeit mal ein prog namens blocknumm von rosinino welches genau das erledigte (inkl. präfix und sufix) gibt es etwas ähnlich unter Acad 2012 funktionierendes? Als alternative für meinen jetzigen Anwendungsfall würde auch ein Prog. funktionieren das folgendes kann: Positionsnummern die bereits als Text in einer Ellipse vorhanden sind, in einen Block beim Attribut "Pos_Nr" übergeben Ich tausche eigentlich nur vorh. Texte/Ellipsen durch "intelligentere" Blöcke aus die dann noch zusätzliche Infos aus einer Excel zugewiesen bekommen) Da es sich insgesamt um einige tausend nummern handelt, wäre ich für Ratschläge sehr dankbar. Danke euch, lg dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 23. Mai. 2011 07:37 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
domda0 Mitglied
Beiträge: 149 Registriert: 21.04.2004
|
erstellt am: 23. Mai. 2011 09:21 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium: Kosten-Nutzen-Analyse: Ich soll die erhaltenen Dokumentationen der verschiedenen Gewerke für einen meiner Kunden beaufsichtigen/prüfen(zb. ein Tag für diesen Anwendungsfall) Meinem Kunden sind die Unterlagen auf Papier wichtig, also müsste ich nur auf deren Richtigkeit prüfen. Mir wiederum geht es um eine praktikable Lösung bei Änderungen im laufe der nächsten Jahre, --> alles händisch immer neu zu machen oder ein wenig Automatisation einzuführen. Deswegen will ich den Lieferanten meines Kunden eine Vorlage geben, allerdings kann ich nicht erwarten dass eine fertige Doku ein 2tes mal gemacht wird. Ich wiederum hab eigentlich nur eine "sauberere" Dokumentation welche ich meinem Kunden präsentieren kann. Ich habe ja schon lsp getestet die soetwas (lt. Beschreibung) können sollten allerdings entweder passiert nix oder es kommen Fehlermeldungen. Allerdings waren die lsp's alle vor 2003 weswegen ich auch gefragt habe um die Funktionalität unter 2012 (vielleicht hat ja jemand noch so etwas in Verwendung) lg dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
domda0 Mitglied
Beiträge: 149 Registriert: 21.04.2004 ACAD 2014
|
erstellt am: 24. Mai. 2011 08:56 <-- editieren / zitieren --> Unities abgeben:
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 24. Mai. 2011 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
http://lee-mac.com/numinc.html find das Tool ziehmlich ausgewieft - wenn es das noch für einen Block mit Attr. gebe wäre die Lösung perfekt Ein Ansatz zum durchnummerieren von Polylinien wär das hier: (defun c:bip (/ pl attreq bnam) (princ "\nrita block auf Stützpunkt einer Polylinie") (princ "\nwähle eine Polylinie:") (setq attreq (getvar "ATTREQ") pl (entsel) pl (if pl (entget (car pl))) bnam "" ) (setvar "ATTREQ" 1) (if (and pl (= "LWPOLYLINE" (cdr (assoc 0 pl))) ) (progn (while (not (tblobjname "BLOCK" bnam)) (initget 1) (setq bnam (getstring "\nBlockname: ")) ) (bpk pl bnam) ) (princ "\nKeine Polylinie gewählt!") ) (setvar "ATTREQ" attreq) (princ) ) (defun bpk (pldata bname /) (mapcar '(lambda (D) (if (= 10 (car D)) (command "_.INSERT" bname (cdr D) "" "" "") ) ) pldata ) ) Man müsste allerdings noch die "Nummerier funktion" einbauen. Hat einer eine Idee
[Diese Nachricht wurde von cadplayer am 24. Mai. 2011 editiert.] [Diese Nachricht wurde von cadplayer am 24. Mai. 2011 editiert.] [Diese Nachricht wurde von cadplayer am 24. Mai. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Mai. 2011 18:26 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 25. Mai. 2011 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 04. Aug. 2011 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
zum automatischen Nummerieren von Blockattributen habe ich hier etwas probiert (DEFUN C:NU ( / N) (setvar "CMDECHO" 1) (setq N (getint "\nEnter beginning number <1>: ")) (if (= N nil) (setq N 1)) (while N (progn (COMMAND "_INSERT" "NUM" "ins" PAUSE "1.0" "1.0" "0" N "" ) (setq N (+ 1 N)) ) ) (princ) ) Mir wird zwar der Block eingefügt, aber immer erst beim zweiten Mal Klicken und ohne die Nummer raufzuzählen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002 Autocad 2020/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 16,0GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2019
|
erstellt am: 04. Aug. 2011 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 04. Aug. 2011 13:18 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 04. Aug. 2011 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
Danke ... ist besser als ich es wollte. Kennst Du vielleicht eine Routine, die es ermöglicht die Stützpunkte einer Polylinie durchzunummerieren nur durch anklicken der Polylinie? Ich glaube C3D hat so was eingebaut oder? Habe gerade gesehen C3D hat es: _AeccCreatePoints, gibts das auch als Lisp? [Diese Nachricht wurde von cadplayer am 04. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 04. Aug. 2011 13:53 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
du musst dich nur durch die Entityliste hangeln und den gc10 abfragen und deine wasauchimmer absetzen/machen/hochzählen... Code: (defun vertxt (ent / entlst points) (setq entlst (entget ent) points '() ) (if (= (cdr (assoc 0 entlst)) "LWPOLYLINE") (foreach gcpair entlst (cond ((= (car gcpair) 10) (setq points (cons (cdr gcpair) points))) (t nil) ) ) ) points ) ;Aufruf mit (vertxt (car(entsel)))
Edit: Rückgabewert sollten die Stützpunkte sein, alle in einer Liste - ohne gewähr ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." [Diese Nachricht wurde von Dorfy am 04. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 04. Aug. 2011 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
Mir fehlt die Erfahrung deine Zeilen nachvollziehen zu können, da du kaum Variablen einsetzt - nur die Nötigsten (ist ja auch gut so) (setq entlst (entget ent); wirft ein entity in die var entlst points '(); was wird mit der var gemacht? (if (= (cdr (assoc 0 entlst)) "LWPOLYLINE"); prüft ob das entity eine LWPOLYLINE ist (foreach gcpair entlst; arbeitet die Liste gcpair ab und dann ? (cond ((= (car gcpair) 10) (setq points (cons (cdr gcpair) points))); schreibt die GC10 in die var Points
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 04. Aug. 2011 15:23 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
Code: Code: (defun vertxt (ent / entlst points) ;ein entity name wird übergeben (setq entlst (entget ent);Liste der entity definition data points '() ;leere Liste ) (if (= (cdr (assoc 0 entlst)) "LWPOLYLINE") ;prüfen ob es eine lwp ist (foreach gcpair entlst ;für jeden gc mache --> (cond ;Abfrageschleife ((= (car gcpair) 10);wenn der gc 10 ist mache --> (setq points (cons (cdr gcpair) points)));zur Liste points - den zum gc10 zugehörigen Wert hinzufügen - sollte je ein Stützpunkt sein (t nil);da streiten sich die geister ;), bei mir bleibt es drin ) ) ) points ;wirft die Liste der Punkte aus - Rückgabewert der subfunktion ) ;Aufruf mit (vertxt (car(entsel)));sub aufrufen und den entity name übergeben
... aber im RuA-Brett sind wir hier nicht ganz richtig ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 04. Aug. 2011 15:31 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002 Autocad 2020/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 16,0GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2019
|
erstellt am: 04. Aug. 2011 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 Kinder, kauft Kämme! Es kommen lausige Zeiten.
|
erstellt am: 04. Aug. 2011 15:38 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002 Autocad 2020/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 16,0GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2019
|
erstellt am: 04. Aug. 2011 20:32 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 04. Aug. 2011 20:43 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 Kinder, kauft Kämme! Es kommen lausige Zeiten.
|
erstellt am: 04. Aug. 2011 20:43 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002 Autocad 2020/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 16,0GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2019
|
erstellt am: 04. Aug. 2011 20:53 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 Kinder, kauft Kämme! Es kommen lausige Zeiten.
|
erstellt am: 04. Aug. 2011 20:54 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 23. Aug. 2011 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
Der Weg zum Ziel ist nicht mehr lang ...denke ich, um Blöcke mit Attributen auf die Stützpunkte einer Polylinie zu setzen Nun habe ich die Frage, wie kann ich aus dieser Liste ((299.969 152.035) (292.107 142.49) (279.818 151.686) (258.968 141.675)) die Einfügepunkte für die Blöcke erstellen?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 23. Aug. 2011 13:49 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
Zitat: Original erstellt von cadplayer: Der Weg zum Ziel ist nicht mehr lang ...denke ich, um Blöcke mit Attributen auf die Stützpunkte einer Polylinie zu setzenNun habe ich die Frage, wie kann ich aus dieser Liste ((299.969 152.035) (292.107 142.49) (279.818 151.686) (258.968 141.675)) die Einfügepunkte für die Blöcke erstellen?
Diese Liste, dass sind die Koordinaten? (foreach x ((299.969 152.035) (292.107 142.49) (279.818 151.686) (258.968 141.675)) (COMMAND "_INSERT" "DeinBlock" x .... ))
------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 23. Aug. 2011 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
(foreach gcpair entlst (cond ((= (car gcpair) 10) (setq points (cons (cdr gcpair) points)) (command "insert" "koordinatpunkt" gcpair "" 1 1 0 "")) die Koordinatenliste stehen doch in POINTS, warum setzt mir es dann Blöcke wenn ich GSPAIR eingebe? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 23. Aug. 2011 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
weil dein gcpair die "Bedingungen" erfüllt... nur sind es nicht die richtigen Koordinaten (10 35.5 22.7) 10 der gc wird zu X ist immer 10 (wenn deine Klammern passen) 35.5 X wird zu Y 22.7 Y wird zu Z aber mit (cdr gcpair) könnte es gehen ;-) (command "insert" "koordinatpunkt" (cdr gcpair) "" 1 1 0 "")) ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 23. Aug. 2011 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
Super danke (setq NUM (getreal "Zahl eingeben:") I -1) (setq ent (car (entsel))) (setq entlst (entget ent) points '() ) (if (= (cdr (assoc 0 entlst)) "LWPOLYLINE") (foreach gcpair entlst (cond ((= (car gcpair) 10) (command "insert" "koordinatpunkt" (cdr gcpair) NUM "" 1 1 0 )) ) ) ) Die Koordinatenliste wir am Stück erstellt, wie kann ich da noch eine fortlaufende Nummer (NUM) ins Attribut einfügen lassen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 23. Aug. 2011 15:49 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
Zitat: Original erstellt von cadplayer: ...Die Koordinatenliste wir am Stück erstellt, wie kann ich da noch eine fortlaufende Nummer (NUM) ins Attribut einfügen lassen
Welche Koordinatenliste? Du setzt gleich deine Blöcke ab... (cond ((= (car gcpair) 10) (setq num (1+ num));vor der Schleife 1 abziehen (command ...... Ps: du bist hier immernoch im RuA und nicht Lisp-Brett ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 23. Aug. 2011 16:04 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
Danke geht einwandfrei... Ich wollte den thread nicht erst neu schreiben, ist natürlich hier fehl am Platz Wenn ich die Autonummer mit 1 eingebe, zählen die Attributnummern schon mit 2 los, musste deshalb noch (setq num (getreal "Zahl eingeben:") num (- num 1)) anpassen, warum ist das so? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 23. Aug. 2011 16:42 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
hab ich doch geschrieben (setq num (1+ num)) ;vor der Schleife 1 abziehen weil wir innerhalb einer Schleife hochzählen 1+ somit wird auch der Startwert mit 1 beaufschlagt, deshalb im Vorfeld 1 abziehen oder anders proggen Edit: (setq num (1+ num)) hinter der command-Zeile ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." [Diese Nachricht wurde von Dorfy am 23. Aug. 2011 editiert.] [Diese Nachricht wurde von Dorfy am 23. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 24. Aug. 2011 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für domda0
|