找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 471|回复: 0

[其他]:XD,看看这个程序

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-9-23 17:52:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
xdrx_isinside 莫名其妙?拾取点位置不同将有不同的结果。

  1. ;;API与CAD命令结合, 因为 xdrx_isinside 的 BUG 最后的局部效果不理想
  2. ;;
  3. (if (not $xdtb_globle_scale)
  4.   (setq $xdtb_globle_scale 100.)
  5. )
  6. (defun c:test (/ pt e e0 ss sp ep sp1 ep1 pts)
  7.   ;;先关闭轴线图层
  8.   (setq pt (getpoint "\n选择内部点: "))
  9.   (if (setq e (bpoly pt));;生成边界
  10.     (progn
  11.       ;;======程序结构===========;;
  12.       (xdrx_begin)               ;;标记程序开始
  13.       (xdrx_sysvar_push "osmode");;保存系统变量
  14.       (setvar "osmode" 0)
  15.       ;;=========================
  16.       (vl-cmdf ".offset" (* 2.85 $xdtb_globle_scale) (list (entlast) pt) pt "");;向内偏移
  17.       (setq e0         (entlast)
  18.             pts         ($xdlsp_pline_vertex e0)
  19.       )
  20.       ;;生成园点
  21.       (mapcar '(lambda (x y / midp p1 p2 p0)
  22.                  (setq midp (xdrx_midp x y)
  23.                        p0   (if        (xdrx_isinside
  24.                                   (polar midp
  25.                                          (+ (angle x y) _pi2)
  26.                                          (* 1.5 $xdtb_globle_scale)
  27.                                   )
  28.                                   e0
  29.                                 )
  30.                               (polar midp
  31.                                      (+ (angle x y) _pi2)
  32.                                      (* 1.5 $xdtb_globle_scale)
  33.                               )
  34.                               (polar midp
  35.                                      (- (angle x y) _pi2)
  36.                                      $xdtb_globle_scale
  37.                               )
  38.                             )
  39.                        p1   (polar p0 (angle x y) (* 2 $xdtb_globle_scale))
  40.                        p2   (polar p0 (angle x y) (* -2. $xdtb_globle_scale))
  41.                  )
  42.                  (vl-cmdf ".donut" "0" (* 1.5 $xdtb_globle_scale)  p0 p1 p2 "")
  43.                )
  44.               pts
  45.               (append (cdr pts) (list (car pts)))
  46.       )
  47.       (vl-cmdf ".copy" (list e0 pt) "" '(0. 0. 0.) "@");;生成偏移线的副本
  48.       (xdrx_setmark);;设置标记
  49.       (vl-cmdf ".explode" (entlast) "");;分解副本偏移线
  50.       (xdrx_setsstodb (xdrx_getss) 0);;获取分解后的实体并放入内部数据库
  51.       (while (setq e1 (xdrx_getentdata 0));;取出内部第一数据库实体
  52.         (setq sp     (xdrx_getentdxf 10);;起点
  53.               ep     (xdrx_getentdxf 11);;端点
  54.               midp   (xdrx_midp sp ep)
  55.              
  56.               pangle (angle sp ep)
  57.               sp1    (polar sp (+ pangle pi) (* 3 $xdtb_globle_scale));;起点延伸
  58.               ep1    (polar ep pangle (* 3 $xdtb_globle_scale));;端点延伸
  59.         )
  60.         (if (xdrx_isinside sp1 e0);;判断延伸点是否在副本偏移线内部
  61.           (xdrx_modent 10 sp1);;如果在内部修改起点
  62.         )
  63.         (if (xdrx_isinside ep1 e0)
  64.           (xdrx_modent 11 ep1);;端点延伸后在内部修改端点
  65.         )
  66.       )
  67.       (vl-cmdf ".pedit" "m" (xdrx_getss) "" "y" "j" "1" "w" $xdtb_globle_scale "");;利用2002中的 "M" 和 "J" 选项连接线段并加粗
  68.       (xdrx_entity_delete e0)
  69.       (xdrx_entity_delete e)
  70.       ;;========================;;
  71.       (xdrx_sysvar_pop)         ;;恢复系统变量
  72.       (xdrx_end)                ;;标记程序结束
  73.       ;;========================;;
  74.       (princ)
  75.     )
  76.   )
  77. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-10 07:41 , Processed in 0.293135 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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