mit nachfolgendem progrämmchen (befehl: "eee") erstelle ich einen satteldachbinder. wenn ich diesen zu einer massengruppe zusammenfassen möchte, verschwinden die neuen objekte und vom binder ist nichts mehr zu sehen. was mache ich falsch ?
ich habe diesen beitrag versehentlich auch in das lisp-forum gesetzt, sorry !
(defun fc_adt_winkel (ep zp / dx dy dz alpha beta epx epy epz zpx zpy zpz lxy lxz ld)
(setq epx (nth 0 ep))
(setq epy (nth 1 ep))
(setq epz (nth 2 ep))
(setq zpx (nth 0 zp))
(setq zpy (nth 1 zp))
(setq zpz (nth 2 zp))
(setq dx (- zpx epx))
(setq dy (- zpy epy))
(setq dz (- zpz epz))
(setq lxy (expt (+ (* dx dx) (* dy dy)) 0.50))
(setq lxz (expt (+ (* dx dx) (* dz dz)) 0.50))
(setq ld (expt (+ (* lxy lxy) (* dz dz)) 0.50))
;alpha
(setq alpha (atan (abs dy) (abs dx)))
(if (and (>= dx 0.0) (> dy 0))
(princ)
)
(if (and (< dx 0.0) (>= dy 0))
(setq alpha (- (* 1.0 3.1415927) alpha))
)
(if (and (<= dx 0.0) (< dy 0))
(setq alpha (+ (* 1.0 3.1415927) alpha))
)
(if (and (> dx 0.0) (<= dy 0))
(setq alpha (- (* 2.0 3.1415927) alpha))
)
(if (= dy 0.0)
(setq alpha 0.0)
)
;beta
(setq beta (atan (abs dz) (abs dx)))
(if (and (>= dx 0.0) (> dz 0))
(princ)
)
(if (and (< dx 0.0) (>= dz 0))
(setq beta (- (* 1.0 3.1415927) beta))
)
(if (and (<= dx 0.0) (< dz 0))
(setq beta (+ (* 1.0 3.1415927) beta))
)
(if (and (> dx 0.0) (<= dz 0))
(setq beta (- (* 2.0 3.1415927) beta))
)
(if (= dz 0.0)
(setq beta 0.0)
)
;gamma
(setq gamma (atan (abs dz) (abs lxy)))
(if (and (>= lxy 0.0) (> dz 0))
(princ)
)
(if (and (< lxy 0.0) (>= dz 0))
(setq gamma (- (* 1.0 3.1415927) gamma))
)
(if (and (<= lxy 0.0) (< dz 0))
(setq gamma (+ (* 1.0 3.1415927) gamma))
)
(if (and (> lxy 0.0) (<= dz 0))
(setq gamma (- (* 2.0 3.1415927) gamma))
)
(if (= dz 0.0)
(setq gamma 0.0)
)
(list alpha (* alpha (/ 180 3.1415927)) beta (* beta (/ 180 3.1415927)) gamma (* gamma (/ 180 3.1415927)) lxy lxz ld)
)
(defun fc_adt_plinie (polypunktliste layername farbnr gc70 / n tmpliste lelement)
(setq lelement (entlast))
(setq tmpliste (list
'(0 . "POLYLINE")
(cons 8 layername)
(cons 62 farbnr)
'(66 . 1)
(cons 70 gc70)
))
(entmake tmpliste)
(foreach n polypunktliste
(setq tmpliste (List
'(0 . "VERTEX")
))
(setq tmpliste (append tmpliste (list (cons 10 (trans n 1 0)))))
(setq tmpliste (append tmpliste (list '(70 . 32))))
(entmake tmpliste)
);foreach
(setq tmpliste (list
'(0 . "SEQEND")
))
(entmake tmpliste)
(princ)
(if (/= (entlast) lelement)
(entlast)
(nil)
);if
)
(defun fc_flaeche_an_pfad_ausrichten2 (querschn ep zp s / winkelliste ep epx epy epz zp zpx zpy zpz pliste)
(setq epx (nth 0 ep))
(setq epy (nth 1 ep))
(setq epz (nth 2 ep))
(setq zpx (nth 0 zp))
(setq zpy (nth 1 zp))
(setq zpz (nth 2 zp))
(setq winkelliste (fc_adt_winkel ep zp))
(setq pliste nil)
(setq pliste (list ep))
(foreach n querschn
(if (= s 0)
(setq pliste (append pliste
(list
(list (+ epx (* (cos (+ (nth 0 winkelliste) 1.57079635)) (nth 0 n)) (* (cos (+ (nth 2 winkelliste) 1.57079635)) (nth 1 n)))
(+ epy (* (sin (+ (nth 0 winkelliste) 1.57079635)) (nth 0 n)))
(+ epz (* (sin (+ (nth 2 winkelliste) 1.57079635)) (nth 1 n))))
)
)
)
);if
(if (= s 1)
(setq pliste (append pliste
(list
(list (+ epx (* (cos (+ (nth 0 winkelliste) 1.57079635)) (nth 0 n)) (* (cos (+ 0.0 1.57079635)) (nth 1 n)))
(+ epy (* (sin (+ (nth 0 winkelliste) 1.57079635)) (nth 0 n)))
(+ epz (* (sin (+ 0.0 1.57079635)) (nth 1 n))))
)
)
)
);if
);foreach
(fc_adt_plinie
pliste
"test"
1
9)
(entlast)
)
(defun fc_adt_pliste_verzerren (pliste fx fy fz / tmpliste n)
(setq tmpliste nil)
(foreach n pliste
(if tmpliste
(setq tmpliste (append tmpliste (list (list (* (nth 0 n) fx)
(* (nth 1 n) fy)
(* (nth 2 n) fz)))))
(setq tmpliste (list (list (* (nth 0 n) fx)
(* (nth 1 n) fy)
(* (nth 2 n) fz)))))
);foreach
tmpliste
)
;fc_adt_ftbinder_satteldach
(defun c:eee (/ l1 l2 f1 f2 f3 bfo bfu hf1 hf2 hf3 hf4 bs ok h1 alpha
p1 p2 faktor1 alphabog
pfad1 q1 obergurt osmodes pfad2 pfad3 q2 untergurt
pfad4 steg q3 auswahl)
(command "bks" "w")
(princ "\n*")
(setq l1 15.00
l2 16.00
f1 0.02
f2 0.01
f3 0.02
f4 0.2
ok 7.01
bfo 0.6
bfu 0.3
bs 0.15
bf 0.3
hf1 0.1
hf2 0.05
hf3 0.07
hf4 0.2
h1 1.50
h2 0.5
alpha 3.0)
(setq alphabog (* (/ 3.1415927 180.0) alpha))
;faktor
(setq faktor1 (/ (/ (+ hf1 hf2) (cos alphabog)) (+ hf1 hf2)))
(setq auswahl (ssadd))
;**************************** OBERGURT ******************************************
;pfad für obergurt
(setq pfad1 (fc_adt_plinie (list (list 0.0 0.0 ok)
(list (+ (- (/ l2 2)) f1 f4)
0.0
(- ok (* (atan alphabog) (- (/ l2 2) f1 f4)))
))
"pfad" 4 8)
);if
(setq pfad2 (fc_adt_plinie (list (list 0.0 0.0 ok)
(list (- (/ l2 2) f1 f4)
0.0
(- ok (* (atan alphabog) (- (/ l2 2) f1 f4)))
))
"pfad" 4 8)
);if
;(fc_adt_pliste_verzerren pliste fx fy fz)
(setq obergurt (list (list (+ (/ bfo 2)) 0.0 0.0)
(list (+ (/ bfo 2)) (- hf1) 0.0)
(list (+ (/ bs 2)) (- 0.0 hf1 hf2) 0.0)
(list (- (/ bs 2)) (- 0.0 hf1 hf2) 0.0)
(list (- (/ bfo 2)) (- hf1) 0.0)
(list (- (/ bfo 2)) 0.0 0.0)
)
)
(princ "\nobergurt:")
(princ obergurt)
(setq obergurt (fc_adt_pliste_verzerren obergurt 1.0 faktor1 1.0))
(setq q1 (fc_flaeche_an_pfad_ausrichten2
obergurt
(list 0.0 0.0 ok)
(list (- 0.0 (/ l2 2) f1 f4)
0.0
(- ok (* (atan alphabog) (- (/ hf2 2) f1 f4)))
)
1)
)
(setq osmodes (getvar "osmode"))
(setvar "osmode" 0)
(command "_extrude" q1 "" "pfad" pfad1)
(command "masselementconvert" (entlast) "" "ja" "")
(command "draworder" "l" "" "unten")
(ssadd (entlast) auswahl)
(setq q1 (fc_flaeche_an_pfad_ausrichten2
obergurt
(list 0.0 0.0 ok)
(list (- 0.0 (/ l2 2) f1 f4)
0.0
(- ok (* (atan alphabog) (- (/ hf2 2) f1 f4)))
)
1)
)
(command "_extrude" q1 "" "pfad" pfad2)
(command "masselementconvert" (entlast) "" "ja" "")
(command "draworder" "l" "" "unten")
(ssadd (entlast) auswahl)
(entdel pfad1)
(entdel pfad2)
;**************************** UNTERGURT ******************************************
;pfad für obergurt
(setq pfad3 (fc_adt_plinie (list (list (+ (- (/ l1 2)) f3)
0.0
(- ok h1)
)
(list (- (/ l1 2) f3)
0.0
(- ok h1)
))
"pfad" 4 8)
)
(setq untergurt (list (list (+ (/ bfu 2)) 0.0 0.0)
(list (+ (/ bfu 2)) hf4 0.0)
(list (+ (/ bs 2)) (+ hf4 hf3) 0.0)
(list (- (/ bs 2)) (+ hf4 hf3) 0.0)
(list (- (/ bfu 2)) hf4 0.0)
(list (- (/ bfu 2)) 0.0 0.0)
)
)
(princ "\nuntergurt:")
(princ untergurt)
(setq q2 (fc_flaeche_an_pfad_ausrichten2
untergurt
(list (+ (- (/ l1 2)) f3) 0.0 (- ok h1))
(list (- (/ l1 2) f3) 0.0 (- ok h1))
1)
)
(command "_extrude" q2 "" "pfad" pfad3)
(command "masselementconvert" (entlast) "" "ja" "")
(command "draworder" "l" "" "unten")
(ssadd (entlast) auswahl)
(entdel pfad3)
;**************************** STEG ******************************************
;pfad für obergurt
(setq pfad4 (fc_adt_plinie (list (list 0.0 (- (/ bs 2)) (- ok h1))
(list 0.0 (+ (/ bs 2)) (- ok h1)))
"pfad" 4 8)
)
(setq steg (list (list (- (/ l1 2) f3) (+ hf4 hf3) 0.0)
(list (- (/ l1 2) f3) (- h1 (* (atan alphabog) (- (/ l2 2) f1)) h2) 0.0)
(list (- (/ l2 2) f3) (- h1 (* (atan alphabog) (- (/ l2 2) f1)) h2) 0.0)
(list (- (/ l2 2) f3) (- h1 (* (atan alphabog) (- (/ l2 2) f1))) 0.0)
(list 0.0 h1 0.0)
(list (- f3 (/ l2 2)) (- h1 (* (atan alphabog) (- (/ l2 2) f1))) 0.0)
(list (- f3 (/ l2 2)) (- h1 (* (atan alphabog) (- (/ l2 2) f1)) h2) 0.0)
(list (- f3 (/ l1 2)) (- h1 (* (atan alphabog) (- (/ l2 2) f1)) h2) 0.0)
(list (- f3 (/ l1 2)) (+ hf4 hf3) 0.0)
)
)
(setq q3 (fc_flaeche_an_pfad_ausrichten2
steg
(list 0.0 (- (/ bs 2)) (- ok h1))
(list 0.0 (+ (/ bs 2)) (- ok h1))
1)
)
(command "_extrude" q3 "" "pfad" pfad4)
(command "masselementconvert" (entlast) "" "ja" "")
(command "draworder" "l" "" "unten")
(ssadd (entlast) auswahl)
(entdel pfad4)
(princ "\nFertig !")
(setvar "osmode" osmodes)
(princ)
);defun
------------------
MfG
Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP