I allready thought ribarm would have a reply on this one..
Here's code i use for filling holes. 4-point solid.
It is not mine and i failed to archived the author sadly. For me it works but i could images someones might be better of with a 'v2.0' of such code.
I am not a great programmer but as stated, i might be good for inspirations..
Kind regards
Hans
(defun C:4PS () (4ps))
(defun 4PS (/ TORF P1 P1X P1Y P1Z P2 P2X
P2Y P2Z P3 P3X P3Y P3Z P4 P4X
P4Y P4Z P5 P5X P5Y P5Z P6 P6X
P6Y P6Z P7 P7X P7Y P7Z GDIST DELTAX
DELTAY DELTAZ BOXDIA TRIMBOX MID12X MID12Y MID12Z
MID34X MID34Y MID34Z MID56X MID56Y MID56Z XMIN XMAX
YMIN YMAX ZMIN ZMAX
)
(setq TORF nil)
(setq P1 (getpoint "\nPick First Point: "))
(setq P2 (getpoint P1 "\nPick Second Point: "))
(setq P3 (getpoint P2 "\nPick Third Point: "))
(setq P4 (getpoint P3 "\nPick Final Point: "))
(setq OLDSNAP (getvar "osmode"))
(setvar "osmode" 0)
(prompt "\nComputing...")
;--------------------
(setq P1X (car P1))
(setq P1Y (cadr P1))
(setq P1Z (caddr P1))
(setq P2X (car P2))
(setq P2Y (cadr P2))
(setq P2Z (caddr P2))
(setq P3X (car P3))
(setq P3Y (cadr P3))
(setq P3Z (caddr P3))
(setq P4X (car P4))
(setq P4Y (cadr P4))
(setq P4Z (caddr P4))
;--------------------
(setq MID12X (/ (+ P1X P2X) 2))
(setq MID12Y (/ (+ P1Y P2Y) 2))
(setq MID12Z (/ (+ P1Z P2Z) 2))
(setq MID34X (/ (+ P3X P4X) 2))
(setq MID34Y (/ (+ P3Y P4Y) 2))
(setq MID34Z (/ (+ P3Z P4Z) 2))
;--------------------
(setq P5 (list MID12X MID12Y MID12Z))
;--------------------
(setq P6 (list MID34X MID34Y MID34Z))
;--------------------
(setq MID56X (/ (+ MID12X MID34X) 2))
(setq MID56Y (/ (+ MID12Y MID34Y) 2))
(setq MID56Z (/ (+ MID12Z MID34Z) 2))
(setq P7 (list MID56X MID56Y MID56Z))
;----------------
(setq XMIN P1X)
(setq TORF (<= P2X XMIN))
(if (= TORF T)
(progn (setq XMIN P2X))
)
(setq TORF nil) ; if
(setq TORF (<= P3X XMIN))
(if (= TORF T)
(progn (setq XMIN P3X))
)
(setq TORF nil) ; if
(setq TORF (<= P4X XMIN))
(if (= TORF T)
(progn (setq XMIN P4X))
)
(setq TORF nil) ; if
;----------------
(setq YMIN P1Y)
(setq TORF (<= P2Y YMIN))
(if (= TORF T)
(progn (setq YMIN P2Y))
)
(setq TORF nil) ; if
(setq TORF (<= P3Y YMIN))
(if (= TORF T)
(progn (setq YMIN P3Y))
)
(setq TORF nil) ; if
(setq TORF (<= P4Y YMIN))
(if (= TORF T)
(progn (setq YMIN P4Y))
)
(setq TORF nil) ; if
;----------------
(setq ZMIN P1Z)
(setq TORF (<= P2Z ZMIN))
(if (= TORF T)
(progn (setq ZMIN P2Z))
)
(setq TORF nil) ; if
(setq TORF (<= P3Z ZMIN))
(if (= TORF T)
(progn (setq ZMIN P3Z))
)
(setq TORF nil) ; if
(setq TORF (<= P4Z ZMIN))
(if (= TORF T)
(progn (setq ZMIN P4Z))
)
(setq TORF nil) ; if
;----------------
(setq XMAX P1X)
(setq TORF (>= P2X XMAX))
(if (= TORF T)
(progn (setq XMAX P2X))
)
(setq TORF nil) ; if
(setq TORF (>= P3X XMAX))
(if (= TORF T)
(progn (setq XMAX P3X))
)
(setq TORF nil) ; if
(setq TORF (>= P4X XMAX))
(if (= TORF T)
(progn (setq XMAX P4X))
)
(setq TORF nil) ; if
;----------------
(setq YMAX P1Y)
(setq TORF (>= P2Y YMAX))
(if (= TORF T)
(progn (setq YMAX P2Y))
)
(setq TORF nil) ; if
(setq TORF (>= P3Y YMAX))
(if (= TORF T)
(progn (setq YMAX P3Y))
)
(setq TORF nil) ; if
(setq TORF (>= P4Y YMAX))
(if (= TORF T)
(progn (setq YMAX P4Y))
)
(setq TORF nil) ; if
;----------------
(setq ZMAX P1Z)
(setq TORF (>= P2Z ZMAX))
(if (= TORF T)
(progn (setq ZMAX P2Z))
)
(setq TORF nil) ; if
(setq TORF (>= P3Z ZMAX))
(if (= TORF T)
(progn (setq ZMAX P3Z))
)
(setq TORF nil) ; if
(setq TORF (>= P4Z ZMAX))
(if (= TORF T)
(progn (setq ZMAX P4Z))
)
(setq TORF nil) ; if
;----------------
(setq DELTAX (abs (- XMAX XMIN)))
(setq DELTAY (abs (- YMAX YMIN)))
(setq DELTAZ (abs (- ZMAX ZMIN)))
;----------------
(setq GDIST DELTAX)
(setq TORF (>= DELTAY GDIST))
(if (= TORF T)
(progn (setq GDIST DELTAY))
)
(setq TORF nil) ; if
(setq TORF (>= DELTAZ GDIST))
(if (= TORF T)
(progn (setq GDIST DELTAZ))
)
(setq TORF nil) ; if
;----------------
(setq BOXDIA (* GDIST 2.25))
; arbitrary value, larger than the possible object
;----------------
; Draw box
(command "BOX" "c" P7 "c" BOXDIA)
(setq TRIMBOX (ssget "l"))
(command "SLICE" TRIMBOX "" "3" P1 P2 P3 P7)
(command "SLICE" TRIMBOX "" "3" P1 P2 P4 P7)
(command "SLICE" TRIMBOX "" "3" P1 P3 P4 P7)
(command "SLICE" TRIMBOX "" "3" P2 P3 P4 P7)
(setvar "osmode" OLDSNAP)
;
(princ)
) ; defun 4P
(princ)