找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 448|回复: 3

[求助] xd::pickset:drag文字方向求助

[复制链接]

已领礼包: 58个

财富等级: 招财进宝

发表于 2017-9-29 10:12:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 brainstorm 于 2017-9-29 10:12 编辑

initget3.gif

如上图所示,左右翻转或上下翻转时,动态显示文字是反的,鼠标确认后文字恢复正常。
如果左右翻转+上下翻转,则鼠标确定后文字依然是反的
红色代码是加了一个关于xy平面的镜像矩阵。
应该怎么写才能达到正确的效果,即拖动时、鼠标确定后文字都是正确方向
谢谢了

  1. (defun xd::pickset:drag1 (ss           pj            mode     cursor   tf
  2.                           /           ang            box             initget-str
  3.                           k1           k2            k3             m              mmatrot
  4.                           mmattrans            mrmatrix mtmatrix mtmatrix0
  5.                           mtmatrix2            n             pj1      prompt1
  6.                           promptl  pt1            pt2             pt3      pt4
  7.                           scl           ss1            tf1             str11
  8.                          )

  9.   (xdrx_begin)
  10.   (xdrx_SysVar_Push '("osmode" 545))
  11.   (xdrx_initget "t r a m s d l f u ctrl")
  12.   (xdrx_document_ucson)

  13.   (if (not pj)
  14.     (progn
  15.       (setq box        (xdrx_entity_box ss)
  16.             pj        (car box)
  17.       )
  18.     )
  19.   )
  20.   (if tf
  21.     (setq str11 (list 256 "拷贝/移动[CTRL]" "CTRL"))
  22.     (setq str11 (list 256 "移动/拷贝[CTRL]" "CTRL"))
  23.   )
  24.   (setq        promptl        (list '(1 "改基点[T]" "T")
  25.                       '(2 "改转角[R]" "R")
  26.                       '(4 "转90度[A]" "A")
  27.                       '(8 "镜像[M]" "M")
  28.                       '(16
  29.                         "左右翻[S]"
  30.                         "S"
  31.                        )
  32.                       '(32
  33.                         "上下翻[D]"
  34.                         "D"
  35.                        )
  36.                       '(64 "缩放[L]" "L")
  37.                       '(128 "对齐[F]" "F")
  38.                       str11
  39.                       '(4096 "回退[U]" "U")
  40.                 )
  41.   )
  42.   (setq prompt1 "\n插入点或{")
  43.   (setq initget-str " ")
  44.   (setq mode (+ 4096 mode))
  45.   (foreach n promptl
  46.     (setq k1 (car n)
  47.           k2 (cadr n)
  48.           k3 (caddr n)
  49.     )
  50.     (if        (/= (logand mode k1) 0)
  51.       (setq initget-str        (strcat initget-str k3 " ")
  52.             prompt1        (strcat prompt1 k2 "/")
  53.       )
  54.     )
  55.   )
  56.   (setq        initget-str
  57.          (xdrx_string_trimleft
  58.            (xdrx_string_trimright initget-str)
  59.          )
  60.   )
  61.   (setq prompt1 (strcat prompt1 "}<退出>:"))
  62.   (setq        mRMatrix  t
  63.         tf1          t
  64.         mTMatrix0 (xdrx_matrix_identity 3)
  65.         mRMatrix  t
  66.   )
  67.   (xdrx_pickset_redraw ss)
  68.   (xdrx_drag_setmatrix mTMatrix0 t)
  69.   (setq undo-mark 0)
  70.   (while mRMatrix
  71.     (xdrx_drag_initget (+ 2 4 8 16 128 512 65536) initget-str)
  72.     (xdrx_drag_setmode "Move")
  73.     (setq mRMatrix (xdrx_PickSet_dragGen prompt1 ss pj cursor nil))
  74.     (cond
  75.       ((= mRMatrix "A")
  76.        (setq mTMatrix (xdrx_matrix_setRotation
  77.                         mTMatrix0
  78.                         (/ pi 2)
  79.                         '(0 0 1)
  80.                         (trans pj 1 0)
  81.                       )
  82.        )
  83.        (xdrx_drag_setmatrix mTMatrix nil)
  84.       )
  85.       ((= mRMatrix "S")
  86.        (setq mTMatrix (xdrx_matrix_product
  87.                         (xdrx_matrix_setMirror
  88.                           mTMatrix0
  89.                           (list        (trans pj 1 0)
  90.                                 (trans (polar pj (/ pi 2) 100) 1 0)
  91.                           )
  92.                         )
  93.                         (xdrx_matrix_setmirror
  94.                           (xdrx_matrix_identity)
  95.                           '((0 0 0) (1 0 0) (0 1 0))
  96.                         )
  97.                       )
  98.        )
  99.        (xdrx_drag_setmatrix mTMatrix nil)
  100.       )
  101.       ((= mRMatrix "CTRL")
  102.        (if tf
  103.          (progn
  104.            (setq tf nil)
  105.            (setq str11 (list 256 "移动/拷贝[CTRL]" "CTRL"))
  106.          )
  107.          (progn
  108.            (setq tf t)
  109.            (setq str11 (list 256 "拷贝/移动[CTRL]" "CTRL"))
  110.          )
  111.        )
  112.        (princ "\n")
  113.        (setq promptl (list '(1 "改基点[T]" "T")
  114.                            '(2 "改转角[R]" "R")
  115.                            '(4 "转90度[A]" "A")
  116.                            '(8 "镜像[M]" "M")
  117.                            '(16
  118.                              "左右翻[S]"
  119.                              "S"
  120.                             )
  121.                            '(32
  122.                              "上下翻[D]"
  123.                              "D"
  124.                             )
  125.                            '(64 "缩放[L]" "L")
  126.                            '(128 "对齐[F]" "F")
  127.                            str11
  128.                            '(4096 "回退[U]" "U")
  129.                      )

  130.        )
  131.        (setq prompt1 "\n插入点或{")
  132.        (setq initget-str " ")
  133.        (setq mode (+ 4096 mode))
  134.        (foreach        n promptl
  135.          (setq k1 (car n)
  136.                k2 (cadr n)
  137.                k3 (caddr n)
  138.          )
  139.          (if (/= (logand mode k1) 0)
  140.            (setq initget-str (strcat initget-str k3 " ")
  141.                  prompt1     (strcat prompt1 k2 "/")
  142.            )
  143.          )
  144.        )
  145.        (setq initget-str
  146.               (xdrx_string_trimleft
  147.                 (xdrx_string_trimright initget-str)
  148.               )
  149.        )
  150.        (setq prompt1 (strcat prompt1 "}<退出>:"))
  151.       )
  152.       ((= mRMatrix "D")
  153.        (setq mTMatrix
  154.               (xdrx_matrix_product
  155.                 (xdrx_matrix_setMirror
  156.                   mTMatrix0
  157.                   (list (trans pj 1 0) (trans (polar pj 0.0 100) 1 0))
  158.                 )
  159.                 (xdrx_matrix_setmirror
  160.                   (xdrx_matrix_identity)
  161.                   '((0 0 0) (1 0 0) (0 1 0))
  162.                 )
  163.               )
  164.        )
  165.        (xdrx_drag_setmatrix mTMatrix nil)
  166.       )

  167.       ((= mRMatrix "F")
  168.        (setq mTMatrix2 (xdrx_drag_getLastMatrix)
  169.              pj               (xdrx_drag_getLastPoint)
  170.        )
  171.        (setq ss1 (xdrx_entity_TransformedCopy ss mTMatrix2))
  172.        (if (and
  173.              (setq pt1 (getpoint "\n请拾取对齐源参考点:"))
  174.              (setq pt2 (getpoint pt1 "\n请拾取另一定确定对齐参考轴:"))
  175.              (setq pt3 (getpoint "\n请拾取目标参考点:"))
  176.              (setq pt4 (getpoint pt3 "\n请拾取另一点确定目标参考轴:"))
  177.            )
  178.          (progn
  179.            (setq mMatRot (XD::Matrix:Align pj pt1 pt3 pt2 pt4))
  180.            (setq mMatRot (xdrx_matrix_product
  181.                            (xdrx_matrix_setTransLation
  182.                              mTMatrix0
  183.                              (mapcar
  184.                                '-
  185.                                pj
  186.                                pt4
  187.                              )
  188.                            )
  189.                            mMatRot
  190.                          )
  191.            )          
  192.            (setq pj (xdrx_point_transform pt1 mMatRot))
  193.            (setq mMatRot (xdrx_matrix_product mMatrot mTMatrix2))
  194.            (xdrx_drag_setmatrix mMatRot t)
  195.          )
  196.        )
  197.        (xdrx_entity_delete ss1)
  198.       )
  199.       ((= mRMatrix "R")
  200.        (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  201.        (setq ss1 (xdrx_entity_TransformedCopy ss mTMatrix2))
  202.        (xdrx_pickset_redraw ss1 3)
  203.        (xdrx_drag_setmatrix mTMatrix0 t)
  204.        (xdrx_drag_SetMode "Rotate")
  205.        (xdrx_drag_initget (+ 2 4 8 16 128 512 65536))
  206.        (if (not        (setq mTMatrix (xdrx_pickset_draggen
  207.                                  "\n旋转角度[回车输入]:"
  208.                                  ss1
  209.                                  (setq pj1 (trans
  210.                                              (xdrx_drag_getLastPoint)
  211.                                              0
  212.                                              1
  213.                                            )
  214.                                  )
  215.                                  2
  216.                                )
  217.                 )
  218.            )

  219.          (progn
  220.            (if (not (setq ang (getangle "\n请输入旋转角度<0>:")))
  221.              (setq ang 0.0)
  222.            )
  223.            (setq mTMatrix (xdrx_matrix_setRotation
  224.                             mTMatrix0
  225.                             ang
  226.                             '(0 0 1)
  227.                             (trans pj1 1 0)
  228.                           )
  229.            )
  230.          )
  231.          (progn
  232.            (setq mMatTrans (xdrx_matrix_setTranslation
  233.                              mTMatrix0
  234.                              (mapcar
  235.                                '-
  236.                                pj
  237.                                pj1
  238.                              )
  239.                            )

  240.                  mTMatrix  (xdrx_matrix_product mMatTrans mTMatrix)
  241.                  mTMatrix  (xdrx_matrix_product mTMatrix mTMatrix2)
  242.            )
  243.          )
  244.        )
  245.        (xdrx_drag_setmatrix mTMatrix t)
  246.        (xdrx_entity_delete ss1)
  247.       )
  248.       ((= mRMatrix "M")
  249.        (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  250.        (setq ss1 (xdrx_entity_TransformedCopy ss mTMatrix2))
  251.        (xdrx_pickset_redraw ss1 3)
  252.        (xdrx_drag_setmatrix mTMatrix0 t)
  253.        (xdrx_drag_SetMode "Mirror")
  254.        (xdrx_drag_initget (+ 2 4 8 16 128 512 65536))
  255.        (if (and
  256.              (setq pj1 (getpoint "\n请拾取镜像参考基点<退出>:"))
  257.              (setq mTMatrix (xdrx_pickset_draggen
  258.                               "\n\n请拾取另一点定确定镜像轴<退出>:"
  259.                               ss1
  260.                               pj1
  261.                               2
  262.                             )
  263.              )
  264.            )
  265.          (progn
  266.            (setq mMatTrans (xdrx_matrix_setTranslation
  267.                              mTMatrix0
  268.                              (mapcar
  269.                                '-
  270.                                pj
  271.                                pj1
  272.                              )
  273.                            )
  274.                  mTMatrix  (xdrx_matrix_product mMatTrans mTMatrix)
  275.                  mTMatrix  (xdrx_matrix_product mTMatrix mTMatrix2)
  276.            )
  277.          )
  278.          (setq mTMatrix mTMatrix2)
  279.        )
  280.        (xdrx_drag_setmatrix mTMatrix nil)
  281.        (xdrx_entity_delete ss1)
  282.       )
  283.       ((= mRMatrix "L")
  284.        (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  285.        (setq ss1 (xdrx_entity_TransformedCopy ss mTMatrix2))
  286.        (xdrx_pickset_redraw ss1 3)
  287.        (xdrx_drag_setmatrix mTMatrix0 t)
  288.        (setq box (xdrx_entity_box ss1)
  289.              scl (- (caadr box) (caar box))
  290.        )
  291.        (xdrx_drag_SetMode "Scale" (/ scl 2.0))
  292.        (xdrx_drag_initget (+ 2 4 8 16 128 512 65536))
  293.        (if (not        (setq mTMatrix (xdrx_pickset_draggen
  294.                                  "\n缩放比例[回车输入]:"
  295.                                  ss1
  296.                                  (setq pj1 (trans
  297.                                              (xdrx_drag_getLastPoint)
  298.                                              0
  299.                                              1
  300.                                            )
  301.                                  )
  302.                                  2
  303.                                )
  304.                 )
  305.            )
  306.          (progn
  307.            (initget 6)
  308.            (if (not (setq scl (getreal "\n请输入缩放比例<1>:")))
  309.              (setq scl 1.0)
  310.            )
  311.            (if (/= scl 1.0)
  312.              (progn
  313.                (setq mTMatrix (xdrx_matrix_setScale
  314.                                 mTMatrix0
  315.                                 scl
  316.                                 (trans pj1 1 0)
  317.                               )
  318.                )
  319.              )
  320.            )
  321.          )
  322.        )
  323.        (setq mMatTrans (xdrx_matrix_setTranslation
  324.                          mTMatrix0
  325.                          (mapcar
  326.                            '-
  327.                            pj
  328.                            pj1
  329.                          )
  330.                        )
  331.              mTMatrix  (xdrx_matrix_product mMatTrans mTMatrix)
  332.              mTMatrix  (xdrx_matrix_product mTMatrix mTMatrix2)
  333.        )
  334.        (xdrx_drag_setmatrix mTMatrix nil)
  335.        (xdrx_entity_delete ss1)
  336.       )
  337.       ((= mRMatrix "T")
  338.        (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  339.        (setq ss1 (xdrx_entity_TransformedCopy ss mTMatrix2))
  340.        (initget 2)
  341.        (if (setq pj1 (getpoint "\n请输入新的基点:"))
  342.          (progn
  343.            (setq pj pj1)
  344.            (xdrx_drag_setmatrix mTMatrix2 T)
  345.          )
  346.        )
  347.        (xdrx_entity_delete ss1)
  348.       )
  349.       ((or
  350.          (= mRMatrix -1)
  351.          (= mRMatrix -4)
  352.        )
  353.        (setq mRMatrix nil)
  354.       )
  355.       ((= mRMatrix "U")
  356.        (if (> undo-mark 0)
  357.          (progn
  358.            (setq undo-mark (1- undo-mark))
  359.            (if (>= undo-mark 0)
  360.              (vl-cmdf ".undo" 1)
  361.            )
  362.            (if (= undo-mark 0)
  363.              (princ "\n所有操作已经回退完毕。")
  364.            )
  365.          )
  366.          (princ "\r所有操作已经回退完毕。")
  367.        )
  368.       )
  369.       ((= (type mRMatrix) 'LIST)
  370.        (XD::UndoMark)
  371.        (setq undo-mark (1+ undo-mark))
  372.        (if tf
  373.          (xdrx_entity_TransFormedCopy ss (xdrx_drag_getLastMatrix))
  374.          (progn
  375.            (xdrx_entity_TransForm ss (xdrx_drag_getLastMatrix))
  376.            (setq mRMatrix nil)
  377.          )
  378.        )
  379.        (XD::UndoEnd)
  380.       )
  381.     )
  382.   )
  383.   (xdrx_pickset_redraw ss t)
  384.   (xdrx_document_ucsoff)
  385.   (xdrx_SysVar_Pop)
  386.   (xdrx_end)
  387.   (princ)
  388. )
  389. ;;;------------------------------------------------------------------------------------
  390. (defun c:v ()
  391.   (setq        ss (ssget)
  392.         p  (getpoint)
  393.   )
  394.   (xd::pickset:drag1 ss p (+ 1 2 4 8 16 32 64 128 256) 0 nil)
  395. )






论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-9-29 10:21:45 | 显示全部楼层
下图是天正的自由移动命令,文字动态显示或鼠标确认后均正确

initget4.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2017-11-11 00:04:34 | 显示全部楼层
谢谢分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-11-24 12:05:20 | 显示全部楼层
你可以修改
[JavaScript] 纯文本查看 复制代码
(= mRMatrix "M")


里面的内容,对文字加以判断,构建好变换矩阵。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-29 03:27 , Processed in 0.299810 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表