| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Abstand (1451 mal gelesen)
|
RoyCAD Mitglied Dipl-Ing Energietechnik
 
 Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 07. Sep. 2004 12:51 <-- editieren / zitieren --> Unities abgeben:         
Ich habe grade ein Lisp geschrieben der erzeug eine Bemaßungkette. Ich weis aber nicht wie soll ich der Abstand zischen dem Element und Bemaßung definieren. Hat jemand eine Idee wie kann ich das machen. Ich kämpfe mit dem „Programm“ schon eine Weile. (setq pt1 ( getpoint "Aquapanle wählen")) (setq ptendh (getpoint "Endpunkt wählen")) (setq ptlegh (list (nth 0 pt1) (nth 1 ptendh) 0.0)) (setq pt2 (list (nth 0 pt1) ( + (nth 1 pt1) (cadt:cm 11.3)) 0.0)) (command "bemlinear" pt1 pt2 pt1 )
(setq pt3 (list (nth 0 pt1) (- (nth 1 ptlegh) (cadt:cm 51.2)) 0.0)) (command "bemlinear" pt2 pt3 pt2 ) ..........................
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002
|
erstellt am: 07. Sep. 2004 13:10 <-- editieren / zitieren --> Unities abgeben:          Nur für RoyCAD
hallo RoyCAD! so einfach ist das nicht zu beantworten deine gewünschte position der bemaßung ja von mehreren faktoren abhängig sein wird?! aber mal ein paar gedanken dazu... angenommen du hast zwei punkte die du vermaßen willst (schräg im raum). der 3te punkt der für die bemaßungsposition zuständig ist soll z.b. 10 zeichnungseinzeiten parallel zur achse punkt1-punkt2 laufen (wär z.b. eine logischer vermutung) dann mal diese zeile zu gemüte führen:
Code: (setq pt3 (polar pt1 (+ (angle pt1 pt2) (/ PI 2)) 10.0))
mit "angle" wird der winkel zw. pt1 und pt2 gemessen. dann PI/2 (90° in radiant) dazuaddiert. dann mit einer polaren punktangabe ausgehend von pt1 10 zeichnungseinzeiten in der normalen zur geraden pt1-pt2 gegangen.... wichtig: den objektfang befor du linien/bemaßungen erstellen lässt abstellen! also die variabe "osmode" in einer temporären variable zwischenspeichern - auf 0 setzen und nach abschluss wieder zurücksetzen! sonst gibts u.U. ziemlich komische ergebnisse   ------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
 
 Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 07. Sep. 2004 16:12 <-- editieren / zitieren --> Unities abgeben:         
|
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002
|
erstellt am: 07. Sep. 2004 16:22 <-- editieren / zitieren --> Unities abgeben:          Nur für RoyCAD
DIMEXO bestimmt wo der anfang der "hilfslinie" ist. das hat aber nichts mit der position der richtigen bemaßungslinie und des textes zu tun! zeichne mal eine linie und dann:
Code:
(setq pt1 (getpoint "1ter punkt: ")) (setq pt2 (getpoint "2ter punkt: ")) (setq osmode_save (getvar "osmode")) (setvar "osmode" 0) (setq pt3 (polar pt1 (+ (angle pt1 pt2) (/ PI 2)) 10.0)) (command "bemlinear" pt1 pt2 pt3 ) (setvar "osmode" osmode_save)
dann kommt bei mir das raus was du auf dem bild siehst! das müsste dir eigendlich etwas weiterhelfen oder? ------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
 
 Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 08. Sep. 2004 12:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo Schachinger Deine Code ist ja richtig aber ich will eine Bemaßungskette. Zwei Maßen von insgesamt sieben soll der User bestimmen. Es funktioniert alles nur der Abstand zwischen den Element und Bemaßung ist zu klein und ich weiß nicht wie soll ich das definieren. (defun C:ver (/ pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 )
(command "layer" "machen" "klafs_schr" "") (setq pt1 ( getpoint "Aquapanle wählen")) (setq ptendh (getpoint "Endpunkt wählen")) (setq ptlegh (list (nth 0 ptendh) (nth 1 pt1) 0.0)) (setq pt2 (list (+ (nth 0 pt1) (cadt:cm 11.3)) (nth 1 pt1) 0.0)) (command "bemlinear" pt1 pt2 pt1 )
(setq pt3 (list (- (nth 0 ptlegh)(cadt:cm 51.2)) (nth 1 pt1) 0.0)) (command "bemlinear" pt2 pt3 pt2 )
(setq pt4 (list (+ (nth 0 pt3) (cadt:cm 3.7)) (nth 1 pt1) 0.0)) (command "bemlinear" pt3 pt4 pt3 ) (setq pt5 (list (+ (nth 0 pt4)(cadt:cm 47.5)) (nth 1 pt1) 0.0)) (command "bemlinear" pt4 pt5 pt4) (setq pt6 (list (nth 0 pt5) (- (nth 1 pt5) (cadt:cm 3.7)) 0.0)) (setq ptendv (getpoint "Endpunkt wählen")) (setq ptlegv (list (nth 0 pt5) (nth 1 ptendv) 0.0)) (command "bemlinear" pt5 pt6 pt5 ) (setq pt7 (list (nth 0 pt5) (+ (nth 1 ptlegv)(cadt:cm 11.3)) 0.0))
(command "bemlinear" pt6 pt7 pt6 ) (setq pt8 (list (nth 0 pt5) (- (nth 1 pt7) (cadt:cm 11.3)) 0.0)) (command "bemlinear" pt7 pt8 pt7 ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002
|
erstellt am: 08. Sep. 2004 12:45 <-- editieren / zitieren --> Unities abgeben:          Nur für RoyCAD
du hast überall die zeilen Code: (command "bemlinear" pt1 pt2 pt1 )
drinnen! erster punkt: anfangspunkt der bemaßung zweiter punkt: endpunkt der bemaßung dritter punkt: POSITON DER BEMASSUNGwas wäre es wenn du diese zeile durch
Code:
(setq pt12 (polar pt1 (+ (angle pt1 pt2) (/ PI 2)) 10.0)) (command "bemlinear" pt1 pt2 pt12 )
ersetzt? das selbe spiel natürlich auch für die anderen bemaßungen! und natürlich nicht auf das ausschalten des ofangs vergessen! sonst springt dir die bemaßung ev. wieder wo anders hin /oder zurück auf das zu vermaßende element.
Code:
(setq osmode_save (getvar "osmode")) (setvar "osmode" 0) ... hier die zeilen in denen du die bemaßungen erstellen lässt ... (setvar "osmode" osmode_save)
jetzt das ganze etwas klarer geworden? denn du hast in dem gerade gepostetetn lisp keine einzige zeile von mir übernommen gehabt ?!  ------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002 AIS2009, PDSU 2012-2015, Plant 3D 2011-2015, NavisWorks 2010-2015, Win7 64bit SP1, Intel Core i7 870, 16 GB RAM, Quadro 2000D
|
erstellt am: 10. Sep. 2004 07:26 <-- editieren / zitieren --> Unities abgeben:          Nur für RoyCAD
|
RoyCAD Mitglied Dipl-Ing Energietechnik
 
 Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 10. Sep. 2004 12:28 <-- editieren / zitieren --> Unities abgeben:         
Hallo Schachinger Ja ich habe das Problem gelöst und so sieht es das end Ergebnis. (defun C:ver (/ pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 )
(command "layer" "machen" "schr" "") (setq pt1 ( getpoint "Start wählen")) (setq ptendh (getpoint "Endpunkt wählen")) (setq ptlegh (list (nth 0 pt1) (nth 1 ptendh) 0.0))
(setq pta (list (+ (nth 0 pt1 ) (cadt:cm 15.0)) (nth 1 pt1) 0.0 )) (setq pt2 (list (nth 0 pta) ( + (nth 1 pt1) (cadt:cm 11.3)) 0.0)) (command "bemlinear" pta pt2 pta ) (setq pt3 (list (nth 0 pta) (- (nth 1 ptlegh) (cadt:cm 51.2)) 0.0)) (command "bemlinear" pt2 pt3 pt2 )
(setq pt4 (list (nth 0 pta) ( + (nth 1 pt3) (cadt:cm 3.7)) 0.0)) (command "bemlinear" pt3 pt4 pt3 ) (setq pt5 (list (nth 0 pta) ( + (nth 1 pt4) (cadt:cm 47.5)) 0.0)) (command "bemlinear" pt4 pt5 pt4) (setq ptendv (getpoint "Endpunkt wählen")) (setq ptlegv (list (nth 0 ptendv) (nth 1 ptendh) 0.0)) (command "bemlinear" pt5 pt6 pt5 ) (setq pta1 (list (nth 0 ptendh) (+ (nth 1 ptendh) (cadt:cm 15.0)) 0.0))
(setq pt6 (list ( - (nth 0 ptendh) 3.7) (nth 1 pta1) 0.0)) (command "bemlinear" pta1 pt6 pta1 ) (setq pt7 (list ( + (nth 0 ptlegv) (cadt:cm 11.3)) (nth 1 pta1) 0.0)) (command "bemlinear" pt6 pt7 pt6 ) (setq pt8 (list ( - (nth 0 pt7) (cadt:cm 11.3)) (nth 1 pta1) 0.0)) (command "bemlinear" pt7 pt8 pt7 ) )
Ich habe 4 solche Programme geschrieben jetzt brauche ich eine „if“ abfrage kannst du mir vielleicht ein Tipp geben. Ich meine wenn der User angibt in der Befehlzeile Bemaßung oben oder unten (Vertikal, Horizontal) oder links, rechts das der richtige Programm dabei ausgeführt wird. Wie kann ich das am besten hinkriegen. Gruß RoyCAD
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002
|
erstellt am: 13. Sep. 2004 08:26 <-- editieren / zitieren --> Unities abgeben:          Nur für RoyCAD
hallo RoyCAD. mal sehn ob ich dich richtig verstanden habe: du hast bereits 4 fertige lisproutinen und willst eine übergeordnete lisp damit du auswählen kannst welche davon angewendet wird? dann guck dir mal das an:
Code:
(defun xx1 () (princ "1tes Unterpr.") )(defun xx2 () (princ "2tes Unterpr.") ) (defun c:xx () (initget "A B") (setq xy (getkword "Teil wählen (A/B): ")) (cond ((= xy "A") (xx1)) ((= xy "B") (xx2)) (t nil) ) (princ) )
ist nur mal ein beispielcode damit du den grundsätzlichen aufbau verstehst. XX1 und XX2 wären dann zb. 2 von deinen 4 bereits fertigen lisproutinen. aufgerufen wird das ganzde durch XX wo der user auswählt welches unterprog. ausgeführt werden soll. es gäbe für deinen fall natürlich elegantere varianten aber so gehts am schnellsten da du die 4 lisps ja schon fertig hast.  ------------------ mfg Siegfried Schachinger http://www.tbschatz.at [Diese Nachricht wurde von Schachinger am 13. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
RoyCAD Mitglied Dipl-Ing Energietechnik
 
 Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 13. Sep. 2004 11:03 <-- editieren / zitieren --> Unities abgeben:         
|