明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 17405|回复: 44

[函数] 修改了下grread捕捉子函数应该能用了

    [复制链接]
发表于 2017-12-25 15:13:42 | 显示全部楼层 |阅读模式
;;; grread捕捉子函数
;;; name为移动的图元名,pt为光标点
;;; 返回值:如果有捕捉点则返回捕捉点,无则返回光标点
(defun osnappt (name pt / color d h k lst nearpt nearpt2 osmo pt1 pt2 pt3 pt4 pt5 ptx pty x)
  (if name (entdel name))
  (redraw)
  (if (< (getvar "osmode") 16384)
    (progn
      (setq color (vla-get-autosnapmarkercolor (vla-get-drafting (vla-get-preferences (vlax-get-acad-object))))
            h (/ (getvar "viewsize") (cadr (getvar "screensize"))) d (getvar "pickbox")
            lst (list (* d h) (* (- d 0.5) h) (* (+ d 0.5) h)) k (* 1.5 d h))
      (if (setq nearpt (osnap pt "_END,_CEN,_NOD,_QUA,_INS,_TAN,_EXT"))(setq osmo 1))
      (if (and(setq nearpt2 (osnap pt "_NEA"))(not (equal nearpt nearpt2 k)))
        (setq osmo 2 nearpt nearpt2))
      (if (and(setq nearpt2 (osnap pt "_MID"))(equal nearpt nearpt2 k))
        (setq osmo 3 nearpt nearpt2))
      (if (and(setq nearpt2 (osnap pt "_INT"))(equal nearpt nearpt2 k))
        (setq osmo 4 nearpt nearpt2))))
  (if name(entdel name))
  (if nearpt
    (progn
      (setq ptx (car nearpt)pty (cadr nearpt))
      (foreach x lst
        (setq pt1 (list (- ptx x) (- pty x)) pt2 (list (+ ptx x) (- pty x))
              pt3 (list (+ ptx x) (+ pty x)) pt4 (list (- ptx x) (+ pty x))
              pt5 (list ptx (+ pty x)))
        (cond
          ((= osmo 1)(grvecs (list color pt1 pt2 pt2 pt3 pt3 pt4 pt4 pt1)))
          ((= osmo 2)(grvecs (list color pt1 pt2 pt2 pt4 pt3 pt4 pt3 pt1)))
          ((= osmo 3) (grvecs (list color pt1 pt2 pt2 pt5 pt5 pt1)))
          ((= osmo 4) (grvecs (list color pt1 pt3 color pt2 pt4)))))
      (setq pt nearpt)))
  pt
)
;;; 示例:动态移动文字
(defun c:qq (/ code ent gr loop name pt)
  (if (setq name (car (entsel "\n选择文本:")))
    (progn
      (setq ent (entget name) loop t)
      (princ "\n指定点:")
      (while loop
        (setq gr (grread t 15 0) code (car gr) pt (cadr gr))
        (cond
          ((= code 3)(redraw) (setq loop nil))  ; 鼠标左键
          ((= code 5)                  ; 鼠标移动
            (setq pt (osnappt name pt))
            (entmod (setq ent (subst(cons 10 pt)(assoc 10 ent)ent))))
          ((= code 2)                  ; 键盘输入
            (princ "\n键盘输入=")(princ pt))
          ((member code '(11 25))      ; 鼠标右击
            (redraw)  (setq loop nil))))))
  (princ)
)

点评

sorry,昨天晚上在2012试了下,能移动能捕捕,但字不动;今天试换电脑试了下,可以了  发表于 2017-12-26 13:08
好像运行不了  发表于 2017-12-26 13:01

评分

参与人数 1明经币 +1 收起 理由
669423907 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 学习|主题: 95, 订阅: 8
发表于 2024-7-24 11:32:36 | 显示全部楼层
本帖最后由 gzcsun 于 2024-8-10 00:08 编辑
228378553 发表于 2024-7-24 11:03
好像还是不能捕捉圆心和几何中心

自己加上。圆心 ,几何中心,图元中心 都可以有。
我是不用几何中心的,图元中心用得多。

cad原捕捉限显示6个;而且面域不能显示几何中心。

所以圆心限显示4个,
图元中心显示2个,面域,块,多段线的都能显示,其它的要按一下按键才显示


本帖子中包含更多资源

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

x

点评

图元中心,创意无限  发表于 2024-7-24 14:07
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-11 10:33:40 | 显示全部楼层
本帖最后由 llsheng_73 于 2020-8-11 16:00 编辑

建议 (osnap pt "_END,_CEN,_NOD,_QUA,_INS,_TAN,_EXT")根据当前的捕捉设置来
我把G版那个按我的习惯修改了一下,没有对正交等模式进行处理
  1. (defun dectobin(n m / c f);;十进制转二进制
  2.   (setq f(if(< n 0)1 0)n(abs n))
  3.   (while(>(setq c(cons(rem n 2)c)n(/ n 2))0))
  4.   (while(<(length c)(1- m))(setq c(cons 0 c)))
  5.   (cons f c))
  6. (DEFUN DrawVecs(Pt Vecs Size Color / xdir);;;G版函数绘制矢量
  7.   (setq xdir(getvar'ucsxdir)
  8.   Vecs(mapcar'(lambda(x)(mapcar'(lambda(a)(mapcar'+ pt(mapcar'*(setq a(trans a 0 xdir)a(list(caddr a)(car a)))(List size size))))x))Vecs))
  9.   (GRVECS(APPLY 'APPEND(MAPCAR 'CONS(MAPCAR(FUNCTION (LAMBDA (x)Color))Vecs)Vecs))))
  10. (defun myosnap(pt / p mode osmod osmode Draftobj Size);;;修改G版函数带捕捉grread
  11.   (if(setq Draftobj(VLA-GET-DRAFTING(VLA-GET-PREFERENCES(VLAX-GET-ACAD-OBJECT)))
  12.      osmod'("_END," "_MID," "_CEN," "_NOD," "_QUA," "_INT," "_INS," "_PER," "_TAN," "_NEA," "_NON," "_APP," "_EXT," "_PAR")
  13.      osmode(reverse(DECTOBIN (getvar'osmode) 1))
  14.      size(*(/(getvar "viewsize")(cadr(getvar "screensize")))(VLA-GET-AUTOSNAPMARKERSIZE Draftobj))
  15.      p(osnap pt(apply'strcat(mapcar'(lambda(x y)(if(zerop x)""y))osmode osmod)))
  16.      mode(CDR(ASSOC
  17.       (if p(vl-some'(lambda(x)(if(equal p(cdr x)1e-8)(car x)))
  18.              (vl-remove'nil(mapcar'(lambda(x y / p)(if(zerop x)nil(if(setq p(osnap pt y))(cons y p))))osmode osmod)))"_NON,")
  19.       '(("_END,"((-1 1)(-1 -1))((-1 -1)(1 -1))((1 -1) (1 1))((1 1) (-1 1)))
  20.         ("_MID,"((0 1.414) (-1.225 -0.707)) ((-1.225 -0.707)(1.225 -0.707))((1.225 -0.707) (0 1.414)))
  21.         ("_CEN,"((0 1) (-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0) (-0.707 -0.707))((-0.707 -0.707)(0 -1))
  22.          ((0 -1)(0.707 -0.707))((0.707 -0.707)(1 0)) ((1 0) (0.707 0.707))((0.707 0.707) (0 1)))
  23.         ("_NOD,"((0 1) (-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0)(-0.707 -0.707))((-0.707 -0.707)(0 -1))((0 -1)(0.707 -0.707))
  24.          ((0.707 -0.707)(1 0))((1 0)(0.707 0.707))((0.707 0.707)(0 1))((-1 1)(1 -1))((-1 -1)(1 1)))
  25.         ("_QUA,"((0 1.414)(-1.414 0))((-1.414 0)(0 -1.414))((0 -1.414)(1.414 0))((1.414 0)(0 1.414)))
  26.         ("_INT,"((-1 1)(1 -1))((-1 -1)(1 1))((1 0.859)(-0.859 -1))((-1 0.859)(0.859 -1))((0.859 1)(-1 -0.859))((-0.859 1)(1 -0.859)))
  27.         ("_INS,"((-1 1)(-1 -0.1))((-1 -0.1)(0 -0.1))((0 -0.1)(0 -1.0))((0 -1.0)(1 -1))
  28.          ((1 -1)(1 0.1))((1 0.1)(0 0.1))((0 0.1) (0 1.0))((0 1.0)(-1 1)))
  29.         ("_PER,"((-1 1)(-1 -1))((-1 -1)(1 -1))((0 -1)(0 0))((0 0)(-1 0)))
  30.         ("_TAN,"((0 1)(-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0)(-0.707 -0.707))((-0.707 -0.707)(0 -1))
  31.          ((0 -1)(0.707 -0.707))((0.707 -0.707)(1 0))((1 0)(0.707 0.707))((0.707 0.707)(0 1))((1 1)(-1 1)))
  32.         ("_NEA,"((-1 1)(1 -1))((1 -1)(-1 -1))((-1 -1)(1 1))((1 1)(-1 1)))
  33.         ("_NON,")
  34.         ("_APP,"((-1 1)(-1 -1))((-1 -1)(1 -1))((1 -1)(1 1))((1 1)(-1 1))((-1 1)(1 -1))((-1 -1)(1 1)))
  35.         ("_EXT,"((0.1 0)(0.13 0))((0.2 0)(0.23 0))((0.3 0)(0.33 0)))
  36.         ("_PAR"((0 1)(-1 -1))((1 1)(0 -1)))))))
  37.     (DrawVecs(setq p(if p p pt))mode size(VLA-GET-AUTOSNAPMARKERCOLOR Draftobj)))
  38.   (if p p pt))
  39. (defun c:tt(/ e p) ;;选择一个圆进行移动
  40.   (while(setq e(ssget":E:S"'((0 . "circle"))))
  41.     (setq e(entget(ssname e 0)))
  42.     (while(/=(car(setq p(grread t 15 0)))3)(redraw)
  43.       (if(=(car p)5)(entmod(append e(list(cons 10(myosnap(cadr p)))))))
  44.       ))
  45.   )


回复 支持 1 反对 0

使用道具 举报

发表于 2025-5-24 21:56:37 | 显示全部楼层
本帖最后由 逗亦斗霸 于 2025-5-25 15:47 编辑
llsheng_73 发表于 2020-8-11 10:33
建议 (osnap pt "_END,_CEN,_NOD,_QUA,_INS,_TAN,_EXT")根据当前的捕捉设置来
我把G版那个按我的习惯修改 ...

请问一下,这段代码还有其他的范例吗?我尝试使用这段加到我动态引线捕捉里去只显示方框,靠近中点时不能正常显示三角形,在另一个拉线标注里倒是可以在靠近中点时正常显示三角形,谢谢~
  1.   (defun dectobin(n m / c f);;十进制转二进制
  2.   (setq f(if(< n 0)1 0)n(abs n))
  3.   (while(>(setq c(cons(rem n 2)c)n(/ n 2))0))
  4.   (while(<(length c)(1- m))(setq c(cons 0 c)))
  5.   (cons f c))
  6. (DEFUN DrawVecs(pt Vecs Size Color / xdir);;;G版函数绘制矢量
  7.   (setq xdir(getvar'ucsxdir)
  8.   Vecs(mapcar'(lambda(x)(mapcar'(lambda(a)(mapcar'+ pt(mapcar'*(setq a(trans a 0 xdir)a(list(caddr a)(car a)))(List size size))))x))Vecs))
  9.   (GRVECS(APPLY 'APPEND(MAPCAR 'CONS(MAPCAR(FUNCTION (LAMBDA (x)Color))Vecs)Vecs))))
  10. (defun myosnap(pt / xpt mode osmod osmode Draftobj Size);;;修改G版函数带捕捉grread
  11. (redraw)
  12.   (if(setq Draftobj(VLA-GET-DRAFTING(VLA-GET-PREFERENCES(VLAX-GET-ACAD-OBJECT)))
  13.      osmod'("_END," "_MID," "_CEN," "_NOD," "_QUA," "_INT," "_INS," "_PER," "_TAN," "_NEA," "_NON," "_APP," "_EXT," "_PAR")
  14.      osmode(reverse(DECTOBIN (getvar'osmode) 1))
  15.      size(*(/(getvar "viewsize")(cadr(getvar "screensize")))(VLA-GET-AUTOSNAPMARKERSIZE Draftobj))
  16.      xpt(osnap pt(apply'strcat(mapcar'(lambda(x y)(if(zerop x)""y))osmode osmod)))
  17.      mode(CDR(ASSOC
  18.       (if xpt(vl-some'(lambda(x)(if(equal xpt(cdr x)1e-8)(car x)))
  19.              (vl-remove'nil(mapcar'(lambda(x y / xpt)(if(zerop x)nil(if(setq xpt(osnap pt y))(cons y xpt))))osmode osmod)))"_NON,")
  20.       '(("_END,"((-1 1)(-1 -1))((-1 -1)(1 -1))((1 -1) (1 1))((1 1) (-1 1)))
  21.         ("_MID,"((0 1.414) (-1.225 -0.707)) ((-1.225 -0.707)(1.225 -0.707))((1.225 -0.707) (0 1.414)))
  22.         ("_CEN,"((0 1) (-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0) (-0.707 -0.707))((-0.707 -0.707)(0 -1))
  23.          ((0 -1)(0.707 -0.707))((0.707 -0.707)(1 0)) ((1 0) (0.707 0.707))((0.707 0.707) (0 1)))
  24.         ("_NOD,"((0 1) (-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0)(-0.707 -0.707))((-0.707 -0.707)(0 -1))((0 -1)(0.707 -0.707))
  25.          ((0.707 -0.707)(1 0))((1 0)(0.707 0.707))((0.707 0.707)(0 1))((-1 1)(1 -1))((-1 -1)(1 1)))
  26.         ("_QUA,"((0 1.414)(-1.414 0))((-1.414 0)(0 -1.414))((0 -1.414)(1.414 0))((1.414 0)(0 1.414)))
  27.         ("_INT,"((-1 1)(1 -1))((-1 -1)(1 1))((1 0.859)(-0.859 -1))((-1 0.859)(0.859 -1))((0.859 1)(-1 -0.859))((-0.859 1)(1 -0.859)))
  28.         ("_INS,"((-1 1)(-1 -0.1))((-1 -0.1)(0 -0.1))((0 -0.1)(0 -1.0))((0 -1.0)(1 -1))
  29.          ((1 -1)(1 0.1))((1 0.1)(0 0.1))((0 0.1) (0 1.0))((0 1.0)(-1 1)))
  30.         ("_PER,"((-1 1)(-1 -1))((-1 -1)(1 -1))((0 -1)(0 0))((0 0)(-1 0)))
  31.         ("_TAN,"((0 1)(-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0)(-0.707 -0.707))((-0.707 -0.707)(0 -1))
  32.          ((0 -1)(0.707 -0.707))((0.707 -0.707)(1 0))((1 0)(0.707 0.707))((0.707 0.707)(0 1))((1 1)(-1 1)))
  33.         ("_NEA,"((-1 1)(1 -1))((1 -1)(-1 -1))((-1 -1)(1 1))((1 1)(-1 1)))
  34.         ("_NON,")
  35.         ("_APP,"((-1 1)(-1 -1))((-1 -1)(1 -1))((1 -1)(1 1))((1 1)(-1 1))((-1 1)(1 -1))((-1 -1)(1 1)))
  36.         ("_EXT,"((0.1 0)(0.13 0))((0.2 0)(0.23 0))((0.3 0)(0.33 0)))
  37.         ("_PAR"((0 1)(-1 -1))((1 1)(0 -1)))))))
  38.     (DrawVecs(setq xpt(if xpt xpt pt))mode size(VLA-GET-AUTOSNAPMARKERCOLOR Draftobj)))
  39.   (if xpt xpt pt))
  40. (defun c:tvvt(/ e xpt) ;;选择一个圆进行移动
  41.   (while(setq e(ssget":E:S"'((0 . "circle"))))
  42.     (setq e(entget(ssname e 0)))
  43.     (while(/=(car(setq xpt(grread t 15 0)))3)(redraw)
  44.       (if(=(car xpt)5)(entmod(append e(list(cons 10(myosnap(cadr xpt)))))))
  45.       ))
  46.   )

  47. (defun bz (/ *error* name1 name2 name3)
  48.     (defun *error* (msg)    ;将描述错误的字符串存入变量msg
  49.   (entdel name1)
  50.   (entdel name2)
  51.   (if name3
  52.       (entdel name3)
  53.   )
  54.   (princ "错误: ")
  55.   (princ msg)
  56.     )          ;打印错误信息
  57.    
  58.     (setq ty (getvar "TEXTSTYLE"))
  59.     (setq ht (atof txtht))
  60.     (if (= ht 0)
  61.   (progn
  62.   (prompt "字高为0!")
  63.   (terpri)
  64.   );progn
  65.   );if
  66.     (setq Scale (/ ht 2.5));
  67.     (setq kd1 (caadr (textbox (list '(0 . "text")
  68.             (cons 1 txt1)
  69.             (cons 40 ht)
  70.             (cons 41 1)
  71.             (cons 7 ty)
  72.             (cons 62 7)
  73.             )
  74.          )
  75.         )
  76.     )
  77.           ;字高ht,字宽高比1,可以自己设置,字体为当前字体
  78.     (setq kd2 (caadr (textbox (list '(0 . "text")
  79.             (cons 1 txt2)
  80.             (cons 40 ht)
  81.             (cons 41 1)
  82.             (cons 7 ty)
  83.             (cons 62 7)
  84.             )
  85.          )
  86.         )
  87.     )
  88.           ;字高ht,字宽高比1,可以自己设置,字体为当前字体
  89.     (setq kd (max kd1 kd2)
  90.     kd (+ kd (* 0.50 Scale))
  91.     )
  92.     (setq p (getpoint "\n输入基点:"))
  93.     (setq pd t)
  94.     (while pd
  95.   (setq gr   (grread t 4 1)
  96.         mode (car gr)
  97.         pt   (myosnap (cadr gr))
  98.   )
  99.   (if (= kd3 0)
  100.       (setq kd kd1)
  101.   )
  102.   (if (and (listp pt) (>= (car pt) (car p)))
  103.       (progn
  104.     (setq p0 (polar pt 0 kd))
  105.     (setq p1 (polar pt 0 (/ (- kd kd1) 2))
  106.           p1 (polar p1 (angtof "90") (* 0.70 Scale))
  107.     )
  108.     (setq p2 (polar pt 0 (/ (- kd kd2) 2))
  109.           p2 (polar p2 (angtof "270") (* 3.20 Scale))
  110.     )
  111.       )
  112.   )
  113.   (if (and (listp pt) (< (car pt) (car p)))
  114.       (progn
  115.     (setq p0 (polar pt pi kd))
  116.     (setq p1 (polar p0 0 (/ (- kd kd1) 2))
  117.           p1 (polar p1 (angtof "90") (* 0.70 Scale))
  118.     )
  119.     (setq p2 (polar p0 0 (/ (- kd kd2) 2))
  120.           p2 (polar p2 (angtof "270") (* 3.20 Scale))
  121.     )
  122.       )
  123.   )
  124.   (if (= mode 5)
  125.       (progn
  126.     (if name1
  127.         (entdel name1)
  128.     )
  129.     (entmake (list '(0 . "LWPOLYLINE")
  130.              '(100 . "AcDbEntity")
  131.              '(100 . "AcDbPolyline")
  132.              '(90 . 3)
  133.              (cons 10 p)
  134.              (cons 10 pt)
  135.              (cons 10 p0)
  136.              (cons 62 3)
  137.        )
  138.     )
  139.     (setq name1 (entlast))
  140.     (if name2
  141.         (entdel name2)
  142.     )
  143.     (entmake (list '(0 . "text")
  144.              (cons 1 txt1)
  145.              (cons 40 ht)
  146.              (cons 41 1)
  147.              (cons 10 p1)
  148.              (cons 7 ty)(cons 62 7)
  149.        )
  150.     )
  151.           ;字高ht,字宽高比1,可以自己设置,字体为当前字体
  152.     (setq name2 (entlast))
  153.     (if name3
  154.         (entdel name3)
  155.     )
  156.     (if (= kd3 1)
  157.         (entmake (list '(0 . "text")
  158.            (cons 1 txt2)
  159.            (cons 40 ht)
  160.            (cons 41 1)
  161.            (cons 10 p2)
  162.            (cons 7 ty)(cons 62 7)
  163.            )
  164.         )
  165.     )
  166.           ;字高ht,字宽高比1,可以自己设置,字体为当前字体
  167.     (if (= kd3 1)
  168.         (setq name3 (entlast))
  169.     )
  170.       )
  171.     (redraw)
  172.   )
  173.   (if (= mode 3)
  174.       (setq pd nil)
  175.   )
  176.   (if (or (= mode 2) (= mode 25))
  177.       (progn (setq pd nil)
  178.        (entdel name1)
  179.        (entdel name2)
  180.        (if name3
  181.            (entdel name3)
  182.        )
  183.       )
  184.   )
  185.     )
  186.     (princ)
  187. )

  188. (defun getdata ()
  189.     (setq txt1 (get_tile "a1"))
  190.     (setq txt2 (get_tile "a2"))
  191.     (if  (= (get_tile "a3") "0")
  192.   (setq kd3 0)
  193.   (setq kd3 1)
  194.     )
  195.     (setq txtht(get_tile "a4"))
  196. )

  197. (defun c:bz ()
  198.           ;(步骤1)建立临时对话框
  199.     (setq tempname (vl-filename-mktemp "temp.dcl")
  200.     filen     (open tempname "w")
  201.     )
  202.     (foreach stream
  203.        '("bz:dialog{"
  204.          "\n  label = "
  205.          动态引线标注
  206.          ";"
  207.          "\n  :edit_box {key = "a1"; label = "线上文字:"; width = 40 ;}"
  208.          "\n  :toggle {key = "a3"; label = "增加线下文字"; value = "
  209.          0
  210.          ";}"
  211.          "\n  :edit_box {key = "a2"; label = "线下文字:"; width = 40; is_enabled = false;}"
  212.          "\n  :edit_box {key = "a4"; label = "文字高度:"; width = 20; }"
  213.          "\n  ok_cancel;}"
  214.         )
  215.   (princ stream filen)
  216.     )
  217.     (close filen)
  218.     (setq dclname tempname)
  219.           ;(步骤2)加载并显示对话框
  220.     (setq dcl_re (load_dialog dclname))
  221.     (if  (not (new_dialog "bz" dcl_re))
  222.   (exit)
  223.     )
  224.           ;(步骤3)定义对话框控件(运用set_tile、action_tile、mode_tile、get_tile等函数)
  225.     (if  txt1
  226.   (set_tile "a1" txt1)
  227.   (set_tile "a1" "动态标注")
  228.     )
  229.     (if  txt2
  230.   (set_tile "a2" txt2)
  231.   (set_tile "a2" "动态标注")
  232.     )
  233.     (if  kd3
  234.   (set_tile "a3" (rtos kd3))
  235.     )          ;注意set_tile函数中赋值均为字符串(带双引号),就连关键词也要加上双引号。
  236.     (if  (= kd3 0)
  237.   (mode_tile "a2" 1)
  238.     )
  239.     (if  (= kd3 1)
  240.   (mode_tile "a2" 0)
  241.     )
  242.     (if  txtht
  243.   (set_tile "a4" txtht)
  244.   (set_tile "a4" "150")
  245.     )
  246.     (action_tile
  247.   "a3"
  248.   "(if (= (get_tile "a3") "0") (mode_tile "a2" 1) (mode_tile "a2" 0))"
  249.     )          ;点击时才起作用
  250.     (action_tile "accept" "(getdata)(done_dialog 1)")
  251.     (action_tile "cancel" "(done_dialog)")
  252.           ;(步骤4)激活并卸载对话框,并进行对话框隐藏后的操作。
  253.     (setq std (start_dialog))
  254.     (unload_dialog dcl_re)
  255.     (vl-file-delete dclname)
  256.     (if  (= std 1)
  257.   (bz)
  258.     )
  259.     (princ)
  260. )


回复 支持 反对

使用道具 举报

发表于 2017-12-25 16:42:52 | 显示全部楼层
本帖最后由 yoyoho 于 2017-12-25 16:47 编辑

感谢 langjs 分享程序!!!
但是在立体的物件貌似捕捉显示位置不正确,不知可否改善呢?

本帖子中包含更多资源

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

x
发表于 2017-12-26 16:23:03 | 显示全部楼层
yoyoho 发表于 2017-12-25 16:42
感谢 langjs 分享程序!!!
但是在立体的物件貌似捕捉显示位置不正确,不知可否改善呢?

将2D点改3D点可以改善!
圆是不是捕捉不到啊!
发表于 2017-12-27 08:25:23 | 显示全部楼层
谢谢,在2012和2018试过可以正确运行,收藏。
发表于 2017-12-27 10:51:18 | 显示全部楼层
本帖最后由 fl202 于 2017-12-27 11:24 编辑

文字组码

组码

说明

100

子类标记 (AcDbText)

39

厚度(可选;默认值 = 0)

10

第一对齐点(在 OCS 中)
DXF:X 值;APP:三维点

20, 30

DXF:第一对齐点的 Y 值和 Z 值(在 OCS 中)

40

文字高度

1

默认值(字符串本身)

50

文字旋转角度(可选;默认值 = 0)

41

X 相对缩放比例宽度(可选;默认值 = 1)
使用拟合类型的文字时,该值也将进行调整。

51

倾斜角(可选;默认值 = 0)

7

文字样式名(可选;默认值 = 标准)

71

文字生成标志(可选;默认值 = 0):
2 = 文字反向(在 X 轴方向镜像)
4 = 文字倒置(在 Y 轴方向镜像)

72

文字水平对正类型(可选;默认值 = 0)整数代码(非按位编码)
0 = 左对正;1 = 居中对正;2 = 右对正
3 = 对齐(如果垂直对齐 = 0)
4 = 中间(如果垂直对齐 = 0)
5 = 拟合(如果垂直对齐 = 0)
详细信息请参见组 72 和 73 整数代码表

11

第二对齐点(在 OCS 中)(可选)
DXF:X 值;APP:三维点
只有当 72 或 73 组的值非零时,该值才有意义(如果对正不是基线对正/左对正)

21, 31

DXF:第二对齐点的 Y 值和 Z 值(在 OCS 中)(可选)

210

拉伸方向(可选;默认值 = 0, 0, 1)
DXF:X 值;APP:三维矢量

220, 230

DXF:拉伸方向的 Y 值和 Z 值(可选)

100

子类标记 (AcDbText)

73

文字垂直对正类型(可选;默认值 = 0):整数代码(非按位编码):
0 = 基线对正;1 = 底端对正;2 = 居中对正;3 = 顶端对正
详细信息请参见组 72 和 73 整数代码表


下表详细说明了组码 72(水平对齐)和组码 73(垂直对齐)。
组 72 和 73 整数代码

组 73

组 72
0


1


2


3


4


5

3(顶端对正)

左上

中上

右上




2(居中对正)

左中

正中

右中




1(底端对正)

左下

中下

右下




0(基线对正)


中心


对齐

中间

拟合


如果组 72 和/或 73 值非零,则第一对齐点值被忽略,并且 AutoCAD 根据第二对齐点和文字字符串本身的长度和高度(在应用文字样式之后)计算新值。如果 72 和 73 值为零或缺失,则第二对齐点将没有意义。

不能捕捉圆心。
如果文字非左对齐时,楼主的测试程序会出错,文字不移动。
所以应该加入判断72/73组码是否非0语句,然后修改10或者11组码。
(if (and (= (cdr (assoc 72 ent)) 0) (= (cdr (assoc 73 ent)) 0) )
            (entmod (setq ent (subst(cons 10 pt)(assoc 10 ent)ent)))
            (entmod (setq ent (subst(cons 11 pt)(assoc 11 ent)ent)))
            )
谢谢楼主!
发表于 2017-12-27 14:28:42 | 显示全部楼层
fl202 发表于 2017-12-27 10:51
下表详细说明了组码 72(水平对齐)和组码 73(垂直对齐)。
如果组 72 和/或 73 值非零,则第一对齐点 ...

感谢回覆!!!!
发表于 2018-2-3 17:02:19 | 显示全部楼层
郎大师:能提供个不要扑捉,只要正交功能的grread函数吗?
发表于 2018-3-30 19:18:28 | 显示全部楼层
正在寻找grread的捕捉,学习了
发表于 2018-4-13 20:27:14 | 显示全部楼层
非常好,可以有动态引线吗,移动的橡皮筋效果
发表于 2018-5-30 21:12:41 | 显示全部楼层
很好很强大的功能,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-1 16:14 , Processed in 0.195986 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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