明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1907|回复: 11

[求助]ZZXXQQ朋友,您改后的"线上插字符"还有点小问题

  [复制链接]
发表于 2008-6-16 14:12 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-6-24 8:23:14 编辑

怎样达到图示效果呢?

执行命令

输入字高

输入内容

连续插入

谢谢

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2008-6-16 15:21 | 显示全部楼层
你不是达到了?
 楼主| 发表于 2008-6-16 16:19 | 显示全部楼层
本帖最后由 作者 于 2008-6-16 16:47:05 编辑

carrot1983发表于2008-6-16 15:21:00你不是达到了?

这是一个大程序中的部分,带狗的,其他内容我是不需要的,而相关的内容我也不能察看,美中不足是该命令仅适合LINE,最好也能适合PLINE,所以单独求助编写一个

发表于 2008-6-16 17:07 | 显示全部楼层

http://carrot1983.blog.sohu.com/82096186.html

应该可以满足你的需要

 楼主| 发表于 2008-6-16 19:30 | 显示全部楼层
本帖最后由 作者 于 2008-6-18 10:02:42 编辑

carrot1983发表于2008-6-16 17:07:00http://carrot1983.blog.sohu.com/82096186.html应该可以满足你的需要

挺好的,适合范围很大呀,美中不足有两点

1、输入的字符、包括字高不能默认保存,以备重复使用

2、字符仅能一次输入1个,不能重复插入,毕竟大多数情况下都在重复插入这种环境下使用的

方便更改一下吗,谢谢

 楼主| 发表于 2008-6-18 12:27 | 显示全部楼层

carrot1983的好程序

如果能改成输入一次文字内容、字高,然后即可随意多点插入就完美了

请高手指点,谢谢

本帖子中包含更多资源

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

x
发表于 2008-6-18 22:19 | 显示全部楼层
  1. ;;;CurveAngle
  2. (defun CurveAngle (ENAME P / ANG OBJECT P P1 TAN)
  3. (setq object (vlax-ename->vla-object ename))
  4. (setq tan (vlax-Curve-GetFirstDeriv
  5.        object (vlax-Curve-GetParamatDist object (vlax-curve-getDistAtPoint object p))
  6.         )
  7. )
  8. (setq p1 (polar p (atan (/ (cadr tan) (car tan))) 1))
  9. (setq ang (if (= (car tan) 0) 0 (angle p1 p)))
  10. (if (and (> ang (* 0.5 pi)) (< ang (* 1.5 pi)))
  11.   (setq ang (- ang pi)) ;_始终取锐角
  12. )
  13. ang
  14. )
  15. ;;getbox
  16. (defun getbox (e / BL BMAX BMIN BR BUTTOMX BUTTOMY TL TOPX TOPY TR)
  17. (vla-GetBoundingBox (vlax-ename->vla-object e) 'bmin 'bmax)
  18. (setq bmin (vlax-safearray->list bmin)
  19.        bmax (vlax-safearray->list bmax)
  20.        buttomx (car bmin)
  21.        buttomy (cadr bmin)
  22.        topx (car bmax)
  23.        topy (cadr bmax)
  24.        bl bmin
  25.        br (list topx buttomy)
  26.        tr bmax
  27.        tl (list buttomx topy))
  28. (list bl br tr tl)
  29. )
  30. ;;;GetInters
  31. (defun GetInters (e1 e2 / 3DJD 3DJDLST SAFEJDLST VARJD)
  32. (setq o1 (vlax-ename->vla-object e1))
  33. (setq o2 (vlax-ename->vla-object e2))
  34. (setq varjd (vla-intersectwith o1 o2 acExtendnone))
  35. (if (> (vlax-safearray-get-u-bound (vlax-variant-value varjd) 1) 1) (progn
  36.   (setq safejdlst (vlax-safearray->list (vlax-variant-value varjd)))
  37.       ;;safearray数组转换为list表
  38.   (setq i 0
  39.         3djdlst nil)
  40.   (repeat (/ (length safejdlst) 3)
  41.    (setq 3djd (list (nth i safejdlst) (nth (+ 1 i) safejdlst)
  42.              (nth (+ 2 i) safejdlst)))
  43.    (setq 3djdlst (cons 3djd 3djdlst))
  44.    (setq i (+ 3 i))
  45.   )
  46.   3djdlst
  47. )
  48.   nil
  49. )
  50. )
  51. ;;;textinline 文字插线 carrot1983 2008.03
  52. (defun c:textinline ()
  53. (vl-load-com)
  54. (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  55. (if (and (= (getvar "tilemode") 0) (= (getvar "cvport") 1))
  56.   (setq acsp (vla-get-paperspace adoc))
  57.   (setq acsp (vla-get-modelspace adoc))
  58. )
  59. (if (/= (setq txt (getstring "\n输入文字<退出>: ")) "")
  60.   (while (and (setq p (getpoint "\n请拾取文字插线上的一点<退出>:")) ;_曲线拾取的点p
  61.        (setq p (osnap p "NEA")))
  62.    (setq h (getdist p "\n指定文字高度<3.0>: "))
  63.    (if (null h) (setq h 3.0))
  64.    (if (setq ss (ssget p '((0 . "ARC,CIRCLE,ELLIPSE,*LINE")))) (progn
  65.     (setq ename (ssname ss 0))
  66.       ;;建立文字
  67.     (setq ang (CurveAngle ename p))
  68.     (setq txtobj (vlax-invoke acsp 'Addtext txt p h))
  69.     (vla-put-Rotation txtobj ang)
  70.     (setq alignmentPnt (vlax-make-safearray vlax-vbDouble '(0 . 2)))
  71.     (vlax-safearray-fill alignmentPnt p)
  72.     (vla-put-alignment txtobj acAlignmentMiddle)
  73.     (vla-put-InsertionPoint txtobj alignmentPnt)
  74.     (vla-put-TextAlignmentPoint txtobj alignmentPnt)
  75.     (setq txtename (vla-object->ename.htm target=_black>vlax-vla-object->ename txtobj))
  76.       ;;建立矩形     
  77.     (setq txtbox (getbox txtename))
  78.     (setq ptlst (apply 'append (mapcar '(lambda (x) (list (car x) (cadr x))) txtbox)))
  79.     (setq arraySpace
  80.          (vlax-make-safearray vlax-vbdouble (cons 0 (- (length ptlst) 1)))
  81.     )
  82.     (setq pnts (vlax-safearray-fill arraySpace ptlst))
  83.     (vlax-make-variant pnts)
  84.     (setq PLObj (vla-AddLightWeightPolyline acsp pnts))
  85.     (vla-put-Closed PLObj :vlax-true)
  86.     (setq elast (entlast))
  87.       ;;=============
  88.     (setq iplst (GetInters ename elast))
  89.     (command "._break" ename (car iplst) (cadr iplst))
  90.     (vla-erase (vlax-ename->vla-object elast))
  91.    )
  92.     (princ "\n安全退出")
  93.    )
  94.   )
  95. )
  96. (princ)
  97. )
 楼主| 发表于 2008-6-19 07:57 | 显示全部楼层

 错误: no function definition: VLA-OBJECT->ENAME

执行命令效果如图,插入文字的地方直线没有删除,并且还是仅能输入一个文字

谢谢

本帖子中包含更多资源

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

x
 楼主| 发表于 2008-6-24 08:24 | 显示全部楼层
本帖最后由 作者 于 2008-6-24 9:12:56 编辑

高手在,改的醒目的标题

本帖子中包含更多资源

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

x
 楼主| 发表于 2008-6-26 09:51 | 显示全部楼层
本帖最后由 作者 于 2008-6-26 10:07:34 编辑

(setq txtename (vla-object->ename.htm target=_black>vlax-vla-object->ename txtobj))
改成

(setq txtename (vlax-vla-object->ename txtobj)),可以执行了

但还有一个问题,命令行内总是出现提示"指定文字高度<3.0>",改成提示一次就更好了

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

本版积分规则

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

GMT+8, 2024-4-28 13:37 , Processed in 0.424664 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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