我试着在调查的3个点之间做一个“插值”。我的意思是,在由3个点(测量点)定义的平面上找到一个点的高程。这就是我现在拥有的,仍在工作,看起来很糟糕。。。。很抱歉。也许有人有一些类似的东西,或一些链接,或一些想法如何使它更简单-当然可以做得更好。谢谢
- (defun c:Z3( / te sizetext oldEcho oldosmode
- p1 p2 p3 linie ppt z )
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (defun LM:GetIntersections ( obj1 obj2 )
- (LM:GroupByNum (vlax-invoke obj1 'IntersectWith obj2 acExtendBoth) 3)
- )
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (defun LM:GroupByNum ( l n / r)
- (if l
- (cons
- (reverse (repeat n (setq r (cons (car l) r) l (cdr l)) r))
- (LM:GroupByNum l n)
- )
- )
- )
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (vl-load-com)
- (defun *error* (msg)
- (and uFlag (vla-EndUndoMark aDoc))
- (and msg (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
- (princ (strcat "\n** Error: " msg " **"))))
- (princ))
- (setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
- (setq uFlag (not (vla-StartUndoMark aDoc)))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (setvar "dimdec" 3)
- (princ "\nSELECTEAZA TEXT PENTRU MARIME CARACTERE")
- (if(setq te (entsel))
- (setq sizetext (cdr(assoc 40 (entget(car te))))))
- (if (= te nil)(setq sizetext 5))
- (setq oldEcho(getvar "CMDECHO"))
- (setvar "CMDECHO" 0)
- (setq oldosmode (getvar "OSMODE"))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (setvar "OSMODE" 512)
- (princ "\nSELECTEAZA PUNCT")
- (if
- (setq p1 (getpoint "\nPOINT 1")
- p2 (getpoint "\nPOINT 2")
- p3 (getpoint "\nPOINT 3")
- pc (getpoint "\nPOINT UNKNOWN"))
- (progn
- (setvar "OSMODE" 9)
- (SETVAR "CECOLOR" "232")
- (command "_.line" p1 p2 "")
- (setq l12 (entlast))
- (command "_.line" p1 p3 "")
- (setq l13 (entlast))
- (command "_.line" p2 p3 "")
- (setq l23 (entlast))
- (command "_.line" p1 pc "")
- (setq lc (entlast))
- (setq x1 (car p1)
- x2 (car p2)
- x3 (car p3)
- xc (car pc)
- y1 (cadr p1)
- y2 (cadr p2)
- y3 (cadr p3)
- yc (cadr pc)
- z1 (caddr p1)
- z2 (caddr p2)
- z3 (caddr p3)
- )
- (command "_.line" (list x2 y2 0) (list x3 y3 0) "")
- (setq l23p (entlast))
- (command "_.line" (list x1 y1 0) (list xc yc 0) "")
- (setq lp (entlast))
- (setq pint0 (LM:GetIntersections (vlax-ename->vla-object l23p) (vlax-ename->vla-object lp)))
- (setq pint0 (list (caar pint0) (cadr (car pint0)) (caddr (car pint0))))
- (command "_.line" pint0 (list (car pint0) (cadr pint0) 10.0) "")
- (setq lint (entlast))
- (setq pint (LM:GetIntersections (vlax-ename->vla-object lint) (vlax-ename->vla-object l23)))
- (setq pint (list (caar pint) (cadr (car pint)) (caddr (car pint))))
- (command "_.line" p1 pint "")
- (setq lcf (entlast))
- (command "_.line" pc (list (car pc) (cadr pc) 10.0) "")
- (setq laj (entlast))
- (setq pcf (LM:GetIntersections (vlax-ename->vla-object laj) (vlax-ename->vla-object lcf)))
- (setq pcf (list (caar pcf) (cadr (car pcf)) (caddr (car pcf))))
- (setq z (rtos (caddr pcf) 2 3))
- (command "_.point" pcf)
- (command "text" pcf sizetext "0" (strcat " " z))
- (command "_.erase" l12 l13 l23 lc l23p lp lint lcf laj "")
- (SETVAR "CECOLOR" "BYLAYER")
- ); end progn
- );end if
- (setvar "CMDECHO" oldEcho)
- (setvar "OSMODE" OLDOSMODE)
- (setvar "dimdec" 2)
- (*error* nil)
- (princ)
- )
|