| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: objekte einfrieren (1491 mal gelesen)
|
don max Mitglied architekt
Beiträge: 48 Registriert: 23.02.2004 Windows 2000, A-Cad 2000 (spanisch)
|
erstellt am: 31. Mai. 2004 14:27 <-- editieren / zitieren --> Unities abgeben:
hallo alle zusammen, ich hab irgendwo im web ein lisp gefunden, mit dem man objekte durch anpicken frieren kann. da es auf meiner spanischen acad-version nicht lief hab ich es schon mal umgebaut. leider funktioniert jedoch nur der teil, der für das einfrieren zuständig ist (c:X-LOCK). das auftauen und auf den uhrsprungslayer zurücksetzen hakt allerdings. vielleicht könnt ihr mir ja helfen. gruss markus ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
whf_muc Mitglied Techniker
Beiträge: 270 Registriert: 22.05.2004 Fujitsu Celsius M770, Xeon 2125, 4,0 GHz, 32 GB RAM, Quadro P2000, Windoof 10 Pro for Workstations - div. liNear Haustechnik Aufsätze - Autocad 2022/2023
|
erstellt am: 31. Mai. 2004 19:37 <-- editieren / zitieren --> Unities abgeben: Nur für don max
|
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, Monitore, ...
|
erstellt am: 31. Mai. 2004 20:30 <-- editieren / zitieren --> Unities abgeben: Nur für don max
Alternative: Code:
;;;---------------------------------------------------------------------------; ;;; ;;; BLANK.LSP Version 1.0 ;;; ;;; Copyright (C) 1995 by Autodesk, Inc. ;;; ;;; Permission to use, copy, modify, and distribute this software and its ;;; documentation for any purpose and without fee is hereby granted. ;;; ;;; THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ;;; ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF ;;; MERCHANTABILITY ARE HEREBY DISCLAIMED. ;;; ;;;---------------------------------------------------------------------------; ;;; BLANK, UNBLANK, and UNBLANKALL ;;; ;;; This module provides functions to manipulate the visibility field of ;;; AutoCAD objects. BLANK will make a selection set of objects invisible. ;;; UNBLANK will make a specified object (given its handle) visible. ;;; UNBLANKALL will make all blanked entities visible. ;;; ;;;---------------------------------------------------------------------------; ;;;---------------------------------------------------------------------------; ;;; Internal error handling. ;;;---------------------------------------------------------------------------; (defun blank_error(s) ;; The strings in the following statements can be translated. (if (/= s ;|MSG1|;"Function cancelled") (princ (strcat ;|MSG2|;"\nBLANK Error: " s)) ) (setq *error* olderr) (princ) )
(defun unblank_error(s) ;; The strings in the following statements can be translated. (if (/= s ;|MSG3|;"Function cancelled") (princ (strcat ;|MSG3|;"\nUNBLANK Error: " s)) ) (setq *error* olderr) (princ) ) (defun blank60 (e / e2) (if (not (null (assoc '60 e))) (setq e2 (subst '(60 . 1) '(60 . 0) e)) (setq e2 (append e '((60 . 1)))) ) ) (defun show60 (e / e2) (if (not (null (assoc '60 e))) (setq e2 (subst '(60 . 0) '(60 . 1) e)) (setq e2 (append e '((60 . 0)))) ) ) (defun setvis ( vis ename / e) (setq e (entget ename)) (if (eq vis 0) (entmod (show60 e)) (entmod (blank60 e)) ) (entupd ename) ;; Blank vertices of polyline, if necessary (if (eq (cdr (nth 1 e)) "POLYLINE") (progn (setq ename (entnext ename)) (setq e (entget ename)) (while (eq (cdr (nth 1 e)) "VERTEX") (if (eq vis 0) (entmod (show60 e)) (entmod (blank60 e)) ) (entupd ename) (setq ename (entnext ename)) (setq e (entget ename)) ) ; while ) ; progn ) ; if polyline (if (and (eq (cdr (nth 1 e)) "INSERT") (assoc '66 e)) (progn (setq ename (entnext ename)) (setq e (entget ename)) (while (eq (cdr (nth 1 e)) "ATTRIB") (if (eq vis 0) (entmod (show60 e)) (entmod (blank60 e)) ) (entupd ename) (setq ename (entnext ename)) (setq e (entget ename)) ) ; while ) ; progn ) ) (defun c:blank ( ) ;;; / olderr echo ss i ename ) (setq olderr *error* ; Redefine error handler. echo (getvar ;|MSG0|;"cmdecho") *error* blank_error) (setvar ;|MSG0|;"cmdecho" 0) ; Turn off cmdecho sysvar (command ;|MSG0|;"_.undo" ;|MSG0|;"_group") (setq ss (ssget)) (setq i 0) (while (< i (sslength ss)) (progn (setq ename (ssname ss i)) (setvis 1 ename) (setq i (1+ i)) )) (setq *error* old_error) ; restore error function (command ;|MSG0|;"_.undo" ;|MSG0|;"_end") (setvar ;|MSG0|;"cmdecho" echo) ; restore cmdecho sysvar (princ) ; Quiet exit. ) (defun c:unblankall ( ) ;;; / olderr echo ss i ename ) (setq olderr *error* ; Redefine error handler. echo (getvar ;|MSG0|;"cmdecho") *error* unblank_error) (setvar ;|MSG0|;"cmdecho" 0) ; Turn off cmdecho sysvar (command ;|MSG0|;"_.undo" ;|MSG0|;"_group") ;; Select all blanked entities (setq ss (ssget ;|MSG0|;"_x" '((60 . 1)))) (if (not (null ss)) (progn (setq i 0) (princ (sslength ss)) (princ " blanked entities found.\n"); ;; Unblank each entity in the set (while (< i (sslength ss)) (progn (setq ename (ssname ss i)) (setvis 0 ename) (setq i (1+ i)) )) ) (princ "\n0 blanked entities found.\n"); ) (setq *error* old_error) ; restore error function (command ;|MSG0|;"_.undo" ;|MSG0|;"_end") (setvar ;|MSG0|;"cmdecho" echo) ; restore cmdecho sysvar (princ) ; Quiet exit. ) (defun c:unblank ( ) ;;; / olderr echo ss i ename hand ) (setq olderr *error* ; Redefine error handler. echo (getvar ;|MSG0|;"cmdecho") *error* unblank_error) (setvar ;|MSG0|;"cmdecho" 0) ; Turn off cmdecho sysvar (command ;|MSG0|;"_.undo" ;|MSG0|;"_group") (setq hand (getstring ;|MSG5|;"\nEnter handle of entity to be unblanked: ")) ;; Unblank the entity if handle is not an empty string (if (> (strlen hand) 0) (progn (setq ename (handent hand)) (if (/= nil ename) (setvis 0 ename) (princ ;|MSG6|;"Invalid handle.") ) ) ) (setq *error* old_error) ; restore error function (command ;|MSG0|;"_.undo" ;|MSG0|;"_end") (setvar ;|MSG0|;"cmdecho" echo) ; restore cmdecho sysvar (princ) ; Quiet exit. ) (princ)
------------------ "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 |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 31. Mai. 2004 21:06 <-- editieren / zitieren --> Unities abgeben: Nur für don max
Hallo Markus, um Objekte auszublenden/einzublenden ist der Gruppencode 60 zuständig. Besorg Dir am besten die Lisp-Programme von Gerhard Rampf von der Service-Disk 03/2000 vom AutoCad-Magazin, diese dürften das erledigen.
------------------ Servus, Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 01. Jun. 2004 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für don max
|
don max Mitglied architekt
Beiträge: 48 Registriert: 23.02.2004 Windows 2000, A-Cad 2000 (spanisch)
|
erstellt am: 01. Jun. 2004 18:11 <-- editieren / zitieren --> Unities abgeben:
hallo alle zusammen. erstmal vielen dank für die vielen tipps. leider zielen alle in dei selbe richtung - elemente ausblenden und später wieder einblenden, ich arbeite hier mit "weg und da". was isch suche ist ein tool, das mir objekte einfriert, dies geschieht mit dem lisp indem sie auf einen gefrorenen layer geschoben werden. soweit sogut. doch mit dem wieder zurückschieben hapert es noch. und das hätte ich gerne - wenns geht. wäre echt super, wenn da jemand bescheid wüsste. markus ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 01. Jun. 2004 19:35 <-- editieren / zitieren --> Unities abgeben: Nur für don max
Hallo Markus, der Efekt ist doch der selbe. Ist es denn unbedingt erforderlich das die Objekte auf einen neuen Layer(gerforen) geschoben werden? Ich kann auch nicht genau sagen ob das verschieben auf den Originallayer überhaupt so einfach funktioniert, schließlich müßte sich das Objekt merken von welchem Layer es kam. Da müßte man dann ja mit XData arbeiten, oder sowas. Ob sich da der Aufwand lohnt? Deshalb benutze ich lieber den GC 60. ------------------ Servus, Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Jun. 2004 23:49 <-- editieren / zitieren -->
Zitat: Original erstellt von don max: was isch suche ist ein tool, das mir objekte einfriert, dies geschieht mit dem lisp indem sie auf einen gefrorenen layer geschoben werden. soweit sogut. doch mit dem wieder zurückschieben hapert es noch. und das hätte ich gerne - wenns geht.
Ist doch wirklich einfach mit nur anderthalb Zeilen LISP zu lösen (wenn man seine LISP-Bibliotheken sauber beisammen hat :-)): der Ursprungslayer des Objekts muss ja gesichert werden, und das passiert hier am zweckmäßigsten in XDATA. Wenn das Objekt in der Variablen EN steht, und wenn man Bibliotheksfunktionen hat wie z.B. (xdata-set en key value) und (xdata-get en key) und (ssmodent en dxfgroup value), dann lautet die Funktion zum Sperren so: (defun lock-entity (en) (xdata-set en "ORIGINALLAYER" (cadr (assoc 8 (entget en)))) (ssmodent en 8 "LOCKLAYER") ) Und die Funktion zum Entsperren lautet einfach so: (defun unlock-entity (en / originallayer) (if (setq originallayer (xdata-get en "ORIGINALLAYER")) (ssmodent en 8 originallayer) ) ) Viel Spaß beim Basten und Gruß Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
don max Mitglied architekt
Beiträge: 48 Registriert: 23.02.2004 Windows 2000, A-Cad 2000 (spanisch)
|
erstellt am: 02. Jun. 2004 00:57 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von tom.berger: Ist doch wirklich einfach mit nur anderthalb Zeilen LISP zu lösen (wenn man seine LISP-Bibliotheken sauber beisammen hat :-)): der Ursprungslayer des Objekts muss ja gesichert werden, und das passiert hier am zweckmäßigsten in XDATA.Wenn das Objekt in der Variablen EN steht, und wenn man Bibliotheksfunktionen hat wie z.B. (xdata-set en key value) und (xdata-get en key) und (ssmodent en dxfgroup value), dann lautet die Funktion zum Sperren so: (defun lock-entity (en) (xdata-set en "ORIGINALLAYER" (cadr (assoc 8 (entget en)))) (ssmodent en 8 "LOCKLAYER") ) Und die Funktion zum Entsperren lautet einfach so: (defun unlock-entity (en / originallayer) (if (setq originallayer (xdata-get en "ORIGINALLAYER")) (ssmodent en 8 originallayer) ) ) Viel Spaß beim Basten und Gruß Tom Berger
hallo tom, erstmal danke für den tip. leider bin ich lispmässig noch ziehmlich am anfang. könntest du mir nen tip geben, wo ich deine zeilen in das von mir gepostete lisp einbauen müsste, damit das zurücksetzen wieder funktioniert. der rest geht ja. hoffentlich bis bald markus ------------------ 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: 02. Jun. 2004 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für don max
Hi, ja mein lieber Tom, DAS ist doch endlich mal 'ne ECHT NÜTZLICHE Antwort... "WENN Du dies und jenes hast, na DANN ist es doch ein LEICHTES..." Was soll der Mann denn damit anfangen??? ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Jun. 2004 11:13 <-- editieren / zitieren -->
Zitat: Original erstellt von marc.scherer: Hi, ja mein lieber Tom, DAS ist doch endlich mal 'ne ECHT NÜTZLICHE Antwort... "WENN Du dies und jenes hast, na DANN ist es doch ein LEICHTES..."Was soll der Mann denn damit anfangen???
Nun, da hat er jetzt verschiedene Möglichekeiten. Er könnte meine Hinweise beispielsweise zum Anlass nehmen, sich ein wenig in LISP einzuarbeiten. Er könnte sich auch die benötigten Bibliotheksroutinen aus dem Netz laden. Oder er könnte andere Leute fragen.
Ich betrachte es nicht als meine Aufgabe, Anfragern hier kostenfrei fertige Lösungen anzubieten. Aber ich gebe gerne Hinweise, die dazu dienen können, selbst eine Lösung zu finden. Tom Berger
------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
Ex-Mitglied
|
erstellt am: 02. Jun. 2004 11:21 <-- editieren / zitieren -->
Zitat: Original erstellt von don max: erstmal danke für den tip. leider bin ich lispmässig noch ziehmlich am anfang. könntest du mir nen tip geben, wo ich deine zeilen in das von mir gepostete lisp einbauen müsste, damit das zurücksetzen wieder funktioniert. der rest geht ja.
Ich hab' mir Deinen Code nicht weiter angesehen, meine Funktionen würden Deinen Code komplett ersetzen. Aber Du benötigst erst mal ein paar Funktionen zum Schreiben und Lesen von XDATA. Die kannst Du Dir mit Hlfe der VisualLISP Online-Hilfe leicht selbst stricken, aber solche Funktionen sind mW auch unter den Beispieldateien für die LISP-Programmierung, und auf jeden Fall findest Du diese reichlich auch im Netz. Ich selbst bin kein Freund freier Software (oder kostenlosen Brots oder kostenloser Dienstleistungen für den Maschinenbau ...) und gebe nur ausnahmsweise mal kostenfreie Programme raus. Da aber der Aufwand einer Rechnungsstellung sich nicht immer lohnt, schreibe ich kleine Lösungen oft gegen eine Spendenquittung - in Deinem Fall wären das 20 Euro an Amnesty oder die Andheri Stiftung. Schick' mir eine Email an berger@archtools.de, falls Du interessiert bist. Gruß Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
don max Mitglied architekt
Beiträge: 48 Registriert: 23.02.2004 Windows 2000, A-Cad 2000 (spanisch)
|
erstellt am: 02. Jun. 2004 18:14 <-- editieren / zitieren --> Unities abgeben:
hallo tom, hallo marc. dass ihr euch gleich wegen eines lisps die köpfe einschlagt (ich denk mal so schlimm ist es wohl nicht) wollte ich auch nicht gerade. mein anliegen war es auch nicht das rad neu zu erfinden, sondern ein bestehendes lisp, das ja auch mal funktioniert haben müsste, auf acad 2000 anzupassen. ich selbst habs nicht hinbekommen und dachte mir bei cad.de wird es schon jemand geben, der den fehler aufspürt. dein vorschlag TOM mit den 20 € als spende werde ich mir durch den kopf gehen lassen. für ein neues lisp ist das denke ich mal angemessen. ich will jetzt ja nicht rumjammern, wegen 20 €, aber seit ich in spanien lebe und von den gehältern hier überrascht wurde steht bei das geldsparen vor dem zeisparen, was heissen soll, dass ich mich wahrscheinlich mal am lispeln versuche. danke auf jeden fall und bis bald markus ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Jun. 2004 19:09 <-- editieren / zitieren -->
Zitat: Original erstellt von don max: dein vorschlag TOM mit den 20 € als spende werde ich mir durch den kopf gehen lassen. für ein neues lisp ist das denke ich mal angemessen. ich will jetzt ja nicht rumjammern, wegen 20 €, aber seit ich in spanien lebe und von den gehältern hier überrascht wurde steht bei das geldsparen vor dem zeisparen, was heissen soll, dass ich mich wahrscheinlich mal am lispeln versuche.
Dann hat mein Vorschlag hoffentlich geholfen :-) Tools zum XDATA-Schreiben findest Du im Netz zuhauf, und die Funktion SSMODENT kriegst Du kostenlos von mir unter http://www.archdim.de/SSMOD.LSP Gruß Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 02. Jun. 2004 20:59 <-- editieren / zitieren --> Unities abgeben: Nur für don max
|