本帖最后由 masterlong 于 2015-11-22 13:03 编辑
先看截图
图中青色图元为图块
形状为矩形
设定连接点为4边的中点
要求两个图块之间自动连线
连线的效果要“美观”
当然“美观”是个主观的感觉
但可以明确的告诉大家
答案不是两个点表的最小距离点对
截图中的黄色线
是采用最小距离点对连接的效果
云线框出的连线勉强可以接受
打叉的是不能接受的连线
而绿色线是比较理想的连线
上传的附件中包含:
1.测试dwg
dwg中没有采用图块
而是直接采用矩形方便取点
2.测试lsp
为了方便大家参与
lsp中已经完成了分组排序等代码
运行命令dd
直接框选矩形
程序会自动分组连线
当前的连线
采用的是最小距离点对原则
而本次挑战的内容
就是完成核心函数goodline的代码
3.我的lisp程序
已编译为fas
它的连线效果正如截图中的绿线
看大家参与的情况
一定时间后公布源代码
参与的朋友请上传截图
无论是否能达到理想的效果
我都会给予加分
院长的思路超赞
我的答案在17楼
上传lsp文件主程序代码
 - (defun c:dd()
- (setvar "cmdecho" 0)
- (command "undo" "g")
- (princ "\n 成组选择矩形....")
- (setq ss (ssget '((0 . "LWPOLYLINE")(8 . "deng"))))
- (setq sslist (dd对ss进行分组))
-
- (foreach ssss sslist
- (foreach ss ssss
- (setq dda (car ss)
- ddb (cadr ss)
- )
- (setq aptlist (massoc 10 (entget dda))) ;;获取矩形的4角点
- (setq bptlist (massoc 10 (entget ddb)))
- (setq cptlist (getptsmidpo aptlist)) ;;获取矩形的4边中点
- (setq dptlist (getptsmidpo bptlist))
-
- ;;两点表求最小距离点对并连线
- (minline cptlist dptlist) ;;这个连线很多情况下不是希望的连线
-
- ;;两点表求最合适的连线
- ;;(goodline .... ) ;;本帖就是要求完成子函数goodline,使得连线最美观
- )
- )
- (command "undo" "e")
- (princ)
- )
- ;;
- ;;附件lisp已包含了各子函数的定义
- ;;
|