| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Versetz Befehl modifizieren ??? (2391 mal gelesen)
|
jukni Mitglied Techniker
Beiträge: 175 Registriert: 28.03.2002
|
erstellt am: 19. Jan. 2005 10:03 <-- editieren / zitieren --> Unities abgeben:
Hallo. Ich suche eine Lisp Datei, die wie der Versetz Befehl bei Autocad funktioniert. Das versetzte Objekt soll aber abweichend vom Originalbefehl die oben eingestellten Objekteigenschaften wie - Layername, Farbe und Linientyp annehmen. Hat jemand eine Lösung ? Vielen Dank Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 19. Jan. 2005 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
Wieweit bist du denn mit deinen Programmierkünsten? Wo soll konkret geholfen werden? Zum "Suchen" gibts u.a. die Forumssuche oder google! Oder hab ich dich jetzt falsch interpretiert ? Ansonsten : (defun c ffset2( / OBJ VLAOBJ F) (command "_offset" PAUSE PAUSE PAUSE PAUSE) (setq OBJ(entlast)) (setq VLAOBJ(vlax-ename->vla-object OBJ)) (vla-put-layer VLAOBJ (getvar "CLAYER")) (vla-put-linetype VLAOBJ (getvar "CELTYPE")) (vla-put-LinetypeScale VLAOBJ (getvar "CELTSCALE")) (setq F (getvar "CECOLOR")) (cond ((and(=(type F)'STR)(=(strcase F)"BYLAYER")) (vla-put-color VLAOBJ acbyLayer)) ((and(=(type F)'STR)(=(strcase F)"BYBLOCK")) (vla-put-color VLAOBJ acbyBlock)) ('T (vla-put-color VLAOBJ F)) ) (setq F (getvar "CELWEIGHT")) (cond ((and(=(type F)'STR)(=(strcase F)"BYLAYER")) (vla-put-lineweight VLAOBJ acLnWtByLayer)) ((and(=(type F)'STR)(=(strcase F)"BYBLOCK")) (vla-put-lineweight VLAOBJ acLnWtByBlock)) ('T (vla-put-lineweight VLAOBJ (getvar "CELWEIGHT"))) ) ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." [Diese Nachricht wurde von CADmium am 19. Jan. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad4fun Ehrenmitglied
Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
|
erstellt am: 20. Jan. 2005 13:05 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 20. Jan. 2005 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
ja! weil ich nur (entlast) abfrage und nicht vor dem Versetzen einen "Merker" setze und alle neuen Elemente die entsprechenden Eigenschaften zuordne! Es müssen doch nicht immer Komplettlösungen sein,oder? Und das eventuelle "wie" ist doch erkennbar! ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 20. Jan. 2005 13:27 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
|
berndhock Mitglied Holztechniker
Beiträge: 35 Registriert: 07.03.2003 AutoCAD2004 und 2005 3,20 gigahertz Intel Pentium 4 1022 Megabytes Installed Memory Matrox Parhelia 128MB
|
erstellt am: 26. Jan. 2005 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
|
jukni Mitglied Techniker
Beiträge: 175 Registriert: 28.03.2002
|
erstellt am: 26. Jan. 2005 12:20 <-- editieren / zitieren --> Unities abgeben:
|
cad4fun Ehrenmitglied
Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
|
erstellt am: 26. Jan. 2005 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
stell die datei in das verzeichnis, indem die LISP-Routinen abgelegt sind und lade sie beim start von ACAD automatisch(startup.lsp). damit funktioniert der OFFSET(VERSETZ)-Befehl wie gewünscht, dass die neuen Objekte die gerade aktuellen einstellungen bekommen. Nach jedem objekt musst Du allerdings aus dem befehl raus und den befehl neu starten. Ist ein schönheitsfehler, aber dafür gratis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
berndhock Mitglied Holztechniker
Beiträge: 35 Registriert: 07.03.2003 AutoCAD2004 und 2005 3,20 gigahertz Intel Pentium 4 1022 Megabytes Installed Memory Matrox Parhelia 128MB
|
erstellt am: 26. Jan. 2005 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
Zitat: Original erstellt von cad4fun: stell die datei in das verzeichnis, indem die LISP-Routinen abgelegt sind und lade sie beim start von ACAD automatisch(startup.lsp). damit funktioniert der OFFSET(VERSETZ)-Befehl wie gewünscht, dass die neuen Objekte die gerade aktuellen einstellungen bekommen. Nach jedem objekt musst Du allerdings aus dem befehl raus und den befehl neu starten. Ist ein schönheitsfehler, aber dafür gratis
Stimmt nicht dass Du aus dem Befehl raus musst du kanns versetzen so viel Du wills wenn du den Befehl beendest bekommen alle versetzten Objekte die Eigenschaft!!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jukni Mitglied Techniker
Beiträge: 175 Registriert: 28.03.2002
|
erstellt am: 26. Jan. 2005 14:05 <-- editieren / zitieren --> Unities abgeben:
Hallo. Vielen Dank. Die Funktion läüft nun. Jedoch noch nicht ganz richtig. Es wird zwar der Layer wie eingestellt übernommen jedoch nicht die oben neu eingestellte Farbe und der Linientyp. Beispiel: Die urspügliche Linie war Layer:Kante ; Farbe:rot ; Linientyp:Mitte. Soll werden nach dem versetzen Layer:Ecke ; Farbe gelb ; Linientyp:continuous. Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad4fun Ehrenmitglied
Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
|
erstellt am: 26. Jan. 2005 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
Zitat: Original erstellt von berndhock: Stimmt nicht dass Du aus dem Befehl raus musst du kanns versetzen so viel Du wills wenn du den Befehl beendest bekommen alle versetzten Objekte die Eigenschaft!!
weiss nicht wieso, beim ersten testen ging's nur einmal. jetzt funktioniert es einwandfrei. 10U's for you(ist kein einstieg in englische fragen und anrworten!!!) @jukni: wie gesagt, funktioniert einwandfrei, muss ein anderes problem sein Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3701 Registriert: 15.10.2003 Win 10/64 Pro AutoCAD MAP 3D 2018 BricsCAD 22
|
erstellt am: 26. Jan. 2005 15:15 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 26. Jan. 2005 21:14 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
|
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001 Autocad 2005-2010 Microstation V8 Photoshop CS4 + Camera Raw Nikon Capture NX2 Nikon D90
|
erstellt am: 27. Jan. 2005 15:56 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
Zitat:
Ich suche eine Lisp Datei, die wie der Versetz Befehl bei Autocad funktioniert. Das versetzte Objekt soll aber abweichend vom Originalbefehl die oben eingestellten Objekteigenschaften wie - Layername, Farbe und Linientyp annehmen.Hat jemand eine Lösung ?
Ja, da ich so ein "Offseter" bin, habe ich mir dazu was geschrieben. Ich habe es für meine Zwecke so programmiert, daß der Abstand nach jedem versetzten Objekt erneut abgefragt wird. Weiterhin wird mit diesem Programm auch der aktuelle Linientypfaktor ausgelesen und auf das neue Objekt angewendet. TrueColor-Farben sowie Farbücher kann dieses Tool noch nicht umsetzen. Code:
;;; Autor Rolf "Benwisch" Wischnewski ;;; 08/04, 01/05 ;;; Aufruf aus Autocad : BW_Offset (defun c:bw_offset (/ entity) ;; Markierung für "Zurück zur Marke" (command "_UNDO" "_mark") ;; Beginn Schleife (while ((lambda () ;; Systemvariable für den allg. offsetabstand (setvar "offsetdist" (cond ((getdist (strcat "\nAbstand angeben oder durch Punkte bestimmen <" (rtos (getvar "offsetdist")) "> " ) ) ) ((getvar "offsetdist")) ) ) (setq entity (entsel "\nBitte Objekt auswählen und Punkt auf Seite angeben, auf die versetzt werden soll (Return = Ende) " ) ) ) );; Rückgabe durch setq ggf. nil, falls kein Objekt gewählt wurde, ;; was wiederum bedeutet, da der Lambda-Ausdruck ein NIL zurückgibt und ;; zum verlassen der While-Schleife führt. (command "_offset" "" entity pause "") (entmod (append ;; Entferne "alte" Assoc-Werte... (vl-remove-if (function (lambda (pair) (member (car pair) '(8 62 6 370 48))) ) ;; ...vom dem zuletzt erstellten Objekt (durch command)... (entget (entlast)) ) ;; ... und hänge neue Assoc.-Liste mit den aktuellen Dropdownwerten an (mapcar (function (lambda (pair / color) (cond ((= 62 (car pair)) ;_ Prüfe Farbwert (if (= "BYLAYER" (setq color (strcase (getvar (cdr pair)))) ) (cons 62 256) ;_ "ByLayer" umwandeln... (cons 62 (atoi color)) ;_ sonst in Integer umwandeln, wobei "ByBlock" zu 0 wird ! ) ) ('else (cons (car pair) (getvar (cdr pair)))) ) ) ) '((8 . "clayer") (62 . "cecolor") (6 . "celtype") (370 . "celweight") (48 . "celtscale") ) ) ) ) ) (princ "\nMit [Zurück->Rück] können alle eben erstellten Objekte wieder gelöscht werden." ) (prin1) ) (prin1)
------------------ http://www.benwisch.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jukni Mitglied Techniker
Beiträge: 175 Registriert: 28.03.2002
|
erstellt am: 28. Jan. 2005 07:57 <-- editieren / zitieren --> Unities abgeben:
|
jukni Mitglied Techniker
Beiträge: 175 Registriert: 28.03.2002
|
erstellt am: 28. Jan. 2005 11:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Benwisch. Das Makro funktioniert für mich sehr gut. Einen Kollegen stört jedoch noch eine Kleinigkeit. Er muss nach dem Versetzen den Versatz nochmal bestätigen. Kann man das noch ändern?? So wie im Originalbefehl. Danke. m.f.G Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad4fun Ehrenmitglied
Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
|
erstellt am: 28. Jan. 2005 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
Zitat: Original erstellt von jukni:
Einen Kollegen stört jedoch noch eine Kleinigkeit. Er muss nach dem Versetzen den Versatz nochmal bestätigen.
dann spiel Dir doch die offset_layer.vlx drauf, dann funktioniert der normale ACAD-Offset-befehl nach deinen wünschen. nie wieder nachdenken müssen über offset und welche routine muss ich jetzt starten!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 28. Jan. 2005 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
Nur so als Denkanstoss vielleicht ein ganz anderer Ansatz. Wenn der Versetz-Befehl immer so funktionieren soll, könnte man das mit einem Command-will-start und Command-Ended Reaktor machen Im command-will-start reaktor das letzte element merken, und im Command-ended (auch im cancelled) alle neu erstellten Objekte (wenn es der befehl versetz war) auf aktuellem Layer usw setzten. ------------------ WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 28. Jan. 2005 13:29 <-- editieren / zitieren --> Unities abgeben: Nur für jukni
Zitat: Original erstellt von jukni: Einen Kollegen stört jedoch noch eine Kleinigkeit. Er muss nach dem Versetzen den Versatz nochmal bestätigen.
Habe ich ja geschrieben, daß ich jedesmal eine neues Versatzmaß angeben kann. Mich stört das Return-drücken nicht. Hier die geänderte Fassung... Code:
;;; Autor Rolf "Benwisch" Wischnewski ;;; 08/04, 01/05 ;;; Aufruf aus Autocad : BW_Offset (defun c:bw_offset (/ entity) ;; Markierung für "Zurück zur Marke" (command "_UNDO" "_mark") ;; einmaliges abfragen des Versatzmaßes... ;; Systemvariable für den allg. offsetabstand (setvar "offsetdist" (cond ((getdist (strcat "\nAbstand angeben oder durch Punkte bestimmen <" (rtos (getvar "offsetdist")) "> " ) ) ) ((getvar "offsetdist")) ) ) ;; Beginn Schleife (while (setq entity (entsel "\nBitte Objekt auswählen und Punkt auf Seite angeben, auf die versetzt werden soll (Return = Ende) " ) ) ;; Rückgabe durch setq ggf. nil, falls kein Objekt gewählt wurde, ;; was wiederum bedeutet, da der Lambda-Ausdruck ein NIL zurückgibt und ;; zum verlassen der While-Schleife führt. (command "_offset" "" entity pause "") (entmod (append ;; Entferne "alte" Assoc-Werte... (vl-remove-if (function (lambda (pair) (member (car pair) '(8 62 6 370 48))) ) ;; ...vom dem zuletzt erstellten Objekt (durch command)... (entget (entlast)) ) ;; ... und hänge neue Assoc.-Liste mit den aktuellen Dropdownwerten an (mapcar (function (lambda (pair / color) (cond ((= 62 (car pair)) ;_ Prüfe Farbwert (if (= "BYLAYER" (setq color (strcase (getvar (cdr pair)))) ) (cons 62 256) ;_ "ByLayer" umwandeln... (cons 62 (atoi color)) ;_ sonst in Integer umwandeln, wobei "ByBlock" zu 0 wird ! ) ) ('else (cons (car pair) (getvar (cdr pair)))) ) ) ) '((8 . "clayer") (62 . "cecolor") (6 . "celtype") (370 . "celweight") (48 . "celtscale") ) ) ) ) ) (princ "\nMit [Zurück->Rück] können alle eben erstellten Objekte wieder gelöscht werden." ) (prin1) ) (prin1)
Zitat:
dann spiel Dir doch die offset_layer.vlx drauf, dann funktioniert der normale ACAD-Offset-befehl nach deinen wünschen. nie wieder nachdenken müssen über offset und welche routine muss ich jetzt starten!!
@cad4fun Dieses Tool legt die Objekte auf einen Layer, verändert dabei aber nicht die anderen Werte, was ja durchaus für viele interessanter ist. [Diese Nachricht wurde von benwisch am 28. Jan. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jukni Mitglied Techniker
Beiträge: 175 Registriert: 28.03.2002
|
erstellt am: 28. Jan. 2005 13:34 <-- editieren / zitieren --> Unities abgeben:
|