本帖最后由 狂刀lxx 于 2012-1-7 14:59 编辑
提供一个地6题的简练解答
 - ;|6.【曲线计算】10分 已知共面且不相交的一直线和一圆弧,求两个对象之间的最小距离。 |;
- (defun tt6 (line arc / A1 A2 CEN D P1 P2 PM) ;; by dreamskylxx 2012.1
- (setq line (vlax-ename->vla-object line)
- arc (vlax-ename->vla-object arc))
- (setq p1 (vlax-get line 'startpoint)
- p2 (vlax-get line 'endpoint)
- a1 (vlax-get arc 'startpoint)
- a2 (vlax-get arc 'endpoint)
- cen(vlax-get arc 'Center))
- (if
- (vlax-invoke line 'IntersectWith arc acExtendNone)
- 0.
- (progn
- (setq pm (vlax-curve-getclosestpointto line cen T)
- d (apply 'min (mapcar '(lambda(x y)(distance(vlax-curve-getclosestpointto x y) y))
- (list arc arc line line)
- (list p1 p2 a1 a2))))
- (if (vlax-curve-getdistatpoint line pm)
- (min d (distance (vlax-curve-getclosestpointto arc pm) pm))
- d
- )
- )
- )
- )
或者
 - ;; by dreamskylxx 2012.1
- (defun tt6 (line arc / A1 A2 CEN D ENT1 P1 P2 PM)
- (setq ent1 (entget line)
- p1 (cdr(assoc 10 ent1))
- p2 (cdr(assoc 11 ent1))
- a1 (vlax-curve-getstartpoint arc)
- a2 (vlax-curve-getendpoint arc)
- cen(cdr(assoc 10 (entget arc)))
- pm (vlax-curve-getclosestpointto line cen T)
- d (apply 'min (mapcar '(lambda(x y)(distance(vlax-curve-getclosestpointto x y) y))
- (list arc arc line line)
- (list p1 p2 a1 a2))))
- (if (vlax-curve-getdistatpoint line pm)
- (min d (distance (vlax-curve-getclosestpointto arc pm) pm))
- d
- )
- )
 - ;;测试程序
- (defun c:tt6 ()
- (setq line (car(entsel "\n 选直线:"))
- arc (car(entsel "\n 选圆弧:")))
- (tt6 line arc)
- )
第7题组定义,本人以前有个跟组操作相关的函数收集,连接 http://bbs.mjtd.com/thread-86821-1-1.html
在里面找一个改一下就ok了
GU_XL版主,第7题答案缺函数GXL-MASSOC,无法测试
 - ;;测试:(GPDEl (setq ent (car (entsel "\n选择要删除组的图元:"))))
- ;; 删除所选物体的所在组定义(支持多重组定义)
- (defun gpdel (gpe / el lst a gpdf gplst);;by dreamskylxx 2012.1
- (setq el (entget gpe))
- (if (setq lst (member '(102 . "{ACAD_REACTORS") el))
- (while (and (setq lst (cdr lst)) (= 330 (car (setq a (car lst)))))
- (if (= "GROUP" (cdr (assoc 0 (setq gpdf (entget (cdr a))))))
- (entdel (cdr(assoc -1 gpdf)))
- )
- )
- )
- )
第4题相对容易,也没有什么特别的处理方法,略过。
第8题,gu版的动作比较大,相当于把所有的都卸载,再重新加载。
我提个想法,能不能 用vl-unload-vlx先卸载指定fas或vlx,收集family再 load加载,收集family,两次进行对比。。。
|