emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/scad-mode 4c23eae9c2 35/47: Support both ortho/perspective


From: ELPA Syncer
Subject: [nongnu] elpa/scad-mode 4c23eae9c2 35/47: Support both ortho/perspective projection
Date: Sat, 12 Nov 2022 13:59:36 -0500 (EST)

branch: elpa/scad-mode
commit 4c23eae9c2b884215919138dc9c7604463d904af
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Support both ortho/perspective projection
---
 README.org   |  2 +-
 ob-scad.el   |  9 ++++++---
 scad-mode.el | 43 +++++++++++++++++++++++++++++--------------
 3 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/README.org b/README.org
index a2d33e5bbe..cc3495ff31 100644
--- a/README.org
+++ b/README.org
@@ -21,7 +21,7 @@
 
 * Org Babel support
 
-#+begin_src scad :file example.png :colorscheme Tomorrow :imgsize 200,200
+#+begin_src scad :file example.png :colorscheme Tomorrow :size 200,200
   for (y=[0:2:20]) {
       translate([0,0,y+1])
           cube([30-2*y,30-2*y,2], true);
diff --git a/ob-scad.el b/ob-scad.el
index fda96c14ad..35935d0cf6 100644
--- a/ob-scad.el
+++ b/ob-scad.el
@@ -33,7 +33,8 @@
 
 (defvar org-babel-header-args:scad
   '((colorscheme . :any)
-    (imgsize . :any)
+    (size . :any)
+    (projection . :any)
     (camera . :any)
     (view . :any))
   "Scad specific header args.")
@@ -49,14 +50,16 @@
                  (list "-o" outfile
                        "--preview"
                        "--viewall"
+                       (format "--projection=%s"
+                               (alist-get :projection params 
scad-preview-projection))
                        (format "--colorscheme=%s"
                                (alist-get :colorscheme params 
scad-preview-colorscheme))
                        (format "--view=%s" (or (alist-get :view params)
                                                (mapconcat #'identity 
scad-preview-view ",")))
                        (when-let (camera (alist-get :camera params))
                          (format "--camera=%s" camera))
-                       (when-let (imgsize (alist-get :imgsize params))
-                         (format "--imgsize=%s" imgsize))
+                       (when-let (size (alist-get :size params))
+                         (format "--imgsize=%s" size))
                        infile)))
     nil))
 
diff --git a/scad-mode.el b/scad-mode.el
index 8f0ef0934a..1736922ca1 100644
--- a/scad-mode.el
+++ b/scad-mode.el
@@ -112,6 +112,10 @@
   "SCAD operators."
   :type '(repeat string))
 
+(defcustom scad-preview-projection 'perspective
+  "Preview projection."
+  :type '(choice (const ortho) (const perspective)))
+
 (defcustom scad-preview-camera '(0 0 0 50 0 20 500)
   "Default parameters for the Gimbal camera."
   :type '(repeat integer))
@@ -247,22 +251,22 @@ Key bindings:
                    " " (shell-quote-argument buffer-file-name))))
 
 (defvar-local scad--preview-buffer       nil)
-(defvar-local scad--preview-camera       nil)
 (defvar-local scad--preview-process      nil)
-(defvar-local scad--preview-size         nil)
 (defvar-local scad--preview-mode-status nil)
 (defvar-local scad--preview-mode-camera nil)
 (defvar-local scad--preview-timer       nil)
+(put 'scad-preview-camera       'permanent-local t)
+(put 'scad-preview-size         'permanent-local t)
+(put 'scad-preview-projection   'permanent-local t)
 (put 'scad--preview-buffer      'permanent-local t)
-(put 'scad--preview-camera      'permanent-local t)
 (put 'scad--preview-process     'permanent-local t)
-(put 'scad--preview-size        'permanent-local t)
+(put 'scad--preview-timer       'permanent-local t)
 (put 'scad--preview-mode-status 'permanent-local t)
 (put 'scad--preview-mode-camera 'permanent-local t)
-(put 'scad--preview-timer       'permanent-local t)
 
 (defvar scad-preview-mode-map
   (let ((map (make-sparse-keymap)))
+    (define-key map "p" #'scad-preview-projection)
     (define-key map (kbd "M--") #'scad-preview-size-)
     (define-key map (kbd "M-+") #'scad-preview-size+)
     (define-key map "-" #'scad-preview-distance-)
@@ -281,7 +285,7 @@ Key bindings:
 (defun scad--preview-status (status)
   "Update mode line of preview buffer with STATUS."
   (setq scad--preview-mode-camera (apply #'format "[%d %d %d] [%d %d %d] %d"
-                                         scad--preview-camera)
+                                         scad-preview-camera)
         scad--preview-mode-status status)
   (force-mode-line-update))
 
@@ -357,13 +361,14 @@ Key bindings:
              :command (list scad-command
                             "-o" outfile
                             "--preview"
+                            (format "--projection=%s" scad-preview-projection)
                             (format "--imgsize=%d,%d"
-                                    (car scad--preview-size)
-                                    (cdr scad--preview-size))
+                                    (car scad-preview-size)
+                                    (cdr scad-preview-size))
                             (format "--view=%s"
                                     (mapconcat #'identity scad-preview-view 
","))
                             (format "--camera=%s"
-                                    (mapconcat #'number-to-string 
scad--preview-camera ","))
+                                    (mapconcat #'number-to-string 
scad-preview-camera ","))
                             (format "--colorscheme=%s" 
scad-preview-colorscheme)
                             infile))))))
 
@@ -396,19 +401,29 @@ Key bindings:
 
 (defun scad--preview-reset (&rest _)
   "Reset camera parameters and refresh."
-  (setq scad--preview-camera (copy-sequence scad-preview-camera)
-        scad--preview-size (copy-tree scad-preview-size))
+  (setq-local scad-preview-camera (copy-sequence (default-value 
'scad-preview-camera))
+              scad-preview-size (copy-tree (default-value 'scad-preview-size))
+              scad-preview-projection (default-value 'scad-preview-projection))
   (scad--preview-render))
 
 (defun scad--preview-move (idx val)
   "Increment camera IDX by VAL."
-  (cl-incf (nth idx scad--preview-camera) val)
+  (cl-incf (nth idx scad-preview-camera) val)
   (scad--preview-render))
 
 (defun scad--preview-size (factor)
   "Resize preview by FACTOR."
-  (setf (car scad--preview-size) (round (* (car scad--preview-size) factor))
-        (cdr scad--preview-size) (round (* (cdr scad--preview-size) factor)))
+  (setf (car scad-preview-size) (round (* (car scad-preview-size) factor))
+        (cdr scad-preview-size) (round (* (cdr scad-preview-size) factor)))
+  (scad--preview-render))
+
+(defun scad-preview-projection ()
+  "Toggle projection."
+  (interactive)
+  (setq-local scad-preview-projection
+              (if (eq scad-preview-projection 'ortho)
+                  'perspective
+                'ortho))
   (scad--preview-render))
 
 (defun scad-preview-translate-x+ () (interactive) (scad--preview-move 0 10))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]