明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: alpha223334

[提问] 为什么最近用的文字居中lisp在cad2014中不能用了

[复制链接]
发表于 2020-1-2 23:25:01 | 显示全部楼层
wudechao 发表于 2019-12-23 11:40
(setq ss (ssget '((0 . "TEXT,MTEXT,TCH_TEXT,ATTRIB")))

大佬,可以选择,但是没效果
发表于 2020-2-2 23:34:24 | 显示全部楼层
最终版,在AUTOCAD2019, WIN10下,单行文字没能居中(没见动做),大佬再看看。
发表于 2020-2-3 16:26:41 | 显示全部楼层
renyonghua2014 发表于 2020-2-2 23:34
最终版,在AUTOCAD2019, WIN10下,单行文字没能居中(没见动做),大佬再看看。

你的cad是精简版本吧?改为完整版本!
发表于 2020-2-4 12:28:26 | 显示全部楼层
回,我的acad 2019是完全版非精简版。
发表于 2020-2-18 23:42:23 | 显示全部楼层
zj20190405 发表于 2019-12-22 23:05
大佬能不能麻烦添加支持多行文字

修改了 ffg-txtmpt函数,增加支持metxt和TCH_MTEXT。
发表于 2020-2-19 01:47:53 | 显示全部楼层
本帖最后由 wudechao 于 2020-2-19 02:00 编辑

;另外一种方法表格居中(填充判断版),缺点:表格必须封闭(前面那个是交叉线判断,速度快,且表格不需要封闭),这个速度比前面交叉线判断那个wzjz慢很多。优点:前面那个wzjz可能dis倍数问题,交叉线没有和表格相交,可能文字移动不了,这个可以,两个程序互补。建议:优先用前面那个,个别不行,才有这个。论坛某位大师的代码,我增加并修正了MTEXT,TCH_TEXT,TCH_MTEXT。
(defun c:wzjz2 (/ err)
(vl-load-com)
(setvar "cmdecho" 0)
(command ".undo" "be")
(defun algion (msg / ss lst i vlalst boxlst cor1 cor2 findboxpt newboxpt en1 en enlst date1 ty kuandu gaodu pt0)
  (princ msg)
  (setq ss (ssget '((0 . "TEXT,MTEXT,TCH_TEXT,TCH_MTEXT,ATTRIB"))))
  (setq lst nil)
  (setq i 0)
  (setq date1 (getvar "millisecs"))
  (repeat (sslength ss)
   (setq lst (cons (ssname ss i) lst))
   (setq i (1+ i))
  )
  (setq vlalst (mapcar
        'vlax-ename->vla-object
        lst
           )
  )
  (setq boxlst (mapcar
        '(lambda (x / cor1 cor2)
          (vla-getboundingbox x 'cor1 'cor2)
          (setq ty (vlax-get-property x 'objectname))
          (if (= ty "AcDbMText")
           (progn
            (setq x (vlax-vla-object->ename x))
            (setq kuandu (cdr (assoc 42 (entget x))))
            (setq gaodu (cdr (assoc 43 (entget x))))
            (setq pt0 (cdr (assoc 10 (entget x))))
            (setq cor1 (safearray-value cor1)
              cor2 (safearray-value cor2)
            )
            (if (< (- (car pt0) (car cor2)) 0)
             (setq cor2 (list (+ (car pt0) kuandu) (cadr pt0)))
             (setq cor2 (list (- (car pt0) kuandu) (cadr pt0)))
            )
            (if (> (- (cadr pt0) (cadr cor1)) 0)
             (setq cor1 (list (car pt0) (- (cadr pt0) gaodu)))
             (setq cor1 (list (car pt0) (+ (cadr pt0) gaodu)))
            )
            (setq x (vlax-ename->vla-object x))
            (list cor1 cor2)
           )
           (list (vlax-safearray->list cor1) (vlax-safearray->list cor2))
          )
         )
        vlalst
           )
  )
  (setq findboxpt (mapcar
           '(lambda (x)
             (polar (car x) (angle (car x) (cadr x)) (/ (distance (car x) (cadr x)) 2.0))
            )
           boxlst
          )
  )
  (setq newboxpt (mapcar
          '(lambda (x)
            (setq en1 (entlast))
            (vl-cmdf "_boundary" "a" "i" "n" "n" "" x "")
            (setq en (entlast))
            (if (not (equal en1 en))
             (progn
              (setq enlst (entget en))
              (setq lst (vl-remove-if-not '(lambda (y)
                            (= (car y) 10)
                           ) enlst
                )
              )
              (setq cor1 (vl-remove 10 (car lst))
                cor2 (vl-remove 10 (nth 2 lst))
              )
              (entdel en)
              (polar cor1 (angle cor1 cor2) (/ (distance cor1 cor2) 2.0))
             )
            )
           )
          findboxpt
         )
  )
  (mapcar
   '(lambda (x y y2)
     (vla-move x (vlax-3d-point y) (vlax-3d-point y2))
    )
   vlalst
   findboxpt
   newboxpt
  )
  (princ (strcat "耗时\"" (rtos (/ (- (getvar "millisecs") date1) 1000.000) 2 3) "\"秒"))
)
(setq err (vl-catch-all-apply 'algion (list "\n请选择文字: ")))
(command ".undo" "e")
(setvar "cmdecho" 1)
(princ)
)


回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-19 14:51:51 | 显示全部楼层
本帖最后由 zj20190405 于 2020-8-30 09:09 编辑
wudechao 发表于 2020-2-19 01:47
;另外一种方法表格居中(填充判断版),缺点:表格必须封闭(前面那个是交叉线判断,速度快,且表格不需要 ...

顶贴是美德....顶贴是美德....顶贴是美德....顶贴是美德....顶贴是美德....顶贴是美德....
发表于 2020-2-20 13:20:02 | 显示全部楼层
本帖最后由 zj20190405 于 2020-8-30 09:09 编辑
wudechao 发表于 2020-2-19 01:47
;另外一种方法表格居中(填充判断版),缺点:表格必须封闭(前面那个是交叉线判断,速度快,且表格不需要 ...

顶贴是美德....顶贴是美德....顶贴是美德....顶贴是美德....顶贴是美德....
发表于 2021-11-14 13:14:19 | 显示全部楼层
wudechao 发表于 2019-11-16 23:21
;文字表格秒居中(交叉线判断版),终结版本(经多次测试,比填充方式找中点约快215倍,2020.2.18修改 ffg-t ...

好用是挺好用。有时候点了没反应,也没返回时间?最终版, 要全部把直线打散才能用?
直接把代码另存为lsp调用不了把,报; 错误: 输入中的点位置不正确
发表于 2021-11-14 15:51:17 | 显示全部楼层
确实好用,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 10:47 , Processed in 0.163392 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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