周末,出个题目给大家挑战下
本帖最后由 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 (carss)
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已包含了各子函数的定义
;;
;; 夹角取大值
本帖最后由 masterlong 于 2015-11-14 21:05 编辑
这是一个具有现实意义的课题
本人电气专业
很早以前做的框选灯具自动连线的程序
包括灯具配开关的程序
所用连线原则就是最小距离点对
正如截图所示
很多情况下的连线效果非常差
一直想解决也做过很多尝试
但始终没有合适的办法
直到某一天灵光一闪
值得说明的是
我是不用天正电气、浩辰电气画图的
据使用的同事说
它们都没有提供框选灯具自动连线的功能
猜测原因之一
是不好确定选择集的起点和终点
包括本论坛的很多代码
在处理类似问题时
都需要指定起点
而另一个原因就是本帖所指出的问题
本场合不适用最小距离点对原则
说这些只是想说明
这个问题并没有那么简单
虽然已经有了自己的解决之道
还是很想看到不同的方法
主要是论坛里面高手太多了
特别是数学NB的朋友一抓一大把
天正没能解决这个问题
相信只是因为
以前论坛里没人提出这个问题 我不干电气
但也支持你一下 目测看,美观与否跟灯具图块大小有一定的关系。
从截图上判断,应该可以通过判断开关点位平移出灯具中心到墙皮的垂线点的特定距离后,调整连线位置从长边中点改到较近的短边中点。 no function definition: *ENT2OBJ*
mmmmmm 发表于 2015-11-15 18:45 static/image/common/back.gif
目测看,美观与否跟灯具图块大小有一定的关系。
从截图上判断,应该可以通过判断开关点位平移出灯具中心到 ...
感谢你的参与
你的分析有一定的道理
灯具和开关之间的关系比较简单
可以理解为“4点表”与1个单点的关系
这种情况下计算相对位置
容易判断出单点与4点表的哪个点连接比较好
题目麻烦的是两个4点表之间
如何建立一个数学模型
使得连线看起来比较舒适
菜卷鱼 发表于 2015-11-15 23:08 static/image/common/back.gif
no function definition: *ENT2OBJ*
(setq *obj2ent* vlax-vla-object->ename)
回头我更新下附件
下午要开会准备资料
可能要到晚上才有空 xyp1964 发表于 2015-11-16 07:42 static/image/common/back.gif
院长果然厉害
看了下连线的效果
只有极个别的连线略有瑕疵
院长方便讲下思路么
页:
[1]
2