pete
/
psc
1
0
Fork 0

SUPPORT FOR MULTIPLE GUARDRAIL EDITING

- c:embed now avoids a redraw when exiting the dialog via cancel
- multi-embed-dialog no longer requires a passed variable
checker-starter-anchor-sl
Dennis Dreischmeyer 6 months ago
parent f7b117ba50
commit 2810153d4f

@ -1,35 +1,22 @@
(psc-include '("3D/3d-guard.lsp" "rail/util.lsp" "rail/dialog.lsp"))
(defun-q c:dd-guard ( / sel ent dat app rot obj)
"Creates or edits a guard rail block"
(defun-q c:dd-guard ( / sel ent dat app rot obj delta)
"Creates or edits one or more guard rail blocks"
(setq sel (get-sset '("Guard,3D_Guard")))
(if (> (length sel) 1) (error "multi-select not supported"))
(setq
ent (car sel)
dat (if ent (read-xdata ent "") (guard-dcl-defaults))
app (xd-value "app_id" dat)
dat (guard-dialog dat)
) ;_ setq
(setup-env (= app "3D_Guard"))
(if dat
(with-data
dat
'(
(setq guard-dat-val dat)
(if ent (setq rot (vla-get-rotation (ename>vlobj ent))))
(setq obj
( (if (= app "3D_Guard") draw-3d_guard draw-guard)
data
(if ent
(get-ins-and-delete ent)
(getpoint "\nInsertion Point: ")
) ;_ if
) ;_ draw-guard -or- draw-3d_guard
) ;_ setq
(if rot (vla-put-rotation obj rot))
(vlobj>ename obj)
)
) ;_ with-data
(if (< (length sel) 2)
(progn
(setq
ent (car sel)
dat (if ent (read-xdata ent "") (guard-dcl-defaults))
app (xd-value "app_id" dat)
dat (guard-dialog dat)
) ;_ setq
(if dat (with-data dat '((single-guard))))
) ;_ progn
(progn
(setq dat (guard-dcl-defaults) delta (multi-guard-dialog))
(if delta (multi-guard delta))
) ;_ progn
) ;_ if
) ;_ defun-q c:dd-guard
(defun-r 'c:dd-guard)

@ -1,6 +1,6 @@
(psc-include '("3D/3d-embed.lsp" "embed/dialog.lsp" "embed/draw.lsp"))
(defun-q c:embed ( / sel ent dat app rot obj)
(defun-q c:embed ( / sel ent dat app rot obj delta)
"Creates or edits one or more embeds"
(setq sel (get-sset '("Embed,3D_Embed")))
(if (< (length sel) 2)
@ -13,7 +13,7 @@
) ;_ setq
(if dat (with-data dat '((single-embed))))
) ;_ progn
(multi-embed (multi-embed-dialog nil))
(if (setq delta (multi-embed-dialog)) (multi-embed delta))
) ;_ if
) ;_ defun-q c:embed
(defun-r 'c:embed)

@ -166,7 +166,7 @@
) ;_ defun-q embed-dcl-defaults
(defun-r 'embed-dcl-defaults)
(defun-q multi-embed-dialog (dat / int-keys dist-keys toggle-keys default-actions dialog-after-load dialog-after-save dialog-before-done tile-actions extra-keys dialog-ties sub-dialogs con-lst)
(defun-q multi-embed-dialog ( / int-keys dist-keys toggle-keys default-actions dialog-after-load dialog-after-save dialog-before-done tile-actions extra-keys dialog-ties sub-dialogs con-lst)
"Embed dialog functions for batch editing"
(defun con-lst (lst)
(mapcar 'cons (cdr lst) (lst* (car lst) (length (cdr lst))))
@ -207,7 +207,7 @@
(con-lst '(multi-tog "em-tog" "qt-tog" "tl-tog"))
) ;_ append
) ;_ setq
(dialog-init "embed/embed.dcl" "MULTI_EMBED_DCL" dat)
(dialog-init "embed/embed.dcl" "MULTI_EMBED_DCL" nil)
) ;_ defun-q multi-embed-dialog
(defun-r 'multi-embed-dialog)

@ -1,83 +1,9 @@
(psc-include (list "common-data.lsp" "dialog/dialog.lsp"))
(defun guard-dialog (dat / dtl-lst plain-string-keys int-keys dist-keys toggle-keys popup-keys default-actions dialog-after-load dialog-after-save dialog-before-done tile-actions extra-keys dialog-ties sub-dialogs)
(defun guard-dialog (dat / tog-lst dtl-lst plain-string-keys int-keys dist-keys toggle-keys popup-keys default-actions dialog-after-load dialog-after-save dialog-before-done tile-actions extra-keys dialog-ties sub-dialogs)
(map-apply! '(lambda (key val) (list key (to-string val))) 'dat)
(setq
dtl-lst
(list
"32 (BTWN. POST)"
"33 (BTWN. BOX)"
"55 (STR. PL. SIDE)"
"61 (ANCH. KB-TZ)"
"62 (EM-1 FRONT)"
"63 (EM-2 FRONT)"
"64 (EM-2 TOP)"
"65 (WF. OFFSET)"
"66 (CH. OFFSET)"
"67 (CH. FRONT)"
"68 (BOX FRAME)"
"69 (ANCH. KH-EZ)"
"76 (STR. CH. SIDE)"
"86 (STR. CH. TOP)"
) ;_ list
;;; edit boxes (get_tile)
plain-string-keys
(list
"guard_str"
"guard_lvl"
"guard_seq"
) ;_ list
;;; edit boxes (safe-atoi)
int-keys
(list
"guard_qty"
) ;_ list
;;; edit boxes (distof)
dist-keys
(list
"guard_lng"
"guard_hgt"
"lpost_ext"
"mpost_ext"
"rpost_ext"
"lpost_tab"
"mpost_tab"
"rpost_tab"
) ;_ list
;;; toggle tiles
toggle-keys
(list
"guard_hand"
"guard_kick"
) ;_ list
;;; key list for popup list tiles
popup-keys
(list
(list
"guard_sty"
"100 2-Line"
"200 6-Line"
"300 Tube"
"400 Picket"
) ;_ list
(cons "lpost_con" dtl-lst)
(cons "mpost_con" dtl-lst)
(cons "rpost_con" dtl-lst)
) ;_ list
default-actions
(list
'("lpost_con" . post-auto-format)
'("lpost_ext" . post-auto-fill)
'("lpost_tab" . post-auto-fill)
'("mpost_con" . post-handling)
'("rpost_con" . post-handling)
'("guard_str" . force-uppercase)
'("guard_lvl" . force-uppercase)
'("guard_seq" . force-uppercase)
'("guard_lng" . guard-inc-mpost)
) ;_ list
) ;_ setq
(set-dialog-vars)
(defun dialog-after-load ()
(mapcar
'(lambda (k) (post-handling k (dialog-popup-val k)))
@ -117,7 +43,30 @@
(dialog-init "rail/guard.dcl" "DD_GUARD" dat)
) ;_ defun guard-dialog
(defun post-handling (key val / mode tmp tab txt ext def mid-p rgt-p)
(defun multi-guard-dialog ( / multi-p tog-lst dtl-lst plain-string-keys int-keys dist-keys toggle-keys popup-keys default-actions dialog-after-load dialog-after-save dialog-before-done tile-actions extra-keys dialog-ties sub-dialogs)
(map-apply! '(lambda (key val) (list key (to-string val))) 'dat)
(set-dialog-vars)
(setq multi-p T)
(defun dialog-after-load ( / )
(mapcar
'(lambda (k) (mode_tile k 1))
(apply 'append (mapcar 'cdr tog-lst))
) ;_ mapcar
) ;_ defun dialog-after-load
(defun dialog-before-done ( / exclude-lst)
(setq
exclude-lst tog-lst
exclude-lst (remove exclude-lst '(= "1" (get_tile (car x))))
exclude-lst (apply 'append (mapcar 'cdr exclude-lst))
exclude-lst (remove exclude-lst '(ends-with x "_txt"))
) ;_ setq
(remove! 'data '(begins-with (car x) "tog_"))
(remove! 'data '(member (car x) exclude-lst))
) ;_ defun dialog-before-done
(dialog-init "rail/guard.dcl" "MULTI_DD_GUARD" nil)
) ;_ defun multi-guard-dialog
(defun post-handling (key val / mode tmp tab txt ext def mid-p rgt-p mlt-p)
(defun mid-p ( / btwn dist)
(setq btwn (member (read val) '(32 33)))
(setq dist (distof (get_tile "guard_lng")))
@ -128,7 +77,13 @@
(setq mode (if (member (read val) '(32 33)) 1 0))
(mode_tile "right_post" mode)
) ;_ defun rgt-p
(defun mlt-p (key / tog)
(setq tog (caar (filter tog-lst '(member key x))))
(setq tog (abs (1- (atoi (get_tile tog)))))
tog
) ;_ defun mlt-p
(cond
( (= multi-p T) (mlt-p key))
( (= key "mpost_con") (mid-p))
( (= key "rpost_con") (rgt-p))
( (= T) (setq mode 0))
@ -140,6 +95,7 @@
ext (strcat tmp "ext")
def (guard-dcl-defaults)
) ;_ setq
(map-apply! '(lambda (key val) (list key (to-string val))) 'def)
(cond ;;; Kick & Hrail @ Guard Btwn.
( (member (read val) '(32 33))
(foreach k '("hand_txt" "kick_txt") (mode_tile k 1))
@ -148,17 +104,20 @@
) ;_ foreach
) ;_ condif
( (= T)
(foreach k '("hand_txt" "kick_txt") (mode_tile k 0))
(foreach k '("hand_txt" "kick_txt" "guard_hand" "guard_kick")
(mode_tile k (if multi-p (mlt-p k) 0))
) ;_ foreach
(foreach k '("guard_hand" "guard_kick")
(mode_tile k 0)
(set_tile k (to-string (xd-value k (if dat dat def))))
(if (or (not multi-p) (= 0 (mlt-p k)))
(set_tile k (xd-value k (if dat dat def)))
) ;_ if
) ;_ foreach
) ;_ condif
) ;_ cond
(cond ;;; Knife Plate
( (member (read val) '(65 66 76))
(mode_tile tab mode)
(set_tile tab (to-string (xd-value tab (if dat dat def))))
(mode_tile tab (if multi-p (mlt-p tab) mode))
(set_tile tab (xd-value tab (if dat dat def)))
) ;_ condif
( (= T)
(mode_tile tab 1)
@ -171,7 +130,9 @@
(set_tile txt "Extension") (set_tile ext "0.0")
) ;_ condif
( (= T)
(mode_tile txt mode) (mode_tile ext mode)
(foreach k (list txt ext)
(mode_tile k (if multi-p (mlt-p k) mode))
) ;_ foreach
(set_tile txt (if (= (read val) 86) "Nose Dist." "Extension"))
(set_tile ext (to-string (abs (distof (xd-value ext (if dat dat def))))))
) ;_ condif
@ -236,3 +197,81 @@
) ;_ if
guard-dat-val
) ;_ defun guard-dcl-defaults
(defun set-dialog-vars ( / con-lst sty-lst)
(defun con-lst (lst)
(mapcar 'cons (cdr lst) (lst* (car lst) (length (cdr lst))))
) ;_ defun con-lst
(setq
sty-lst
(list "100 2-Line" "200 6-Line" "300 Tube" "400 Picket")
dtl-lst
(list
"32 (BTWN. POST)" "33 (BTWN. BOX)" "55 (STR. PL. SIDE)"
"61 (ANCH. KB-TZ)" "62 (EM-1 FRONT)" "63 (EM-2 FRONT)"
"64 (EM-2 TOP)" "65 (WF. OFFSET)" "66 (CH. OFFSET)"
"67 (CH. FRONT)" "68 (BOX FRAME)" "69 (ANCH. KH-EZ)"
"76 (STR. CH. SIDE)" "86 (STR. CH. TOP)"
) ;_ list
tog-lst
(list
'("tog_str" "guard_str") '("tog_lvl" "guard_lvl") '("tog_seq" "guard_seq")
'("tog_lng" "guard_lng") '("tog_hgt" "guard_hgt") '("tog_qty" "guard_qty")
'("tog_sty" "guard_sty") '("tog_hnd" "hand_txt" "guard_hand") '("tog_kck" "kick_txt" "guard_kick")
'("tog_lcon" "lpost_con") '("tog_lext" "lpost_txt" "lpost_ext") '("tog_ltab" "lpost_tab")
'("tog_mcon" "mpost_con") '("tog_mext" "mpost_txt" "mpost_ext") '("tog_mtab" "mpost_tab")
'("tog_rcon" "rpost_con") '("tog_rext" "rpost_txt" "rpost_ext") '("tog_rtab" "rpost_tab")
) ;_ list
;;; edit boxes (get_tile)
plain-string-keys (list "guard_str" "guard_lvl" "guard_seq")
;;; edit boxes (safe-atoi)
int-keys (list "guard_qty")
;;; edit boxes (distof)
dist-keys
(list
"guard_lng" "guard_hgt" "lpost_ext" "mpost_ext"
"rpost_ext" "lpost_tab" "mpost_tab" "rpost_tab"
) ;_ list
;;; toggle tiles
toggle-keys
(list
"guard_hand" "guard_kick"
"tog_str" "tog_lng" "tog_sty"
"tog_lvl" "tog_hgt" "tog_hnd"
"tog_seq" "tog_qty" "tog_kck"
"tog_lcon" "tog_mcon" "tog_rcon"
"tog_lext" "tog_mext" "tog_rext"
"tog_ltab" "tog_mtab" "tog_rtab"
) ;_ list
;;; key list for popup list tiles
popup-keys
(list
(cons "guard_sty" sty-lst)
(cons "lpost_con" dtl-lst)
(cons "mpost_con" dtl-lst)
(cons "rpost_con" dtl-lst)
) ;_ list
default-actions
(append
'(("guard_lng" . guard-inc-mpost))
'(("lpost_con" . post-auto-format))
(con-lst '(post-auto-fill "lpost_ext" "lpost_tab"))
(con-lst '(post-handling "mpost_con" "rpost_con"))
(con-lst '(force-uppercase "guard_str" "guard_lvl" "guard_seq"))
(con-lst (cons 'multi-tog-handling (cddr toggle-keys)))
) ;_ append
) ;_ setq
) ;_ defun set-dialog-vars
(defun multi-tog-handling (key val / def lst)
(setq def (guard-dcl-defaults) lst tog-lst)
(filter! 'lst '(= key (car x)))
(mapcar
'(lambda (k / d)
(setq d (xd-value k (if dat dat def)))
(mode_tile k (abs (1- (atoi val))))
(if d (set_tile k (to-string d)))
) ;_ lambda
(cdr (apply 'append lst))
) ;_ mapcar
) ;_ defun tog-handling

@ -68,7 +68,6 @@
) ;_ mapcar
) ;_ defun g-text
(setq lay (getvar "clayer"))
(with-data dat
'( (setq blk (p-blk guard_ass))
(g-post 'dcl guard_lng)
@ -76,13 +75,74 @@
(if (= "1" guard_hand) (g-hand))
) ;_ quoted list
) ;_ with-data
(setq blk (insert-block modelSpace ins blk))
(assign-xdata blk "Guard" (format-xdata dat))
(set-active-layer lay)
blk
) ;_ defun draw-guard
(defun-q single-guard ()
"Processes to draw single guard"
(setup-env (= app "3D_Guard"))
(setq guard-dat-val dat)
(if ent (setq rot (vla-get-rotation (ename>vlobj ent))))
(setq obj
( (if (= app "3D_Guard") draw-3d_guard draw-guard)
data
(if ent
(get-ins-and-delete ent)
(getpoint "\nInsertion Point: ")
) ;_ if
) ;_ draw-guard -or- draw-3d_guard
) ;_ setq
(if rot (vla-put-rotation obj rot))
(vlobj>ename obj)
) ;_ defun-q single-guard
(defun-r 'single-guard)
(defun-q multi-guard (delta)
"Passes data from multiple guards to single guard process"
(if (remove! 'delta '(null (cadr x)))
(mapcar
'(lambda (ent / )
(setq
dat (read-xdata ent "")
app (xd-value "app_id" dat)
) ;_ setq
(map-apply
'(lambda (k v)
(if (assoc k dat)
(subst-key! k v 'dat)
(append! 'dat (list (list k v)))
) ;_ if
) ;_ lambda
delta
) ;_ map-apply
(if
(apply 'or
(mapcar
'(lambda (k)
(member k '("guard_str" "guard_lvl" "guard_seq"))
) ;_ lambda
(mapcar 'car delta)
) ;_ mapcar
) ;_ apply
(subst-key!
"guard_ass"
(with-data dat
'((strcat "GR" guard_str "-" guard_lvl guard_seq))
) ;_ with-data
'dat
) ;_ subst-key!
) ;_ if
(with-data dat '((single-guard)))
) ;_ lambda
sel
) ;_ mapcar
) ;_ if
) ;_ defun multi-guard
(defun-r 'multi-guard)
;;; draw a box rail
(defun draw-box-rail (ins style len hgt / blockObj obj clayer style)
(setq

@ -151,3 +151,130 @@
}
save_cancel;
}
MULTI_DD_GUARD
: dialog { // DD_GUARD
label = "Guardrail Design";
: row { // Rail Definition
: boxed_column { // Name Column
key = "Name"; label = "&Name";
width = 25; fixed_width = true;
: row {
: column { // tog_str tog_lvl tog_seq
: toggle {key = "tog_str";}
: toggle {key = "tog_lvl";}
: toggle {key = "tog_seq";}
}
: column { // guard_str guard_lvl guard_seq
width = 21; fixed_width = true;
: edit_box {label = "Stair"; key = "guard_str"; edit_width = 6;}
: edit_box {label = "Level"; key = "guard_lvl"; edit_width = 6;}
: edit_box {label = "Sequence"; key = "guard_seq"; edit_width = 6;}
}
}
}
: boxed_column { // Information Column
key = "Info"; label = "&Information";
width = 25; fixed_width = true;
: row {
: column { // tog_lng tog_hgt tog_qty
: toggle {key = "tog_lng";}
: toggle {key = "tog_hgt";}
: toggle {key = "tog_qty";}
}
: column { // guard_lng guard_hgt guard_qty
width = 21; fixed_width = true;
: edit_box {label = "Length"; key = "guard_lng"; edit_width = 6;}
: edit_box {label = "Height"; key = "guard_hgt"; edit_width = 6;}
: edit_box {label = "Quantity"; key = "guard_qty"; edit_width = 6;}
}
}
}
: boxed_column { // Options Column
key = "Optn"; label = "&Options";
width = 25; fixed_width = true;
: row {
: column { // tog_sty tog_hnd tog_kck
: toggle {key = "tog_sty";}
: toggle {key = "tog_hnd";}
: toggle {key = "tog_kck";}
}
: column { // guard_sty hand_txt guard_hand kick_txt guard_kick
width = 21; fixed_width = true;
: popup_list {key = "guard_sty";}
: row {
: text {key = "hand_txt"; value = "Hand Rail"; width = 15;}
: toggle {key = "guard_hand";}
}
: row {
: text {key = "kick_txt"; value = "Kick Plate"; width = 15;}
: toggle {key = "guard_kick";}
}
}
}
}
}
: row { // Post Information
: boxed_column { // Left Post
key = "left_post"; label = "&Left Post";
width = 25; fixed_width = true;
: row {
: column { // tog_lcon tog_ltxt tog_ltab
: toggle {key = "tog_lcon";}
: toggle {key = "tog_lext";}
: toggle {key = "tog_ltab";}
}
: column { // lpost_con lpost_txt lpost_ext lpost_tab
width = 21; fixed_width = true;
: popup_list {key = "lpost_con";}
: row {
: text {key = "lpost_txt"; value = "Extension"; width = 6;}
: edit_box {key = "lpost_ext"; edit_width = 6;}
}
: edit_box {label = "Knife Lng."; key = "lpost_tab"; edit_width = 6;}
}
}
}
: boxed_column { // Mid Post
key = "mid_post"; label = "&Mid Post(s)";
width = 25; fixed_width = true;
: row {
: column { // tog_mcon tog_mtxt tog_mtab
: toggle {key = "tog_mcon";}
: toggle {key = "tog_mext";}
: toggle {key = "tog_mtab";}
}
: column { // mpost_con mpost_txt mpost_ext mpost_tab
width = 21; fixed_width = true;
: popup_list {key = "mpost_con";}
: row {
: text {key = "mpost_txt"; value = "Extension"; width = 6;}
: edit_box {key = "mpost_ext"; edit_width = 6;}
}
: edit_box {label = "Knife Lng."; key = "mpost_tab"; edit_width = 6;}
}
}
}
: boxed_column { // Right Post
key = "right_post"; label = "&Right Post";
width = 25; fixed_width = true;
: row {
: column { // tog_rcon tog_rtxt tog_rtab
: toggle {key = "tog_rcon";}
: toggle {key = "tog_rext";}
: toggle {key = "tog_rtab";}
}
: column { // rpost_con rpost_txt rpost_ext rpost_tab
width = 21; fixed_width = true;
: popup_list {key = "rpost_con";}
: row {
: text {key = "rpost_txt"; value = "Extension"; width = 6;}
: edit_box {key = "rpost_ext"; edit_width = 6;}
}
: edit_box {label = "Knife Lng."; key = "rpost_tab"; edit_width = 6;}
}
}
}
}
save_cancel;
}

Loading…
Cancel
Save