| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Bemaßung (Überschreibung) (2361 mal gelesen)
|
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 03. Mrz. 2004 07:37 <-- editieren / zitieren --> Unities abgeben:
Hallo, hat da ein Webfund und wollte diesen etwas meinen Wünschen entsprechend anpassen. Code:
; Dim2asoc.Lsp - This routine changes all ASSOCIATIVE dimensions ; that have had their values changed by the user ; and resets them all to their default values. ; Warning - works on all layers, whether frozen or not. ; (defun c:dim2asoc( / ss e ent n spin c ) (defun spin( c ) (cond ((= c "|") "/") ((= c "/") "-") ((= c "-") "\\") ((= c "\\") "|") ) ) (if (and (setq ss (ssget "x" '((0 . "dimension")))) (progn (initget "Yes No") (= "Yes" (getkword "\nThis function will convert ALL dimensions to their default values. \nContinue? Yes/<No>: ")) ) ) (progn (princ (strcat "\n" (itoa (sslength ss)) " Dimensions to update")) (setq n -1 c "|") (princ "\nModifing dimension entity definitions |") (while (setq e (ssname ss (setq n (1+ n)))) (princ (chr 8))(princ (setq c (spin c))) (entmod (list (cons -1 e) (cons 1 ""))) ) ) ;else (princ "\nNo dimensions to update") ) (princ) )
Wollte dass die Überschreibung PREFIX <> SUFFIX entsprechend in die dafür vorgesehenen Felder innerhalb des Bemassungsobjektes übertragen wird. Momentan werden diese einfach gelöscht . Kann mir da einer einen Tipp geben, wie mit dem "<>" am einfachsten verfahren werden kann ? So nach der Logik: wenn <> = memeber in der bemassungszahl dann: String vor dem <> in der Prefix, Alles nach dem <> in den Suffix und natürlich <> löschen damit diese nicht als eine überschriebene Bemassung erkannt wird. ------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Mrz. 2004 08:00 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 03. Mrz. 2004 09:03 <-- editieren / zitieren --> Unities abgeben:
ich habe viele Zeichnungen mit über 1000 Bemassungen auf unterschiedlichen Layern unterschiedliche Bem-Styles, usw. usw (teilweise mit echt doofen Überschreibungen). Will mit einem Klick feststellen und konvertieren mit folgenden Regeln: 1. Wenn innerhab der Bemassungzahl vor dem <>-Zeichen ein String existiert dann setz diesen Wert als Bemassungszahlpräfix. 2. Wenn innerhalb der Bemassungszahl nach dem <>-Zeichen ein String existiert dann schiebe diesen Wert als Bemassungszahlsuffix 3. Entferne das <>-Zeichen aus der Bemassungszahl 4. Wenn kein <>-Zeichen in der Bemassungszahl existiert dann soll die Bemassungszahl nicht verarbeitet werden. ------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Mrz. 2004 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
(Beispiel an Linearer Bemaßung) Ich verstehe den Wunsch nicht... also Wenn du am Screen als Maßtext siehst: Wer 12.55 dann ist der gc 1 genutzt und sieht so aus: (1 . "Wer <>") oder andersherum: / 12.55 Wer = (1 . "<> Wer") Wenn ich dich nun richtig verstehe (was ich wohl nicht tue) dann möchtest du eigentlich den Wert von "<>" als Text hinzufügen !? Also so das sich am Screen selbst nix verändert !? nochmal an einem komplexeren Beispiel: BemStil= Präfix "Prä" und Suffix "suff" - die Lineare Bem. hat den eigentlichen Maß-Wert von 12.55 Am Screen Im gc1 Im gc1 nacher prä12.55suff "" "prä12.55suff" XY prä12.55suff XY <> XY prä12.55suff ?? - Ich frage mich nur wozu ?? Zumal man dann ja auch eine Maßtextüberschreibung sieht !!? Bin ich zu blöd oder wie meinst du das : "damit diese nicht als eine überschriebene Bemassung erkannt wird"
------------------ - Sebastian Mattis - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 03. Mrz. 2004 10:13 <-- editieren / zitieren --> Unities abgeben:
Also doch nicht so ganz verstanden. Wie am Screenshot gezeigt (Rote Pfeile) sollen die Werte in die Bemassungsfelder (Prefix und Suffix) übertragen werden wenn das <>-Zeichen vorhanden ist, danach soll es gelöscht/entfernt werden, damit die echte Maßzahl sichtbar wird. Wenn es jedoch nicht vorhanden ist (screenshot n° 1) soll die Bemassung nicht modifiziert werden. ------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Mrz. 2004 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
Hast du nur ein Bemaßungsobjekt pro Stil oder was ? - der Prä+Suffix kommt aus dem BemStil und würde sich doch somit auf alle Bem.Objekte die diesen Stil nutzen übertragen ! wundere mich nur gerade...?? ------------------ - Sebastian Mattis - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 03. Mrz. 2004 10:36 <-- editieren / zitieren --> Unities abgeben:
leider ist die Struktur so angelegt BTW die Verzwiegung für Masszahllose Bemassung, somit eigentlich ein MText mit Pfeilen ist:
Code:
(if (and(not(wcmatch DIM-TXT "*<>*"))(/= DIM-TXT "")) (if (not OVERRIDEN) (setq OVERRIDEN(ssadd (ssname SS IDX))) (setq OVERRIDEN(ssadd (ssname SS IDX) OVERRIDEN)) ) )
------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Mrz. 2004 10:54 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
@cadffm Zitat.. der Prä+Suffix kommt aus dem BemStil und würde sich doch somit auf alle Bem.Objekte die diesen Stil nutzen übertragen ! ... stimmt nicht ganz : Die Einstellungen aus dem Bemassungsstil können im Bemassungsobjekt überschrieben werden! Die Überschreibungen finden sich in den Xdata ab GC1000... Anbei mal eine Funktion , die das Setzen von Prä und Suffix übernimmt (defun BEM_SET_PRAESUFF (OBJEKT PRAEFIX SUFFIX / ) (if (and (=(type OBJEKT) 'ENAME) (=(cdr(assoc 0 (entget OBJEKT))) "DIMENSION") (=(type PRAEFIX) 'STR)(=(type SUFFIX) 'STR) ) (progn (setq VLA-OBJEKT (vlax-ename->vla-object OBJEKT)) (vlax-put-Property VLA-OBJEKT 'TextPrefix PRAEFIX) (vlax-put-Property VLA-OBJEKT 'TextSuffix SUFFIX) ) ) ) Aufruf z.B. mit (bem_set_praesuff (car(entsel)) "VOR" "NACH") ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 03. Mrz. 2004 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
Hi, die Aufgabe an sich war halbwegs präzisiert - die Lösung ist auch einfach: Code:
; Hilfsfunktion, wird benötigt, um auf "<>" zu testen (defun str-pos(str c / i l ls lc) (setq i 1) (setq ls(strlen str)) (setq lc(strlen c)) (setq l(1+(- ls lc))) (while(and(<= i l)(/=(substr str i lc)c)) (setq i(1+ i)) ) (if(<= i l)i) ); Hauptfunktion, führt Korrektur an einer Bemaßung durch (defun bem-korrektur(ent / data ovrtext) (setq ovrtext(cdr(assoc 1(setq data(entget ent))))) (if(str-pos ovrtext "<>") (progn (entmod(subst'(1 . "")(assoc 1 data)data)) (command"_dimoverride""dimpost"ovrtext""ent"") ) ) ) ; Beispiel für ein Benutzer-Interface (defun c:bem-korrektur( / ) (bem-korrektur(car(entsel"Bemaßung für Korrektur wählen: "))) )
Jetzt kommt aber das dicke ABER: Natürlich bibt es keine 'zwei Felder' in dem Sinne - es gibt keinen Gruppencode nnn für den Präfix und einen Gruppencode mmm für den Suffix/Postfix. Es gibt nur die SysVar 'dimpost', die genau diesen Inhalt 'XXX<>YYY' haben muss. Die wird aber normalerweise über den Bemstil verwaltet. Wenn präfix und suffix bei all deinen Variablen gleich sind, solltest du also am Bemstil ansetzen. Sind die Prä- und Suffixe überall verschieden, bleibt nur, ein dimoverride zu verwenden. Genau das tut meine Routine - sie überträgt also nur den Wert des GC 1 in die EEDs. Ich hab's der Einfachkeit halber mit command gemacht. Du musst aber genau aufpassen, was du tust: Ein evtl. schon vorher vorhandener Override von dimpost ist dann natürlich weg;-) Wie immer ist der Code kein fertiges Programm, sondern nur (funktionsfähiger) Ansatz: Errorhandling fehlt völlig. Gruß, mapcar ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 03. Mrz. 2004 12:31 <-- editieren / zitieren --> Unities abgeben:
1a, klappt wunderbar mit Axels-Lispcode, ich poste dann in der nahen Zukunft meine Ergebnisse. ------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 07. Mrz. 2004 21:10 <-- editieren / zitieren --> Unities abgeben:
BTW . wie kann ich eigentlich sauber den Wert aus (setq DIM-TXT-REAL (cdr (assoc 42 E1))) mit dem aus den GC 1 einer (einzelenen) Bemassung überprüfen mit Berücksichtung der Bemassungsgenauigkeit einer einzigen Bemassung ? Hab da keine Logik für GC(41) != GC(1) gefunden, da die Genaugkeit nicht im Objekt selber gespeichter zu sein scheint. ------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi L Mitglied
Beiträge: 8 Registriert: 27.11.2003 ACAD 2002
|
erstellt am: 07. Mrz. 2004 22:06 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
Hi Proxy Bin gerade selber beim Bemassung basteln... Die Genauigkeit (wie auch alle anderen Bem-Varíablen) ist entweder im Stil, oder als EED im Bemassungsobjekt gespeichert. Wenn kein entsprechndes EED am Bemassungsobjekt hängt, dann ist diese Bemassungsvariable nicht überschrieben -> Wert ist im Stil zu suchen. Die EED (wenn vorhanden) bekommst Du mit (entget <ename> '("ACAD")). Den Stil kannst Du einfach mit (tblsearch "DIMSTYLE" "<stilname>") auslesen. Die Anzeigegenauigkeit (DIMDEC) ist GC271 zugeordnet. Vielleicht hilft Dir folgender Code weiter. Ich weiß aber nicht ob die beiden Funktionen wasserdicht sind, da ich mich selbst erst in die Thematik einarbeite. (Ist aber bestimmt besser als gar nichts.) Code: ;;;------------------------------------------------------ ;;; Gibt die EED (nur DSTYLE Gruppe) eines Bemassungsobjekts zurück ;;; Argumente: ENAME - Ename oder dxf-list ;;; Rückgabe: Assoc-Liste - wenn EED vorhanden, sonst 'nil ;;;------------------------------------------------------ (defun dim_get_eed (ename / eed_list eed_dstyle_list item) (if (not (= 'ename (type ename))) (setq ename (cdr (assoc -1 ename))) ) ;; EED-Liste ab '(1002 . "{") auslesen (setq eed_list (cdr (member '(1000 . "DSTYLE") (cadr (assoc -3 (entget ename '("ACAD")))) ) ) ) (if eed_list ;; DSTYLE Gruppe isolieren (progn (while (not (equal '(1002 . "}") (setq item (car (setq eed_list (cdr eed_list)))) ) ) (setq eed_dstyle_list (cons item eed_dstyle_list)) ) (reverse eed_dstyle_list) ) ) ) ;;;------------------------------------------------------ ;;; Gibt die Bemassungsvariable eines Bemassungsobjekts zurück ;;; Argumente: ENAME - Ename des Objekts ;;; DXF - DXF-Code der Variable ;;;------------------------------------------------------ (defun dim_get_value (ename dxf / eed) (if (setq eed (member (cons 1070 dxf) (dim_get_eed ename))) ;; Wenn Wert Überschrieben (cdadr eed) ;; Wenn Wert im Stil gespeichert (cdr (assoc dxf (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget ename)))) ) ) ) ) Grüße Andi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Mrz. 2004 22:17 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
mit VLISP gehts meiner Meinung nach etwas konfortabler.. gib mal ein : (vl-load-com) (if(setq AUSWAHL (ssget '((0 . "DIMENSION")))) (progn (setq VLA-DIMENSION (vlax-ename->vla-object (ssname AUSWAHL 0))) (vlax-dump-object VLA-DIMENSION) ) ) Hiermit kannst du die alle Eigenschaften einer Bemaßung mal auflisten lassen : unter anderem... "Measurement" ist der gemessene Wert, der wird mit "Linearscalefactor" multipliziert, das Produkt wir auf ein Vielfaches von Rounddistance gerundet. Die anschließende Konvertierung in den Maßzahlstring wird von Unitsformat,PrimaryUnitsPrecision usw. beeinflußt. Gucks dir mal an.....
------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |