QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

查看: 4966|回复: 2
打印 上一主题 下一主题

[分享] grip获得平面最外边缘

[复制链接]

少尉

Rank: 5Rank: 5

51

主题

75

帖子

2258

积分
跳转到指定楼层
楼主
发表于 2015-11-21 14:27:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
获得平面最外边缘 本身没什么了不起的 因为uf函数可以获得 曲面边缘
但是我这个是纯grip哦 (grip很多函数没有)
虽然我自己用c++做代码 但我经常 用grip做程序  就是因为没函数 才可以  练思路 练算法




$$ 获得平面最外边缘   
$$ 梅雷QQ1821117007原创
$$ 原理
$$ 线选择一个平面F
$$ 创建点pt,要求点pt和平面F是同一个平面点一定在平面外
$$ 利用相对最小距离函数,r(1..7)= RELDST/F,pt
$$ r(1..3)这个点一定在平面的最外边缘
$$ 循环平面F上的所有边缘,如果点r(1..3)和边缘距离为0
$$ 那么这个边缘一定是最外边缘
$$ 因为在提取UG面上的线时,我们可以把线看成n个封闭的区域
$$ 因为封闭的区域线是按顺序首位相连的
$$ 又因为我们已经得到了一条最外边缘了
$$ 那么我们就往2个方向计算,最后就可以获得最外边缘了

Gripsw / Declrv
Entity / F         $$面
Entity / ll(10000) $$最外边缘
Number / A         $$最外边缘数量
Entity / Pt(2),ln(10000)
Number / Resp,P(9),r(7),i,j,k,n,ys(2),numw(4,3),nnn

$$判断是Ug否打开部件
Ifthen/&Actprt==1
Messg/'请先打开一个部件!'
Halt
Endif

ys(1)=&entclr $$获得系统颜色
ifthen/ys(1)>100
ys(2)=ys(1)-5
else
ys(2)=ys(1)+5
endif
&entclr=ys(2) $$设置系统颜色

L10:
    Mask/22
     Ident/'梅雷提示!请选择目标面',F,Resp
    Jump/L10:,End:,,,Resp

$$ 创建点pt,要求点pt和平面F是同一个平面点一定在平面外
P(1..3)=Sposf(F,0,0)   $$获得面上的点
P(4..6)=Sposf(F,1,1)
P(7)=P(4)-P(1)         $$计算点到点方向
P(8)=P(5)-P(2)
P(9)=P(6)-P(3)
P(1..3)=Unitf(P(7..9))     $$获得点到点的正确方向
P(7..9)=SCALVF(20,P(1..3)) $$向量数乘 x20
P(1)=P(4)+P(7)             $$计算点位
P(2)=P(5)+P(8)
P(3)=P(6)+P(9)
pt(1)=point/p(1..3)  
$$ 利用相对最小距离函数,r(1..7)= RELDST/F,pt
$$ r(1..3)这个点一定在平面的最外边缘
r(1..7)= RELDST/F,pt(1)
delete/pt(1)
pt(2)=point/r(1..3)      
$$循环平面F上的所有边缘开始计算边缘
ln=soledg/f,cnt,n ,iferr,Err2:
ifthen/n==1
a=1
&color(ln(1))=ys(1)
jump/ttt:
endif
nnn=0
do/loop:,i,1,n
r(1..7)= RELDST/pt(2),ln(i)
ifthen/r(7)==0
nnn=i
jump/loopb:
endif
loop:
loopb:
ifthen/nnn<1
messg/'无效的表面,因为不能分析点距.'
jump/end:
endif
$$print/'平面F上第'+istr(nnn)+'个边缘一定是最外边缘'
$$-
&color(ln(nnn))=ys(1)
ifthen/ n>nnn
Do/Loop9:,I,nnn,n
ifthen/i>nnn
numw(1,1..3)=cposf(ln(i-1),0)
numw(2,1..3)=cposf(ln(i-1),1)
numw(3,1..3)=cposf(ln(i),0)
numw(4,1..3)=cposf(ln(i),1)
IFthen/numw(1,1..3)==numw(3,1..3) or $
       numw(1,1..3)==numw(4,1..3) or $
       numw(2,1..3)==numw(3,1..3) or $
       numw(2,1..3)==numw(4,1..3)
&color(ln(i))=ys(1)
else
jump/Loop10:
endif
endif
Loop9:
Loop10:
endif
$$-
ifthen/ nnn>1
Do/Loop11:,I,1,nnn
ifthen/i>1
j=nnn-i+1
numw(1,1..3)=cposf(ln(j+1),0)
numw(2,1..3)=cposf(ln(j+1),1)
numw(3,1..3)=cposf(ln(j),0)
numw(4,1..3)=cposf(ln(j),1)
IFthen/numw(1,1..3)==numw(3,1..3) or $
       numw(1,1..3)==numw(4,1..3) or $
       numw(2,1..3)==numw(3,1..3) or $
       numw(2,1..3)==numw(4,1..3)
&color(ln(j))=ys(1)
else
jump/Loop12:
endif
endif
Loop11:
Loop12:
endif
$$-
$$删除内边缘
a=0
do/loop22:,i,1,n
k=&color(ln(i))
ifthen/k==ys(1)
numw(1,1..3)=cposf(ln(i),0)
numw(2,1..3)=cposf(ln(i),1)
ifthen/numw(1,1..3)==numw(2,1..3)$$过滤相切的整圆
delete/ln(i) $$删除多余曲线
else
a=a+1
ll(a)=ln(i)
endif
else
delete/ln(i) $$删除多余曲线
endif
loop22:
TTT:
delete/pt(2)
$$-
$$==================================================
$$-
messg/'最外边缘曲线数量:'+ISTR(A)

jump/L10:


end:
&entclr=ys(1)
Halt


Err2:
DELETE/pt(1)
Messg/'无效的表面,因为不能提取边缘.'
jump/End:


有奖推广贴子: 

回复

使用道具 举报

中尉

Rank: 5Rank: 5

2

主题

105

帖子

4631

积分
沙发
发表于 2015-11-21 16:04:21 | 只看该作者
很不错哦 支持下楼主
回复 支持 反对

使用道具 举报

一级士官

Rank: 2

0

主题

26

帖子

238

积分
板凳
发表于 2015-11-23 21:49:14 | 只看该作者
支持楼主无私的分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-5-26 18:24

返回顶部