明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1788|回复: 7

如何能够获得圆(circle)内的文字?

[复制链接]
发表于 2006-3-11 23:03 | 显示全部楼层 |阅读模式
有这么一个问题,如果已知圆的直径,如何能够通过查找圆而获得所有同一直径的圆内的文字?
假设文字完全被圆嵌套,而文字的对齐方式等属性未知。


盼解^_^
发表于 2006-3-11 23:53 | 显示全部楼层
  1. (load "xyp_lib.vlx")   ;版本 V.20060210
  2. ;|下载和加载通用函数(可在签名栏直接下载后放到搜索路径下)
  3. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  4. ★1·在acad.lsp中增加(load"xyp_lib")
  5. ■2·在每个程序内增加(load"xyp_lib")
  6. ■3·在command下,输入(load"xyp_lib")
  7. ■4·在菜单.mnl中增加(load"xyp_lib")
  8. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  9. [COLOR=red] ★通用函数下载地址:[/COLOR]
  10. [url]http://bbs.mjtd.com/forum.php?mod=viewthread&tid=37554[/url]
  11. |;
  12. ;;;
  13. (defun c:test ()
  14.   (setq DIA (UREAL 7 "" "\n直径" DIA)
  15. rad (/ dia 2.0)
  16. ss  (ssget (list (cons 0 "CIRCLE") (cons 40 rad)))
  17. ss1 (ssadd)
  18. i   -1
  19.   )
  20.   (setvar "osmode" 0)
  21.   (while (setq s1 (ssname ss (setq i (1+ i))))
  22.     (setq pt1 (xyp-get-MinMaxPoint s1 1)
  23.    pt9 (xyp-get-MinMaxPoint s1 9)
  24.    ss2 (ssget "w" pt1 pt9)
  25.    ss3 (ssget "p" (list (cons 0 "TEXT")))
  26.     )
  27.     (command "select" ss1 ss3 "")
  28.     (setq ss1 (ssget "p"))
  29.   )
  30.   ss1
  31. )
 楼主| 发表于 2006-3-12 09:23 | 显示全部楼层
谢谢二楼版主的热心解答,但你用到了你的通用函数库,所以也就隐蔽了一些实现,不利于学习呵呵(能公开函数库的源码就好啦^_^)

不过能否解释一下你用到的这个函数?
(xyp-get-MinMaxPoint s1 1)
(xyp-get-MinMaxPoint s1 9)
发表于 2006-3-12 09:27 | 显示全部楼层
  1. ;;;------------- xyp-get-MinMaxPoint -------------
  2. ;;;指定对象最小外接矩形的九点坐标
  3. ;;;(xyp-get-MinMaxPoint 实体名 参数)
  4. ;;;参数=1~9,上中下9位码;其他均为左下角点
  5. ;;; 7        8         9 maxpoint '(x2 y2)
  6. ;;;  ------------------
  7. ;;;  |                |
  8. ;;;  |                |
  9. ;;;  |                |
  10. ;;; 4|       5        |6
  11. ;;;  |                |
  12. ;;;  |                |
  13. ;;;  |                |
  14. ;;;  ------------------
  15. ;;; 1        2         3
  16. ;;;minpoint '(x1 y1 )
  17. (defun xyp-get-MinMaxPoint (ename mode / pointmax pointmin x1 x2 y1 y2 dx dy point)
  18.   (vla-getboundingbox
  19.     (vlax-ename->vla-object ename)
  20.     'minpoint
  21.     'maxpoint
  22.   )
  23.   (setq pointmax (vlax-safearray->list maxpoint)
  24. pointmin (vlax-safearray->list minpoint)
  25. x1  (car pointmin)
  26. x2  (car pointmax)
  27. y1  (cadr pointmin)
  28. y2  (cadr pointmax)
  29. dx  (/ (- x2 x1) 2.0)
  30. dy  (/ (- y2 y1) 2.0)
  31.   )
  32.   (cond ((= mode 1) (setq point pointmin))
  33. ((= mode 2) (setq point (list (+ x1 dx) y1)))
  34. ((= mode 3) (setq point (list x2 y1)))
  35. ((= mode 4) (setq point (list x1 (+ y1 dy))))
  36. ((= mode 5) (setq point (list (+ x1 dx) (+ y1 dy))))
  37. ((= mode 6) (setq point (list x2 (+ y1 dy))))
  38. ((= mode 7) (setq point (list x1 y2)))
  39. ((= mode 8) (setq point (list (+ x1 dx) y2)))
  40. ((= mode 9) (setq point pointmax))
  41. (t (setq point pointmin))
  42.   )
  43.   point
  44. )
发表于 2006-3-12 09:43 | 显示全部楼层
xyp1964版,这个通用函数写得不错,其实以前也看到过你这个函数,当时没仔细看,没看明白,今天细看一下,总算明白。挺不错的一个函数,收下了。
 楼主| 发表于 2006-3-12 10:21 | 显示全部楼层
; 错误: no function definition: VLAX-ENAME->VLA-OBJECT

不知道使用VLAX-函数是不是要进行一些初始化工作?

发表于 2006-3-12 10:45 | 显示全部楼层
程序前面加上(vl-load-com)
 楼主| 发表于 2006-3-12 11:03 | 显示全部楼层
看来也要学一下vl等函数的使用了
 谢谢楼上各位高手^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-18 21:57 , Processed in 0.151743 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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