home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 13 / 13.iso / p / p024 / 11.img / BONUS2.LIB / EDGE.LSP < prev    next >
Encoding:
Text File  |  1993-02-09  |  6.4 KB  |  221 lines

  1. ;;; --------------------------------------------------------------------------;
  2. ;;; EDGE.LSP
  3. ;;;
  4. ;;;   ¬⌐┼v (C) 1990-1992  Autodesk ñ╜Ñq
  5. ;;;
  6. ;;;   Ñ╗│n┼ΘºK╢O¿╤▒z╢iªµÑ⌠ª≤Ñ╬│~╗▌¿D¬║½■¿⌐íB¡╫º∩ñ╬╡oªµ, ª²¼O░╚╜╨┐φ┤`ñU¡z
  7. ;;;   ¡∞½h :
  8. ;;;
  9. ;;;   1)  ñWªC¬║¬⌐┼v│qºi░╚╗▌ÑX▓{ªb¿Cñ@Ñ≈½■¿⌐∙╪íC
  10. ;;;   2)  ¼█├÷¬║╗í⌐·ñσÑ≤ñ]Ñ▓╢╖⌐·╕ⁿ¬⌐┼v│qºiñ╬Ñ╗╢╡│\Ñi│qºiíC
  11. ;;;
  12. ;;;   Ñ╗│n┼Θ╢╚┤ú¿╤º@¼░└│Ñ╬ñW¬║░╤ª╥, ª╙Ñ╝┴n⌐·⌐╬┴⌠ºtÑ⌠ª≤½O├╥; ╣∩⌐≤Ñ⌠ª≤»S«φ
  13. ;;;   Ñ╬│~ñº╛A║┘⌐╩, ÑHñ╬░╙╖~╛P░Γ⌐╥┴⌠ºtÑX¿π¬║½O├╥, ªbª╣ñ@╖ºñ⌐ÑHº_╗{íC
  14. ;;;
  15. ;;;
  16. ;;;   by Larry Knott   ¬⌐Ñ╗ 2.2   7/12/88
  17. ;;;
  18. ;;; --------------------------------------------------------------------------;
  19. ;;; DESCRIPTION
  20. ;;;
  21. ;;;   Interactive editor for changing the visibility of 3DFACE edges.
  22. ;;;   Prompt:         "Display/<Select edge>: "
  23. ;;;
  24. ;;;   Features:
  25. ;;;    > "Display" -  Allows selective regeneration of 3DFACE's highlighting
  26. ;;;                   invisible edges.
  27. ;;;    >  Select   -  Reverses the visibility of each edge found.
  28. ;;;
  29. ;;;   Note:
  30. ;;;    >  EDGE uses Osnap MIDpoint as the center of a small crossing box
  31. ;;;       when selecting edges.
  32. ;;;    >  Only edges displayed (or highlighted) can be modified.  (Use
  33. ;;;       "Display" to display a 3DFACE.)
  34. ;;;    >  Invisible edges will always be displayed if the system variable
  35. ;;;       SPLFRAME is set to 1.
  36. ;;;
  37. ;;; --------------------------------------------------------------------------;
  38.  
  39. ;;; ----------------------------- CREATE NEW *ERROR* -------------------------;
  40.  
  41. (defun edge-er (n)
  42.   (if (/= s "Function cancelled")
  43.     (princ (strcat "\n┐∙╗~: " n))
  44.   )
  45.   (command)
  46.   (command "_.UCS" "_P")
  47.   (setvar "osmode" o1)
  48.   (setvar "gridmode" g1)
  49.   (setvar "aperture" a1)
  50.   (setvar "splframe" v1)
  51.   (setvar "ucsfollow" u1)
  52.   (command "_.UNDO" "_E")
  53.   (setvar "cmdecho" s1)
  54.   (setq n1 -1)
  55.   (repeat (sslength faclst)
  56.     (redraw (entupd (ssname faclst (setq n1 (1+ n1)))))
  57.   )
  58.   (setq *error* lisp-er)
  59.   (prin1)
  60. )
  61. ;;; ---------------------------- COMMONLY USED MACROS ------------------------;
  62.  
  63. (defun getval (n e)
  64.   (cdr (assoc n e))
  65. )
  66.  
  67. (defun fltfac (ss / n1)
  68.   (setq n1 0)
  69.   (if ss
  70.     (repeat (sslength ss)
  71.       (if (/= (getval 0 (entget (setq e1 (ssname ss n1)))) "3DFACE")
  72.         (ssdel e1 ss)
  73.         (setq n1 (1+ n1))
  74.       )
  75.     )
  76.   )
  77.   ss
  78. )
  79.  
  80. ;;; ------------------------- FORCE DISPLAY OF ALL EDGES ---------------------;
  81.  
  82. (defun dsply (/ ss n1 t1)
  83.   (setvar "osmode" 0)
  84.   (initget "All Select")
  85.   (setq ss (if (eq (getkword "\nS┐∩╛▄/<AÑ■│í>: ") "Select")
  86.              (fltfac (ssget))
  87.              (ssget "x" '((0 . "3dface")))
  88.            )
  89.         n1 -1)
  90.   (setvar "osmode" 2)
  91.   (cond (ss (princ "\n** ¡½Ñ═íu3D¡▒ív╣╧ñ╕...")
  92.             (repeat (sslength ss)
  93.               (ssadd (setq t1 (ssname ss (setq n1 (1+ n1)))) faclst)
  94.               (shohdn (entget (entupd t1))))
  95.             (princ "º╣ª¿íC") T)
  96.     (T (princ "\nºΣñú¿∞íu3D¡▒ív╣╧ñ╕íC") nil)
  97.   )
  98. )
  99. ;;; ----------------------------- SHOW HIDDEN EDGES --------------------------;
  100.  
  101. (defun shohdn (e / b1 p1 p2 p3 p4)
  102.   (setq b1 (getval 70 e))
  103.   (mapcar '(lambda (j k) (set j (getval k e)))
  104.           '(p1 p2 p3 p4)
  105.           '(10 11 12 13))
  106.   (if (= (logand b1 1) 1)
  107.     (grdraw p1 p2 c1 1)
  108.   )
  109.   (if (= (logand b1 2) 2)
  110.     (grdraw p2 p3 c1 1)
  111.   )
  112.   (if (= (logand b1 4) 4)
  113.     (grdraw p3 p4 c1 1)
  114.   )
  115.   (if (= (logand b1 8) 8)
  116.     (grdraw p4 p1 c1 1)
  117.   )
  118. )
  119.  
  120. ;;; --------------------------- GET ENTITY TO EDIT ---------------------------;
  121.  
  122. (defun getfce (pt / ll ur n1 ss e1 p1)
  123.   (setq p1 (trans pt 0 2)
  124.         ll (trans (polar P1 (/ (* pi 5) 4) h1) 2 0)
  125.         ur (trans (polar P1 (/ pi 4) h1) 2 0)
  126.         n1 0)
  127.   (setvar "osmode" 0)
  128.   (if (setq ss (ssget "c" ll ur))
  129.     (setq ss (fltfac ss))
  130.   )
  131.   (setvar "osmode" 2)
  132.   ss
  133. )
  134.  
  135. ;;; --------------------- MODIFY 3DFACE EDGE VISIBILITY FLAG -----------------;
  136.  
  137. (defun modfce (ss pt / n1 e1 e0 p0 b1 b2 b3)
  138.   (setq n1 0)
  139.   (repeat (sslength ss)
  140.     (setq e1 (entget (ssname ss n1))
  141.           e0 (getval -1 e1))
  142.     (ssadd e0 faclst)
  143.     (mapcar '(lambda (j k) (set j (getval k e1)))
  144.             '(p1 p2 p3 p4)
  145.             '(10 11 12 13))
  146.     (setq p0 (if (equal (distance p3 p4) 0 1e-8)
  147.                (mapcar '(lambda (j k l) (/ (+ j k l) 3)) p1 p2 p3)
  148.                (mapcar '(lambda (j k l m) (/ (+ j k l m) 4)) p1 p2 p3 p4)
  149.              ))
  150.     (setq b1 (getval 70 e1)
  151.           b2 (cond ((equal pt (inters p0 pt p1 p2) h1) 1)
  152.                ((equal pt (inters p0 pt p2 p3) h1) 2)
  153.                ((equal pt (inters p0 pt p3 p4) h1) 4)
  154.                ((equal pt (inters p0 pt p4 p1) h1) 8)
  155.                (T 0)
  156.              )
  157.           b3 (+ b1 (if (= (logand b1 b2) b2)
  158.                      (- b2)
  159.                      b2
  160.                    )
  161.              )
  162.           e1 (shohdn (entmod (subst (cons 70 b3) (assoc 70 e1) e1)))
  163.           n1 (1+ n1))
  164.   )
  165.   T
  166. )
  167. ;;; ------------------------------ MAIN PROGRAM ------------------------------;
  168.  
  169. (defun c:EDGE (/ lisp-er s1 o1 g1 a1 v1 h1 u1 faclst c1 r1 t1 ss pt n e n1)
  170.   (setq lisp-er *error*
  171.         *error* edge-er
  172.         s1 (getvar "cmdecho")
  173.         o1 (getvar "osmode")
  174.         g1 (getvar "gridmode")
  175.         a1 (getvar "aperture")
  176.         v1 (getvar "splframe")
  177.         u1 (getvar "ucsfollow")
  178.         h1 (/ (getvar "viewsize") 100)
  179.         faclst (ssadd)
  180.         c1 7
  181.         r1 T)
  182.   (setvar "cmdecho" 0)
  183.   (command "_.UNDO" "_GROUP")
  184.   (setvar "osmode" 2)
  185.   (setvar "gridmode" 0)
  186.   (setvar "aperture" 5)
  187.   (setvar "splframe" 1)
  188.   (setvar "ucsfollow" 0)
  189.   (command "_.UCS" "_W")
  190.   (while r1
  191.     (initget "Display")
  192.     (setq t1 (getpoint "\nD┼πÑ▄/<┐∩╛▄╜t├Σ>: ")
  193.           r1 (cond ((eq t1 "Display") (dsply))
  194.                ((eq (type t1) 'LIST) (setq ss (getfce t1))
  195.                 (cond ((null ss) (princ "  ºΣñú¿∞íu3D¡▒ív¬║╜t├ΣíC"))
  196.                   ((= (sslength ss) 0) (princ "  ª╣╣╧ñ╕ñú¼Oíu3D¡▒ívíC"))
  197.                   (t (modfce ss t1))
  198.                 )
  199.                )
  200.                (T nil)
  201.              ))
  202.   )
  203.   (command "_.UCS" "_P")
  204.   (setvar "osmode" o1)
  205.   (setvar "gridmode" g1)
  206.   (setvar "aperture" a1)
  207.   (setvar "splframe" v1)
  208.   (setvar "ucsfollow" u1)
  209.   (command "_.UNDO" "_E")
  210.   (setvar "cmdecho" s1)
  211.   (setq n1 -1)
  212.   (repeat (sslength faclst)
  213.     (redraw (entupd (ssname faclst (setq n1 (1+ n1)))))
  214.   )
  215.   (setq *error* lisp-er)
  216.   (prin1)
  217. )
  218.  
  219. ;;; --------------------------------------------------------------------------;
  220.  
  221.