逗亦斗霸 发表于 2024-12-15 00:56:24

面板radio_button按钮及修剪问题求助,谢谢~

(defun c:tt (/ dcl_file dcl_id)
(setvar "cmdecho" 0)
(command ".UNDO" "BE")
(setq snap (getvar "osmode") ) (setvar "osmode" 0)
(setq old_lay (getvar "clayer") )

(defun make_dcl(/ lst_str str file f)
    (setq lst_str
      '("pmbj:dialog
      {label = \"平面布局\";"

          ":boxed_column
            {fixed_height = true; label = \"尺寸\";
            :row
            {spacer_0;
                :edit_box {label = \"长度\"; key = \"fwcd\"; fixed_width = true;} spacer_0;
                :edit_box {label = \"宽度\"; key = \"fwkd\"; fixed_width = true;} spacer_0;
                :edit_box {label = \"墙厚\"; key = \"fwqh\"; fixed_width = true;} spacer_0;
            }
            :row{spacer_1;}
            }"


          ":row{
          :boxed_column
            {fixed_height = true; label = \"门洞位置\";
            :row{
                  spacer_1;
                  :radio_button {key = \"z1\"; label = \"顶部向右\";} :radio_button {key = \"z2\"; label = \"顶部向左\";}
                }
            :row{spacer_1;}
            }


          :boxed_column
            {fixed_height = true; label = \"门洞参数\";
            :row{
                  spacer_0;:edit_box {label = \"门宽\"; key = \"fmpy\"; fixed_width = true;}spacer_0;
                }
            :row{
                  spacer_0;:edit_box {label = \"偏移\"; key = \"pyjl\"; fixed_width = true;}spacer_0;
                }
            :row{spacer_1;}
            }
            }"

          ":spacer {}
            :row{
            spacer_1; spacer_1; :button {key = \accept\;is_default = true;   fixed_width = true; label = \"确定\";}
                        :button {key = \"cancel\";   is_cancel = true;   fixed_width = true; label = \"取消\";} spacer_1; spacer_1;
            }
            :spacer {}
      }"
      )
    )
    (setq file (vl-filename-mktemp "DclTemp.dcl") )
    (setq f (open file "w") )
    (foreach str lst_str
      (princ "\n" f)
      (princ str f)
    )
    (close f)
    file
)

(if (/= 'str (type fwcd) ) (setq fwcd "10000") )
(if (/= 'str (type fwkd) ) (setq fwkd "6000") )
(if (/= 'str (type fwqh) ) (setq fwqh "280") )
(if (/= 'str (type fmpy) ) (setq fmpy "800") )
(if (/= 'str (type pyjl) ) (setq pyjl "400") )
(defun getdata ()
    (setq
      cd (atoi (get_tile "fwcd") )
      kd (atoi (get_tile "fwkd") )
      qh (atoi (get_tile "fwqh") )
      mk (atoi (get_tile "fmpy") )
      jl (atoi (get_tile "pyjl") )
      fwcd (get_tile "fwcd")
      fwkd (get_tile "fwkd")
      fwqh (get_tile "fwqh")
      fmpy (get_tile "fmpy")
      pyjl (get_tile "pyjl")
    )
)
(if (= (setq dcl_id (load_dialog (setq dcl_file (make_dcl) ) ) ) 0) (progn (alert "\n无法显示对话框!") (exit) ) )
(if dcl_file (vl-file-delete dcl_file) )
    (if (not (new_dialog "pmbj" dcl_id) ) (progn (alert "\n无法显示对话框!") (exit) ) )
(set_tile "fwcd" fwcd)
(set_tile "fwkd" fwkd)
(set_tile "fwqh" fwqh)
(set_tile "fmpy" fmpy)
(set_tile "pyjl" pyjl)

(action_tile "z1" "(setq fmwz 1)" )
(action_tile "z2" "(setq fmwz 2)" )

(action_tile "accept" "(getdata) (done_dialog 1)")
(action_tile "cancel" "(getdata) (done_dialog 0) (exit)")
(start_dialog)
    (unload_dialog dcl_id)

(setq
    pw0 (getpoint "\n插入点: ")
    wx1 (+ (car pw0) (+ (* 2 qh) cd) )
    wy1 (cadr pw0)
    wx2 (+ (car pw0) (+ (* 2 qh) cd) )
    wy2 (+ (cadr pw0) (+ (* 2 qh) kd) )
    wx3 (car pw0)
    wy3 (+ (cadr pw0) (+ (* 2 qh) kd) )

    nx0 (+ (car pw0) qh)
    ny0 (+ (cadr pw0) qh)
    nx1 (+ (+ (car pw0) qh) cd)
    ny1 (+ (cadr pw0) qh)
    nx2 (+ (+ (car pw0) qh) cd)
    ny2 (+ (+ (cadr pw0) qh) kd)
    nx3 (+ (car pw0) qh)
    ny3 (+ (+ (cadr pw0) qh) kd)

    pw1 (list wx1 wy1)
    pw2 (list wx2 wy2)
    pw3 (list wx3 wy3)
    pn0 (list nx0 ny0)
    pn1 (list nx1 ny1)
    pn2 (list nx2 ny2)
    pn3 (list nx3 ny3)
)

(command "pline" pw0 pw1 pw2 pw3 pw0 "")
(command "pline" pn0 pn1 pn2 pn3 pn0 "")

(defun mkwz ()
    (setq snap (getvar "osmode") ) (setvar "osmode" 0)
    (cond
      ( (= fmwz 1) (mkwz1) )
      ( (= fmwz 2) (mkwz2) )
    )
    (setvar "osmode" snap)
)
(mkwz)
(setvar "osmode" snap)
    (setvar "cmdecho" 1)
    (setvar "clayer" old_lay)
    (command ".UNDO" "E")
(princ)
)


(defun mkwz1 ()
    (setq
      p1 (polar pn3 (angle pn3 pn2) jl)
      p2 (polar p1 (angle pn0 pn3) qh)
      p3 (polar p1 (angle pn3 pn2) mk)
      p4 (polar p3 (angle pn0 pn3) qh)
      p5 (polar p1 (angle pn3 pn2) (/ mk 2) )
      p6 (polar p2 (angle pn3 pn2) (/ mk 2) )
    )
    (command "pline" p1 p2 "")
    (command "pline" p3 p4 "")
    (command "_.TRIM" "" "c" p5 p6 "")
)

(defun mkwz2 ()
    (setq
      p1 (polar pn2 (angle pn2 pn3) jl)
      p2 (polar p1 (angle pn0 pn3) qh)
      p3 (polar p1 (angle pn2 pn3) mk)
      p4 (polar p3 (angle pn0 pn3) qh)
      p5 (polar p1 (angle pn2 pn3) (/ mk 2) )
      p6 (polar p2 (angle pn2 pn3) (/ mk 2) )
    )
    (command "pline" p1 p2 "")
    (command "pline" p3 p4 "")
    (command "_.TRIM" "" "c" p5 p6 "")
)问题一:以上代码,选择“顶部向右”后不会生成预设的两条线,并打断成缺口(如图左边),选择“顶部向左”的话都是第一次生成不带打断的图(如图中间),第二次使用才会正常打断生成缺口(如图右边),请问问题出在哪里?



问题二:CAD2020原来输入"TR"无需点空格即可修剪,为何突然需要按一次空格才能修剪了?请问如何解决?以上代码是不是和这个变动有关?谢谢~

ssyfeng 发表于 2024-12-15 07:52:28

本帖最后由 ssyfeng 于 2024-12-15 09:59 编辑

试试这样行不行

逗亦斗霸 发表于 2024-12-15 12:48:03

本帖最后由 逗亦斗霸 于 2024-12-15 15:21 编辑

ssyfeng 发表于 2024-12-15 07:52
试试这样行不行
感谢回复!正是我想要的,开始不清楚(vl-cmdf "_.zoom" "o" en1 "")和(vla-ZoomPrevious (vlax-get-acad-object) )的作用,后来想明白了。另外想请教一下,这些代码的顺序有什么讲究吗?感觉和我原来的有些差异啊,还有局部变量一定要加上去吗?
页: [1]
查看完整版本: 面板radio_button按钮及修剪问题求助,谢谢~