| |
| 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: (command _rotate) (510 mal gelesen)
|
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: 03. Sep. 2009 09:24 <-- editieren / zitieren --> Unities abgeben:
Hi community hier nochmal mein Ansatz, um eine Text automatisch an einer Linie auszurichten, indem ich erst die Linie wähle und dann den Text. Wie kriege ich es hin, dass der Wert von riwi als eingabe für den Textwinkel realisiert wird? Die Routine fragt nun nach dem "Einfügepunkt", dass sollte automatisch der Texturprungspunkt sein. (defun c:rt () (SETQ wahl (ENTSEL "select line: ") ;abfrage der koordinaten anfp endp und berechnung des richtungswinkels riwi element (ENTGET (CAR wahl)) anfp (CDR(ASSOC 10 element)) endp (CDR(ASSOC 11 element)) riwi (atof (angtos (ANGLE anfp endp) 2 10)) ) (if (setq obj (entsel "\select text: ")) (progn (setq objname (car obj)) (command "_rotate" objname "") ) ) ) Es mag vielleicht alltmodisch klingen, ich möchte die Routine rein mit lisp durchführen, um zu sehen wie Variablen an command übergeben werden können. Vlisp kann ich nicht recht nachvollziehen (und verzehrt meiner Meinung nach den Lispcode) - super, wenn man dahinter gestiegen ist. PS.: Vielleicht hat jemand noch einen guten Buchtip, ich hangel mich halt mit mapcar´s Kochbuch und dem "Autolisp-Handbuch", was hier in pdf-form liegt. Vlide bietet zwar viel (aber alles auf Englisch) Gruss Dirk 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. Sep. 2009 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
(command "_rotate" objname ;_Objekt übergeben "" ; Auswahl abschließen (cdr(assoc 10(entget objname))) ;_Basispunkt für die Rotation riwi ) aber .... Text kann vorher schon einen Winkel haben .. Laufrichtung der Linie kann so sein, das Text dann auf dem Kopf steht usw.. . im Prinzip also ein falscher Ansatz und ach ja .. Lisp ist nicht unbedingt eine Aneinanderreihung von Commands .. da kannste gleich ein script nehmen! ------------------ - 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 |
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: 13. Okt. 2009 07:49 <-- editieren / zitieren --> Unities abgeben:
Hallo! Am Beispiel zum rotieren eines Blockes über 2 Fixpunkte finde ich command _rotate ungeeignet. Mein Ansatz ist nun der: (defun c:rb () (setq obj (entsel "\nblock wählen")) (princ "\n2 punkte picken:") (setq anfp (getpoint) endp (getpoint) riwi (+ 100 (atof (angtos (ANGLE anfp endp) 2 10))) objname (car obj)) (command "_change" objname "" "" "" riwi) ; damit ist einmal der Block gedreht ) was mich allerdings hieran stört: -man muss vorher Winkeldrehung im Uhrzeigersinn ausstellen (gibt es da eine Systemvariable ?) -man kann mit entget immer nur ein aws erhalten, wie lässt sich da ssget implementieren ? Gruss cp
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: 13. Okt. 2009 08:11 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: was mich allerdings hieran stört: -man muss vorher Winkeldrehung im Uhrzeigersinn ausstellen (gibt es da eine Systemvariable ?) -man kann mit entget immer nur ein aws erhalten, wie lässt sich da ssget implementieren ?
Hallo zum ersten Punkt probier mal angdir 1 (ungetestet) zum zweiten Punkt schau dir mal die Sub bau_elemli an, als Rückgabe erhälst du eine List, welche du über ein Schleife auswerten kannst.
------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 13. Okt. 2009 08:21 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Du hast schon die Beste Literatur, das einzige was dir fehlt ist Geduld ! Arbeite das Buch langsam durch, gehe die Eingaben am PC selbst durch. Es wird erklärt wie man auf ein Objekt in einem Auswahlsatz zugreift. Es wird erklärt wie man mit repeat oder while eine Schleife erstellt. Mehr brauchst du dafür auch nicht. Das was richtig viel hilft: Viele viele Codeschnipsel hier im Forum (oder anderen zugänglichen Quellen) "lesen", dabei muß man nicht gleich alles verstehen, aber das Beispiel sollte sich sicher finden. Befehle rund um Auswahlsätze fangen alle mit "ss" an, dann benötigt man noch eine Schleifenfunktion wie while oder repeat um nach und nach an jedes Element in dem Auswahlsatz zu gelangen. Lese einfach mal ein paar Codeschnipsel in denen ssget vorkommt. ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Okt. 2009 08:46 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
ich spendier dir (und der Allgemeinheit) mal einen Codeschnipsel zur Auswahl (ssget-Filter ist anzupassen) ... (if(or(and(=(getvar "PICKFIRST")1)(setq AWS (ssget "_I" '((0 . "CIRCLE"))))) (and(setq NOMUTT(getvar "NOMUTT")) (setvar "NOMUTT" 1) (princ "\nKreise wählen: ") (or(vl-catch-all-error-p (setq AWS(vl-catch-all-apply 'ssget (list '((0 . "CIRCLE"))) ) ) ) 'T ) (setvar "NOMUTT" NOMUTT) (or(=(type AWS)'PICKSET) (prompt "\nAbbruch durch Anwender...") ) (>(sslength AWS)0) ) (prompt "\nKeine Kreise gewählt") ) (progn ;;-> Objektliste erstellen (setq INDEX -1) (repeat(sslength AWS) (if(setq OBJ(ssname AWS (setq INDEX(1+ INDEX)))) (setq OBJLIST (cons OBJ OBJLIST)) ) ) OBJLIST ) ) ------------------ - 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 |
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: 13. Okt. 2009 10:36 <-- editieren / zitieren --> Unities abgeben:
Ja sorry, Geduld braucht man immer und überall - hast ´de völlig recht cadffm. Dorfy + CADmium danke für Euren Ansatz... brauche ein bissel Zeit, weil ss-aws scheinen mir bisher die aufwendigsten Funktionnen überhaupt zu sein. Dahinter zu steigen, liegt der Schlüssel in vielem cp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |