明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2216|回复: 4

[求助]帮帮忙,看看这个该怎么做?

[复制链接]
发表于 2007-3-24 16:41 | 显示全部楼层 |阅读模式

今天碰到这个大难题,有上百个类似的图形,要一个一个的标上距离(图上原定的是300.00),大家帮我看看如何用lisp替换文字。

工作要求是这样的,这批图形中,红线和圆圈是固定不变的,每条红线和曲线只有一个交点(感谢上帝),只是各个图形中的两条闭合曲线有不同变化,要求圆圈上方文字替换为图形中点到外曲线的距离,下方文字替换为中点到内曲线的距离。

不胜感谢。

 

本帖子中包含更多资源

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

x
发表于 2007-3-25 18:40 | 显示全部楼层

有几个问题不是很清楚
1.每个图形只有2个闭合曲线?
2.你所说的中点是不是指所有红线汇集的那个点

 楼主| 发表于 2007-3-26 09:03 | 显示全部楼层
本帖最后由 作者 于 2007-3-26 9:06:19 编辑

是的,你说的都对。

为了便于编程,我把图加工了一下,所有红线之间的夹角相等,方向都是从外指向内,这样便于取出第一个的端点。小多边形的距离默认为301,大多边形的距离默认为302,这样易于判断。

红线可以根据颜色和其它线条区分开来。

如何判断大小多边形,我想通过面积大小来判断比较方便。

如何取得要替换的数值,可以根据红线的端点位置框选,依据文字的默认值来替换。

我现在遇到的问题是不知道autolisp如何取得曲线和直线的交点,我看了论坛上许多贴子,都是用VLISP来选择交点坐标的,我前面还有一大段AUTOLISP程序,这个只是其中的一段。但是我没有接触过VLISP,所以比较为难。

 

本帖子中包含更多资源

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

x
发表于 2007-3-26 15:39 | 显示全部楼层
(defun c:ts(/ YH_DISTANCE1 YH_DISTANCE2 YH_ENT1 YH_ENT2D YH_ENT3D YH_INDEX YH_INTPTS1 YH_INTPTS2 YH_OBJ1 YH_OBJ2 YH_PT0 YH_PT1 YH_PT2 YH_PT3 YH_PT4 YH_PT5 YH_PT6 YH_PT7 YH_PT8 YH_SSGET1 YH_SSGET2 YH_SSGET3 YH_SSGET4 YH_TEXT1 YH_TEXT2)
  (setq YH_ssget1 (ssget "X" '((0 . "POLYLINE") (8 . "尺寸")))
 YH_ssget2 (ssget "X" '((0 . "LWPOLYLINE") (8 . "0") (62 . 1)))
 )
  (setq YH_obj1 (vlax-ename->vla-object (ssname YH_ssget1 0))
 YH_obj2 (vlax-ename->vla-object (ssname YH_ssget1 1))
 YH_index 0
 YH_osmode (getvar "OSMODE")
 )
  (setvar "OSMODE" 0)
  (repeat (sslength YH_ssget2)
    (setq YH_ent1 (ssname YH_ssget2 YH_index)
   YH_pt0 (cdr (assoc 10 (reverse (entget YH_ent1))))
   YH_pt1 (cdr (assoc 10 (entget YH_ent1)))
   YH_intpts1 (vla-intersectwith YH_obj1 (vlax-ename->vla-object YH_ent1) acextendnone)
   YH_intpts1 (vlax-variant-value YH_intpts1)
   YH_pt2 (list (vlax-safearray-get-element YH_intpts1 0) (vlax-safearray-get-element YH_intpts1 1) (vlax-safearray-get-element YH_intpts1 2))
   YH_distance1 (distance YH_pt0 YH_pt2)
   YH_intpts2 (vla-intersectwith YH_obj2 (vlax-ename->vla-object YH_ent1) acextendnone)
   YH_intpts2 (vlax-variant-value YH_intpts2)
   YH_pt3 (list (vlax-safearray-get-element YH_intpts2 0) (vlax-safearray-get-element YH_intpts2 1) (vlax-safearray-get-element YH_intpts2 2))
   YH_distance2 (distance YH_pt0 YH_pt3)
   YH_text1 (rtos (max YH_distance1 YH_distance2) 2 2)
   YH_text2 (rtos (min YH_distance1 YH_distance2) 2 2)
   YH_pt4 (polar YH_pt1 (angle YH_pt0 YH_pt1) 5)
   YH_pt5 (polar YH_pt4 (* pi 0) 5)
   YH_pt6 (polar YH_pt4 (* pi 0.5) 5)
   YH_pt7 (polar YH_pt4 (* pi 1) 5)
   YH_pt8 (polar YH_pt4 (* pi 1.5) 5)
   YH_ssget3 (ssget "CP" (list YH_pt5 YH_pt6 YH_pt7) '((0 . "TEXT")))
   YH_ent2d (entget (ssname YH_ssget3 0))
          YH_ent2d (subst (cons 1 YH_text1) (assoc 1 YH_ent2d) YH_ent2d)
   YH_ssget4 (ssget "CP" (list YH_pt5 YH_pt7 YH_pt8) '((0 . "TEXT")))
   YH_ent3d (entget (ssname YH_ssget4 0))
          YH_ent3d (subst (cons 1 YH_text2) (assoc 1 YH_ent3d) YH_ent3d)
   YH_index (1+ YH_index)
   )
    (entmod YH_ent2d)
    (entmod YH_ent3d)
    )
  (setvar "OSMODE" YH_osmode)
  (princ)
  )
 楼主| 发表于 2007-3-26 20:58 | 显示全部楼层
用了一下,感觉良好,加再前面程序中,也能很好兼容,谢谢啦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 21:04 , Processed in 0.286444 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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