| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Punkte auf Linie erstellen (1007 mal gelesen)
|
3105orcas Mitglied Bauzeichnerin
 
 Beiträge: 248 Registriert: 26.02.2003
|
erstellt am: 01. Sep. 2004 15:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo, brauche dringend Hilfe, aber leider kein Lisp-Experte! Folgendes Problem: Ich muss auf vielen Linien jeweils Punkte in verschiedenen Abständen eintragen. Also z.B. eine gerade Linie und 3 Punkte mit unterschiedlichem Abstand. Hoffe man kann das vielleicht mit Lisp hinkriegen, in der Form das man die Linie vielleicht anklickt, die drei Abstandswerte von den Punten angibt und dann einen Block an diesen Stellen generiert bekommt. Vielleicht kann mir jemand helfen? Danke Danke Danke Anne Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 01. Sep. 2004 15:29 <-- editieren / zitieren --> Unities abgeben:          Nur für 3105orcas
|
3105orcas Mitglied Bauzeichnerin
 
 Beiträge: 248 Registriert: 26.02.2003
|
erstellt am: 01. Sep. 2004 15:40 <-- editieren / zitieren --> Unities abgeben:         
|
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 01. Sep. 2004 15:57 <-- editieren / zitieren --> Unities abgeben:          Nur für 3105orcas
|
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002
|
erstellt am: 01. Sep. 2004 16:40 <-- editieren / zitieren --> Unities abgeben:          Nur für 3105orcas
versuch mal das: Code:
(defun c:l_teil () (setq obj (nentsel "\nLinie wählen: ")) (setq pt1 (cdr (assoc 10 (entget (car obj))))) (setq pt2 (cdr (assoc 11 (entget (car obj))))) (setq p_klick (car (cdr obj))) (if (> (distance p_klick pt1) (distance p_klick pt2)) (progn (setq p_temp pt1) (setq pt1 pt2) (setq pt2 p_temp) (setq p_temp NIL) ) ) (while (setq ab (getreal "\nAbstand eigeben: ")) (setq osmode_save (getvar "osmode")) (setvar "osmode" 0) (command "_-insert" "temp" (polar pt1 (angle pt1 pt2) ab) "" "" "") (setvar "osmode" osmode_save) ) )
- du wählst eine linie an
(*]dann wird geprüft auf welcher "seite" der linie du geklickt hast - von diesem eindpunkt wird dann weggemessen
- dann so lange abstände eingeben wie du willst - es wird immer an diesem punkt ein block "temp" eingefügt - solls ein anderer block sein einfach im code austauschen
 ------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
3105orcas Mitglied Bauzeichnerin
 
 Beiträge: 248 Registriert: 26.02.2003 Autodesk Civil / Map 3D 2023
|
erstellt am: 02. Sep. 2004 07:31 <-- editieren / zitieren --> Unities abgeben:         
|
Mario Scht Mitglied
 
 Beiträge: 156 Registriert: 14.11.2002 Win XP ACAD 2007
|
erstellt am: 02. Sep. 2004 15:27 <-- editieren / zitieren --> Unities abgeben:          Nur für 3105orcas
Hallo, habe das ganze mal etwas erweitert, mit vorheriger Auswahl des zu kopierenden Blockes und der Möglichkeit einzustellen, ob man vom Anfangspunkt der Linie jeweils absolut, oder vom jeweilig letzten Punkt aus die nächste Entfernung abtragen will. Es wäre aber schön, wenn mir jemand die globale Variable *block-name* eliminieren könnten, durch Variablenübergabe. Habe kein Handbuch und in LT gibts da keine spezielle Hilfe, ich weiß nur, dass es gehen muss und dass macht einen dann fix und fertig, wenns letztlich doch nicht klappt :-). Habe selbst schon mit (defun ???? / ) experimentiert, kriegs aber nicht hin. Danke schonmal vorab! Grüße Mario ; Programm zum einfügen eines Blockes entlang einer Linie (defun wahl_block ( / enX en ent exitflag ) ; Auswahlroutine für einzusetzenden Block (setq exitflag NIL) (while (not exitflag) (setq enX (entsel (strcat "\nBLOCK wählen! " "<" *name-block* ">"))) (if (not enX) (setq exitflag T) (progn (setq en (car enX)) (setq ent (entget en)) (if (= (cdr (assoc 0 ent)) "INSERT") (progn (princ "\nDas ist ein Block!") (setq *name-block* (cdr (assoc 2 ent))) (princ *name-block*) (setq exitflag T) ) (princ "\nGewähltes Element ist kein Block!") ) ) ) ) ) (defun c:lw ( / obj pt1 pt2 p_klick p_temp ab hlp entsch) (if (= *name-block* nil) (setq *name-block* "") ) (setq ab NIL) (setq hlp 0) (setq entsch NIL) (wahl_block ) (setq entsch (getstring "\nWollen Sie die Punktfolge <a>bsolut, oder <r>elativ eingeben? <r> ")) (princ (strcat "| " entsch " |")) (setq obj (nentsel "\nLinie wählen: ")) (setq pt1 (cdr (assoc 10 (entget (car obj))))) (setq pt2 (cdr (assoc 11 (entget (car obj))))) (setq p_klick (car (cdr obj))) (if (> (distance p_klick pt1) (distance p_klick pt2)) (progn (setq p_temp pt1) (setq pt1 pt2) (setq pt2 p_temp) (setq p_temp NIL) ) ) (if (OR (= entsch "a") (= entsch "A") ) (progn (while (setq ab (getreal "\nAbstand eigeben: ")) (setq osmode_save (getvar "osmode")) (setvar "osmode" 0) (command "_-insert" *name-block* (polar pt1 (angle pt1 pt2) ab) "" "" "") (setvar "osmode" osmode_save) ) ) (progn (while (setq ab (getreal "\nAbstand eigeben: ")) (setq ab (+ ab hlp)) (setq osmode_save (getvar "osmode")) (setvar "osmode" 0) (command "_-insert" *name-block* (polar pt1 (angle pt1 pt2) ab) "" "" "") (setq hlp ab) (setvar "osmode" osmode_save) ) ) ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |