求高手编写LISP程序
本帖最后由 fhcd88 于 2013-1-9 22:39 编辑求高手编写LISP程序,请下载
程序要求:在附件中用鼠标点绘形成如红线多边形选择框,在与其他线相交处打断其他线,保留红线框内多线段,红线框外线段删除。
选择框可用请用如下代码生成:
(setq gpt (getpoint "\n 第一圈围点: ") lst (list gpt))
(while gpt
(initget 32)
(princ "\n 指定直线的端点: ")
(if (setq gpt (getpoint gpt "\n 指定直线的端点: "))
(progn
(setq lst (cons gpt lst))
(redraw);;;
(mapcar '(lambda (p1 p2)
(grvecs (list -7 p1 p2))
)
lst
(append (cdr lst) (list (car lst)))
)
)
)
)
本帖最后由 Andyhon 于 2013-1-9 22:33 编辑
Try only ...
(vl-load-com)
(Defun c:test ()
(setq pt (getpoint "\n第一圈围点: "))
(command "pline" pt)
(while (= (logand (getvar "CmdActive") 1) 1) (command pause))
(setq ee (entlast))
(setq ;; (entsel "\n 选取红线多边形选择框: ")
obj (vlax-ename->vla-object ee) ; obj
)
(vla-offset obj 1)
(setq aa1(vla-get-area (vlax-ename->vla-object (setq ee1 (entlast)))))
(vla-offset obj -1)
(setq aa2(vla-get-area (vlax-ename->vla-object (setq ee2 (entlast)))))
(if (< aa2 aa1)
(setq eee ee1)
(setq eee ee2)
)
(setq pts (acet-geom-pline-point-list eee nil))
(entdel ee1)
(entdel ee2)
(SetVar 'OsMode 0)
(repeat 2
(command "trim" ee "" "f")
(mapcar 'command pts)
(command "" "")
)
) 给个图样 留个脚印,等答案! 本帖最后由 fhcd88 于 2013-1-9 22:31 编辑
试了一下,出错,再者能否就使用我贴子中给的绘制选择框的程序啊,请把代码加进去,谢谢 ...出错...
得有 Acet-* 函数;
搜 ET / Express Tools 我再试试,能否还是请你完整用我给的绘选择框的代码绘选择框,因为我程序中其他部分在用 本帖最后由 Andyhon 于 2013-1-9 23:41 编辑
(Defun test ()
(setq gpt (getpoint "\n 第一圈围点: ")
lst (list gpt)
)
(while gpt
(initget 32)
(princ "\n 指定直线的端点: ")
(if (setq gpt (getpoint gpt "\n 指定直线的端点: "))
(progn
(setq lst (cons gpt lst))
(redraw)
(mapcar '(lambda (p1 p2)
(grvecs (list -7 p1 p2))
)
lst
(append (cdr lst) (list (car lst)))
)
)
)
)
lst
)
(Defun c:test ()
;; (setq pt (getpoint "\n第一圈围点: "))
(setq pts (test))
(command "pline")
(mapcar 'command pts)
(command "C")
(setq ee (entlast))
;; 红线多边形选择框请先绘制
(setq ;; (entsel "\n 选取红线多边形选择框: ")
obj (vlax-ename->vla-object ee) ; obj
)
(vla-offset obj 1)
(setq aa1(vla-get-area (vlax-ename->vla-object (setq ee1 (entlast)))))
(vla-offset obj -1)
(setq aa2(vla-get-area (vlax-ename->vla-object (setq ee2 (entlast)))))
(if (< aa2 aa1)
(setq eee ee1)
(setq eee ee2)
)
(setq pts (acet-geom-pline-point-list eee nil))
(entdel ee1)
(entdel ee2)
(SetVar 'OsMode 0)
(repeat 2
(command "trim" ee "" "f")
(mapcar 'command pts)
(command "" "")
)
(redraw)
(entdel ee)
(setq ss (ssget "WP" pts))
) 能否再帮忙加两行代码,一是做一个选择集选择所绘框内所有图元,含框线经过的图元;二是,删除所绘框,谢谢 能加上后面的代码的话,可以就用你前面的程序直接绘框