autocad二次开发,放坡算法各位高手,请教一个问题。关于autocad二次开发的放坡算法,至于放坡的解释,请看:htt
autocad二次开发,放坡算法
各位高手,请教一个问题。关于autocad二次开发的放坡算法,至于放坡的解释,请看:http://www.hudong.com/wiki/%E6%94%BE%E5%9D%A1和http://www.hudong.com/wiki/%E6%94%BE%E5%9D%A1
不知道大家有没有这方面的资料和成功的算法,提供思路、资料或代码,本人都非常感谢!
看一下
放坡的平面图:http://184.72.244.156/u/3111836/plan.JPG
放坡的剖面图:http://184.72.244.156/u/3111836/section.JPG
autocad文件:http://184.72.244.156/u/3111836/Drawing1.dwg
[最优解释]
没有倒着放,图上没显示出一离散点的信息,可能你看反了.
交点的坐标值倒是有,但是,如果比较A,B线段在X轴上投影的长度,不具有全面性,如果A线段比B线段长,就不行了,我图中所示只是一个特例。
[其他解释]你已知黄色的线,画紫色的线。
我觉得你的难点在找那条(几条)对的等高线,紫色是黄色的平行线,等量偏移,两个新的起止点, 画线,这个简单吧
dim objLine as acadline
set objLine=thisdrawing.paperspace.addline ....
然后呢objline.IntersectWith 这个东东给你返回和目标object的交点坐标。拿到坐标后重新对新画线段的起止点作调整
但是首先你要找到你想要的等高线。这个找等高线的方法要根据你怎么画的等地形高线来确定。如果你已经把相应的数据放到相应地形等高线的Xdata里面了那就简单多了。
另外一种方法就是对于objLine画的长点,然后做selectionset。然后循环得到的东西找到你要的地形等高线。
[其他解释]简单的目标被你描述得复杂化了,有“专家”素质!
1)已知坝顶(双黄线)
2)已知两边的坡度 1:2, 1:3
3)那么每条紫色等高线与黄线的平易距离是确定的
4)需要求的就是相同高度的紫线(直线)和白线(不规则曲线)的交点,很基本的图形算法:
(a)先手工在原始地形图上用不同的颜色填充不同的高度。
(b)程序按照每条紫线(直线)的走向逐点扫描 (a) 做成的地形图,根据该点的颜色可以知道高度,白点两边如果正好一边比紫线高一边比紫线低,就是交点。
(c)这些交点把紫线分成了不同的线段,再人工剔除一些多余的线段(两边山峰外面的紫色等高线)。
完成!
[其他解释] \
[其他解释]你这破怎么倒着放。。。。
不知道你有没有交点位置的值,如果有直接比较3个交点的x值,然后相邻的值相减,最大的就是你需要的?
[其他解释]阿勇怎么改行啦,玩起了CAD!还是老鸟讲得很专业,我没学过!
[其他解释]"为什么选B不选A"是因为B所处位置是一山谷,我筑坝是要填土的,而A段地面标高高于我所要求的标高,如果要达我要的标高,是要挖土的,所以,A段不需要。
“出现多个交点的时候可以根据线段长短来判断”,这个感觉也是没有通用性。
“当出现多于2个交点的时候,选择在黄线朝坡地影射的投影范围内部分大的那一段(从图上看就是B段了)。”,这个感觉有点可行,但出现33楼中图片所示的,某一标高,出现两条或多条线是我需要的紫色线时,就难弄了。
IntersectWith慢吗?真没细研究过!
让用户自己选择,有点儿小麻烦,我想突破一下,有一个软件:鸿业土方计算,它里面有个放坡功能,我感觉很好,想达到它哪个水平,看来的确有些难度。
[其他解释]该回复于2011-05-09 15:05:00被版主删除
[其他解释]我在第一楼里放了autocad文件:http://184.72.244.156/u/3111836/Drawing1.dwg,地形等高线“标高”属性是它的标高。
判断山谷还是山脊,主要看等高线标高是凸向标高大的方向还是标高小的方向,如果凸向标高小的方向,说明是山脊,反之,如果是凸向标高大的方向,说是山谷。
[其他解释]这个好象驴妹拿手
------其他解决方案--------------------
不好意思,沙发是我的
[其他解释]完全不知道,你在说虾米阿
看不懂放坡是什么东东
[其他解释]貌似grading
[其他解释]看了一下,要是是一个平面放坡就好搞了.....这种立体范围计算没玩过,帮顶顶
[其他解释]偷竊谷歌地球現成的果子啊
[其他解释]你要求什么啊,画什么线
[其他解释]。。。。。。。。。。忘了怎么算了,我记得挺简单的,放多大的破,有几个已知数,直接就算出来了,就是忘了到底怎么算了,刚才努力的想了半天 也没想起来
[其他解释]你先把它的手工算法整理好,再转换成计算机算法吧。
这个工程方法其实就是要保证每个节点的坡度不能太大,如果有太大的地方,就把它做成缓坡。从而防止塌方。
[其他解释]你要绘制等高线?
也就是说不是直线,而是多个arc拼接成的?
plan.jpg里面黄色的,紫色的,白色的,哪个是你要画的?如果是白色的实在不会阿
[其他解释]三角函數跑哪兒去了,地球的水平面是一條直線的旋轉構成的,組成的,啥區別
[其他解释]学习学习,对我而言是新东西
[其他解释]脑袋不好用了
[其他解释]~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔~~海拔
[其他解释]chinaboyzyq (猴哥) 好像也是玩CAD的
也许CAD中有专门的现成的函数
[其他解释]举贤得当,坐等接分。
[其他解释]\
[其他解释] \
[其他解释]黑线高度为已知条件,按已知条件放破比例可以得到红线的投影长度,即
蓝线长度,勾股定理可求出红线长度
[其他解释]好好實地查勘一番
[其他解释]沙发自己坐
我所说的放坡算法,是指在现在地形图上,进行放坡,先确定放坡顶部位置(标高90),然后按放坡比进行偏移,如按1:3放坡,顶部向放坡一侧偏移3米,放坡线标高即为89,放坡线与标高为89的地形等高线相交,去掉多余的部分,即为需要的放坡线。
[其他解释]期待clear_zero
[其他解释]实际上,就是相当于山谷中建一座坝,断面为梯形,plan.JPG为坝的平面图,section.JPG为坝的剖面图
现在,我想通过手动确定坝顶位置,然后给定坝两侧坡度,自动在地形图上绘制坝表面的等高线!
绘制的结果就是plan.JPG图所示内容!
不知我说清楚没有,这个有点儿难以表述!
[其他解释]黄色的直线是坝顶两条线,紫色的线是坝表面的等高线,坝是人工修筑的,表面平滑,等高线一般应是直的!白色的是自然地形等高线。
也就是说,通过给定的两条黄色线,按一定坡度(如1:3),批量绘制哪些紫色的线!
实际上,编写一个“批量偏移”,倒也简单,但是,偏移后的直线与自然地形等高线的交点可能有多个(也有可能没有交点,需要延长得到交点),很难确定用偏移后直线的哪一部分。
[其他解释]把尺子從地里南極瞬間移送到地理北極,啥事沒有間一呆子,人能活到 200 years,冰封王座咋沒吸血鬼泥儂是撒意思???
[其他解释]哈哈,居然与我以前的实现方法很相似,我以前没有说清楚,被您“专家”了!
我主要是不想要“再人工剔除一些多余的线段”!
[其他解释]清灵终于理解到了我所想要的了!
讨论这个事情,有几个问题先统一一下:
1、我用的所有的线都是AcadLWPolyline,因为,自然地形等高线是AcadLWPolyline,它的elevation属性不为0,如果用ojbline的Z坐标为0,用IntersectWith与AcadLWPolyline计算,得不到交点;如果,在代码中维护ojbline的Z坐标与地形等高线一致,也是件麻烦的事儿!还有,坝体也不一定总是直线的,用AcadLWPolyline更方便些。
2、识别地形等高线,我用的xdata,这些已不是问题。实际上,这个程序我已完成了,但是,放坡这一块,我感觉编的很差,所以发出来想让大家给点意见和建议。请看程序界面:。界面中:“定义等高线”在另一个菜单项中完成了;“绘制垃圾坝”中有8个分项,第一个“定义垃圾坝顶边线”就是将plan.jpg中的粗黄线加xdata,让我的程序能识别;“绘制垃圾坝辅助线”就是画哪些紫色的线(批量偏移);“处理垃圾坝辅助线”就是对批量产生的紫色线与自然地形等高线用IntersectWith进行计算交点,并将所有的交点,顺次连接,因为地形千差万别,交点不止两个,可能很多,很难确定,哪两个交点之间的线段是我需要的?这就是我的问题!;“删除多余的垃圾坝辅助线”是要求用户手动删除不属于坝体的辅助线。后面的不说了。
现在问题,主要是:我想要取消“删除多余的垃圾坝辅助线”这个要求用户判断处理的功能。不知有没有什么好的思路。
[其他解释]感觉这不仅仅是cad的问题,cad中应该没有现成的功能
[其他解释]Rmvb,分片采樣精度,取拔
[其他解释] \
-------
黑线高度为已知条件,按已知条件放破比例可以得到红线的投影长度,即黑线长度,勾股定理可求出红线长度
[其他解释]你说的,我理解,我试图用确定为“有效”的等高线的垂直平分线来确定下一条等高线,认为,下一条待确定的等高线如在垂直平分线的两侧,就是我要的等高线,如在一侧,就不是我要的等高线,但是,还有特殊情况!
如下:
[其他解释]这个也是可以编程的。
“有效”的等高线(紫线)表示它通过结构的表面和坝顶是“连通”的,方法是
先将“坝顶”标记为有效;然后逐层向下,如果下层的线段可以和上层某个有效的等高线段“连通”,就标记为有效。
判断两条等高线是否连通,可以通过平行投影,看两个投影线段是否有重叠部分即可。
我认为对坝体这种简单结构,“连通”的两条等高线之间总能找到地方水可以沿垂线方向流动。
[其他解释]
你可能没理解
我按作图顺序截几幅图:
1.已确定了坝顶一侧边线的位置,图中黄线!
2.坝以1:3的坡度向上放坡,自然等高线的等高距为2米,所以1:3的坡度的平面投影长度为2*3=6米,所以,垃圾坝边线向北偏移6米,即为第一条坝辅助线!
3.第一条坝辅助线的标高应和地形等高线的一条对应,辅助线端点于地形等高线相交。所以剪掉多余部分。
以上为最简单情况下绘制辅助线的过程,因为辅助线与地形等高线只有两个交点,很容易通过交点确定需要的辅助线线段,但是,有多个交点时,就比较困难了!比如下面这种情况,就有三个交点(红点),得到的线段有A、B两段,如何在程序确定哪一段是我需要的。
用肉眼一看就知道哪一段是我需要的(B),但在程序中没想出好方法来判断!
[其他解释]呵呵,一直在玩啊!
[其他解释]论坛限制了图片的宽度,上面的图如果看不全,复制图片的地址,再用浏览器的看一下吧
[其他解释]我早上来了,大家讨论的好欢快阿
你就是要优化一下吧
小勇勇同学,你要说一下为什么选B不选A,你自己心理要有这个标准才能用代码表达吧。
我初步猜测你的黄线,也就是坝顶总有个长度吧。你的坡线长度应该基于坝顶线段长度的一个范围吧。如果我的假设是正确的,那么
1。你的初始坡线长度不会偏差过大
2。当你出现多个交点的时候可以根据线段长短来判断
这样用来降低出现多个交点的几率
当出现多于2个交点的时候,选择在黄线朝坡地影射的投影范围内部分大的那一段(从图上看就是B段了)。
‘--------------------------------------------
从计算过程中来说IntersectWith那叫一个慢,如果想快就把这个函数的算法拿出来自己写,快很多很多。
从用户体验上面来说,你可以自动放坡结束后弹出窗口,显示那些拿不准的,让用户自己微调。试想下如果你自动作了50条放坡线,只有几条拿不准的话有那时间跟这些死磕不如直接弹出窗口,用户点击listview上面的item,直接zoom到相应的坡线,用自己调一下就好了。
这样你的算法不用太高效精准(也不容易就进入死循环),用户也不会觉得太纠结--->我是不是太偷懒了...不好意思啊
[其他解释]平行投影,无论验证是否完全重叠或不完全重叠,都无法得到想要的结果,如31楼最后一张图片,A与坝顶线平等投影是不安全重叠,而B在这张图中是完全重叠的,但也可能不完全重叠(地形略微变化),所以,这个难有通用性。我再按你的思路想想吧
[其他解释]所以我说的是
平行投影、
重叠。
无论左下还是右下,按照上述两个规则都是有效的。
[其他解释]地方水可以沿垂线方向流动。
[其他解释]好的騾子大人
[其他解释]加一C,北斗衛星 啊
[其他解释]找一位懂测绘的来写
[其他解释]CAD也玩过,不过是工程机械方面的,对于楼主的问题完全摸不着头脑,哈哈,重在参合了
[其他解释]怎么从地形等高线上看出来是山谷还是山脊?你开始没说这个标准别人也不知道啊
是不是可以从地形等高线在交点间弓形的方向?如果是的话你可以从交点作切线,然后根据斜度判断是不是山谷?
实在是需要懂土建的人才知道标准是什么
[其他解释]俺是在编软件,不是在做某一个项目
[其他解释]A线段在我21楼算法中已经被排除的。
因为根据颜色判断该处地形比A线段高,应为交点的特性就是一边有一边没有,所以我认为不必特别注明。
[其他解释]
测绘专业比较强。理解起来不易。