Help with an interpolate lisp routine
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Need help with this lisp routine. I am trying to interpolate a level between 2 existing levels. The user picks one, then the other level and then picks a point in between the first 2 points. The program should insert a block with the value shown. I believe this once worked on older cad but doesnt seem to work anymore. Any help would be great
(defun c:interp ()
(defun dxf (key elist)(cdr(assoc key elist)))
(SETVAR "ATTREQ" 1)
(SETVAR "ATTDIA" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq ostemp (getvar "osmode"))
(command "osnap" "node")
(setq cnt 0)
(prompt "\nPick first elevation : ")
(SETQ tbdata(entget (car (entsel))))
(setq INTPT1 (dxf 10 tbdata));GETS POINT
(setq INTPT1A (entget (entnext (dxf -1 tbdata))))
(setq INTP1X (atof(dxf 1 INTPT1A)));GETS STRING
(prompt "\nPick second elevation : ")
(SETQ tbdata(entget (car (entsel))))
(setq INTPT2 (dxf 10 tbdata));GETS POINT
(setq INTPT2A (entget (entnext (dxf -1 tbdata))))
(setq INTP2X (atof(dxf 1 INTPT2A)));GETS STRING
(SETVAR "OSMODE" 545)
(setq newpt (osnap(getpoint "\npick point for new elevation: ")"nea"))
(setvar "osmode" 0)
(setq dist (distance INTPT1 INTPT2))
(setq aa (angle INTPT1 INTPT2))
(setq dist1 (/(distance INTPT1 INTPT2)2))
(IF (< INTP1X INTP2X)(setq ang (ANGTOS(angle INTPT1 INTPT2))))
(IF (> INTP1X INTP2X)(setq ang (ANGTOS(angle INTPT1 INTPT2))))
(setq dist2 0)
(setq percent (/(abs(- INTP1X INTP2X))dist));slope percentage
(if(and(< INTP1X INTP2X)(/= dist2 nil))(setq dist2 (distance INTPT1 newpt))(setq newelev (* percent dist2)))
(if(and(< INTP2X INTP1X)(/= dist2 nil))(setq dist2 (distance INTPT2 newpt)))(setq newelev (* percent dist2))
(if(< INTP1X INTP2X)(setq elev (rtos(+ INTP1X newelev)2 2)))
(if(< INTP2X INTP1X)(setq elev (rtos(+ INTP2X newelev)2 2)))
(setq dim (getvar "dimscale"));;new
(Setq txtht (* dim 0.4));;new
(Setq txtht1 (* dim 0.16));;new
;;(command "insert" "level" newpt "" "" ang elev )
(command "insert" "level" newpt txtht "" ang elev )
(if (or (> (car INTPT1) (car INTPT2))
(= (rtd aa) 270))
(command "rotate" "last" "" newpt 180.0)
);if
(setvar "cmdecho" 1)
(SETVAR "ATTDIA" 1)
(setvar "osmode" ostemp)
(princ)
)