明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1773|回复: 3

[求助]:[0331]XLINE转LINE问题

[复制链接]
发表于 2006-3-31 12:53:00 | 显示全部楼层 |阅读模式

[求助]:[0331]XLINE转LINE问题

小弟想写各将XLINE转LINE的程序,
但由于用到VLISP 对此不熟析,
以下是我的程序,

在执行中的这段
(setq pt:2 (vla-IntersectWith xobj le:ri acExtendNone ))
(setq pt:ri (VLAX-SAFEARRAY->LIST (VLAX-variant-value pt:2)) )

会出现以下讯息而中断,不知道该怎样解决.
#<variant 8197 ...>
[ActiveX 伺服器回覆一个错误讯息: 无效的索引。]

另外就该怎样判断此线有碰撞到的两点
好让这两点可以成一线呢?

烦请各位高手可以解答一下
谢谢~

(defun scvp (/ c03 c08 c04 c05 c07 c06 c09 c01 c02)
(setq c03 (getvar "viewctr")
c03 (trans c03 1 2)
c08 (getvar "viewsize")
c04 (getvar "screensize")
c07 (car c04)
c06 (cadr c04)
c09 (/ (* c08 c07) c06)
c01 (list (- (car c03) (* 0.5 c09)) (- (cadr c03) (* 0.5 c08)))
c02 (list (+ (car c03) (* 0.5 c09)) (+ (cadr c03) (* 0.5 c08)))
c01 (trans c01 2 1)
c02 (trans c02 2 1))
(list c01 c02)
)
 
(setq en  (car (entsel "\n 选择物件:")))
(setq xobj (vlax-ename->vla-object en))
 
(setq box (scvp))
(setq box4x (car (setq box1 (nth 0 box)))) ;左下
(setq box4y (cadr (setq box3 (nth 1 box)))) ;右上
(setq box2x (car (setq box3 (nth 1 box))))
(setq box2y (cadr (setq box1 (nth 0 box)))) 
(setq box4 (list box4x box4y )) ;左上
(setq box2 (list box2x box2y )) ;右下
(command "_.line" box1 box2 "")
(setq le:dn (vlax-ename->vla-object (entlast)))
(command "_.line" box2 box3 "")
(setq le:ri (vlax-ename->vla-object (entlast)))
(command "_.line" box3 box4 "")
(setq le:up (vlax-ename->vla-object (entlast)))
(command "_.line" box4 box1 "")
(setq le:le (vlax-ename->vla-object (entlast)))
 
(setq pt:1 (vla-IntersectWith xobj le:dn acExtendNone ))
(setq pt:dn (VLAX-SAFEARRAY->LIST (VLAX-variant-value pt:1)) )

(setq pt:2 (vla-IntersectWith xobj le:ri acExtendNone ))
(setq pt:ri (VLAX-SAFEARRAY->LIST (VLAX-variant-value pt:2)) )
 
(setq pt:3 (vla-IntersectWith xobj le:up acExtendNone ))
(setq pt:up (VLAX-SAFEARRAY->LIST (VLAX-variant-value pt:3)) )
 
(setq pt:4 (vla-IntersectWith xobj le:le acExtendNone ))
(setq pt:le (VLAX-SAFEARRAY->LIST (VLAX-variant-value pt:4)) )
 
(entdel le:dn)
(entdel le:ri)
(entdel le:up)
(entdel le:le)

=> 判断并取出有相交的两点 [不知道怎样判断取出?]
=> 重新绘制两点的LINE
=> END

发表于 2006-3-31 16:52:00 | 显示全部楼层
  1. (defun C:TT (/ BOX EN LE:DN PT:1 PT:DN XOBJ)
  2.   (setq EN (car (entsel "\n 选择物件:")))
  3.   (setq XOBJ (vlax-ename->vla-object EN))
  4.   (setq BOX (SCVP))
  5.   (command "_.rectang" (nth 0 BOX) (nth 1 BOX))
  6.   (setq LE:DN (vlax-ename->vla-object (entlast)))
  7.   (setq PT:1 (vla-intersectwith XOBJ LE:DN acextendnone))
  8.   (setq PT:DN (vlax-safearray->list (vlax-variant-value PT:1)))
  9.   (vla-delete LE:DN)
  10.   (vla-delete XOBJ)
  11.   (command "_.LINE"
  12.     "non"
  13.     (list (nth 0 PT:DN) (nth 1 PT:DN) (nth 2 PT:DN))
  14.     "non"
  15.     (list (nth 3 PT:DN) (nth 4 PT:DN) (nth 5 PT:DN))
  16.     ""
  17.   )
  18.   (princ)
  19. )
 楼主| 发表于 2006-4-3 08:11:00 | 显示全部楼层

感谢版大的解答

谢谢您了

发表于 2015-9-5 12:36:11 | 显示全部楼层
麻烦您可不可以改多框选
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 15:16 , Processed in 0.197116 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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