众山小 发表于 2013-7-10 14:05:25

请wowan1314大侠出手,深化右键菜单函数

   wowan1314大侠的右键菜单函数非常不错,使用方便实用。无奈我不会编程,只会皮毛,故请wowan1314大侠拔刀相助,将右键菜单函数深化这些功能。
1、文字修改功能,在无修改文字时自动调整为插入文字。
2、固定右键菜单文字字体,不会随修改文字变化。

再次感谢!http://bbs.mjtd.com/thread-101509-1-1.html

wowan1314 发表于 2013-7-10 14:19:44

本帖最后由 wowan1314 于 2013-7-10 14:36 编辑

这个是在主程序中 写的东西。   右键函数不需要调整啊

楼主可尝试写写。 不会太难的。

1/
(setvar 'textstyle "YB");;这个是设定文字样式的。 YB为文字样式
在右键函数前,设定文字样式。这样右键菜单的文字样式就固定为你制定的样式了。
2/
我那个示例代码,有个选择文本, 原来估计是选择到文本并满足要求就出现右键菜单。
你在后面加上如果不满足要求也出现右键菜单,并根据菜单函数返回的文字,在选择点处插入文字。
(entmake (list '(0 . "TEXT") (cons 1 str) (cons 10 pt) (cons 40 5)));;这个创建文字, STR是文字内容 PT是文字插入点.

众山小 发表于 2013-7-10 17:19:34

谢谢wowan1314及时回复,我试下,不懂再向你请教!

众山小 发表于 2013-7-11 13:04:45

wowan1314 发表于 2013-7-10 14:19 static/image/common/back.gif
这个是在主程序中 写的东西。   右键函数不需要调整啊

楼主可尝试写写。 不会太难的。


wowan1314大侠,我还是搞不定,希望你能出手!

wowan1314 发表于 2013-7-11 17:57:19

众山小 发表于 2013-7-11 13:04 static/image/common/back.gif
wowan1314大侠,我还是搞不定,希望你能出手!

你试下看!估计是不怎么好用!(DEFUN C:T11 (/        EN WZTXT WZLST LEN OLDWZ LEN1 SNAP WZ *error* error_end
              P1)
;;-------------------------------出错函数
(defun *error* (x) (error_end) (command "_.undo" "1"))
(defun error_end ()
    (AND snap (setvar "osmode" snap))        ;打开捕捉
    (command "_.undo" "e")                ;结束编组
                                        ;回到当初
    (REDRAW)                                ;刷新当前
)
;;主函数
(command "_.undo" "Be")
(SETQ EN (entsel "\n选择要修改管径的文字:"))
(SETQ        WZLST (LIST "DN15"    "DN20"        "DN32"          "DN40"    "DN50"
                  "DN65"    "DN75"        "DN80"          "DN100"   "DN300"
                  "DN150"   "DN200"        "你好"
                   )
)
(SETQ        len   (p2u222 88)
        OLDWZ WZTXT
        LEN1(* 0.26 4 LEN)
              ;;计算横向长度
)
(setvar 'textstyle "YB")
;;YB为文字样式,自定义
(IF (AND (SETQ WZTXT (DXF_READ 1 (CAR EN)))
           (wcmatch WZTXT "*DN##*")
      )                                        ;管径
    (progn
      ;;假如是管径文字那么久改文字
      (setq snap (getvar "osmode"))
      (setvar "osmode" 0)                ;关闭
      (IF (SETQ WZ (CADR (YY:YJCAIDAN (CADR EN) LEN LEN1 WZLST OLDWZ)))
        ;;调用菜单函数
        (YY_SubUpd (CAR EN) 1 WZ)
        ;;此处放回调函数
      )                                        ; IF
    )                                        ;END PROGN
    (progn
      ;;假如不是管径文字或没选中那么久插入文字
      (setq P1 (getpoint "\n选择文字插入点:"))
      (if P1
        (progn
          (setq snap (getvar "osmode"))
          (setvar "osmode" 0)                ;关闭
          (IF (SETQ WZ (CADR (YY:YJCAIDAN P1 LEN LEN1 WZLST OLDWZ)))
          ;;调用菜单函数
          (entmake (list '(0 . "TEXT")
                           (cons 1 WZ)
                           (cons 10 p1)
                           (cons 40 5)
                     )
          )
          )                                ; IF
        )
      )
    )                                        ;END PROGN

)                                        ;END IF
(error_end)
(PRINC)
)                                        ;END DEFUN

;;;===========================================得到当前屏幕的大小比例
(defun p2u222 (pix)
(* pix (/ (getvar "viewsize") (cadr (getvar "screensize"))))
)

众山小 发表于 2013-7-22 08:02:50

最近比较忙,一直没有上来。今天一上论坛就看见wowan1314 大侠的留言,非常感谢你无私帮助!一会我试试!
页: [1]
查看完整版本: 请wowan1314大侠出手,深化右键菜单函数