EDA365电子论坛网

标题: [求問]判斷line到shape的最短距離 [打印本页]

作者: 雞翅加辣    时间: 2024-11-4 16:51
标题: [求問]判斷line到shape的最短距離
各位前輩好,
我正在編寫skill 其通能:當Line碰到shape時,自動退縮1mil.

我目前可以想到的方法是
---------------------------------------------------------------------------------------------------
檢查:  
   1.axlPathSegGetEndPoint 取得Line的端點。
   2.axlGeoPointInShape  檢查Line的端點有沒有在shape內。
退縮: axlPolyFormDB將line 轉成 polygon , 然後透過axlPolyExpand 來縮小1mil

可是這個條件會卡在,如果我line與shape沒有重合,但距離卻小於1mil時,我無法把line進行cut.
請問各位專家有解嗎?

感激不盡


作者: db-_-    时间: 2024-11-4 18:12
计算距离可以用axlAirGap来算。
作者: w_w    时间: 2024-11-4 18:39
如果没有重合,可以用axlAirGap判断下距离
作者: Dc202408015a    时间: 2024-11-4 18:51
学习mark1
作者: aarom    时间: 2024-11-5 02:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雞翅加辣    时间: 2024-11-5 13:57
db-_- 发表于 2024-11-4 18:12
计算距离可以用axlAirGap来算。

感謝,這個剛好也可以檢查有沒有line碰到shape , 因為碰到的話距離會為0。
接著要來處理大魔王,怎麼樣cut 掉碰到的線段了 ~目前還沒想法


作者: 雞翅加辣    时间: 2024-11-5 13:58
w_w 发表于 2024-11-4 18:39
如果没有重合,可以用axlAirGap判断下距离

感謝,這個剛好也可以檢查有沒有line碰到shape , 因為碰到的話距離會為0。
接著要來處理大魔王,怎麼樣cut 掉碰到的線段了 ~目前還沒想法



作者: 雞翅加辣    时间: 2024-11-5 14:08
aarom 发表于 2024-11-5 02:44
盲點:
1.線 與 SHAPE 重疊長度, 退1mil 可能非你所求.

本帖最后由 aarom 于 2024-11-5 02:56 编辑


大師果然就是可以想得比較多比較遠 !!感謝

盲點:
1.線 與 SHAPE 重疊長度, 退1mil 可能非你所求.
->沒錯,有可能重疊長度是2mil ,退了1mil 還是重疊....

2.是否為 線 與 SHAPE "外框" ,  退1mil.  或 無論 線 與 SHAPE 重疊長度, 只要退1mil.
兩種做法:
->1.我的想法是線不能碰到shape 外框,所以一旦碰到就是繼續退1mil 直到不再重疊;
->2.這個做法就非常考驗我常常不及格的數學,我是把算把line 轉成長方形的polygon , 計算他與shape重疊面積。
   根據: 面積/line寬=干涉的長度x。
   line的Length - x -1mil 就會是我理想的值

但是又有問題,我怎麼知道line會從哪邊開始縮短....


3.連接 屬線(飛線, 代表未連接.) 的  產生, 若在框外退1mil."可能"會 產生, 若在框內退1mil , 就產生機率很低.
->這裡我倒不擔心,主要是給鍵零件的同事,所以應該不用擔心這個問題



作者: db-_-    时间: 2024-11-5 14:59
虽然有点没太明白楼主的目的和思路,但我尽量试着去理解了下。

是不是可以这么做?
1、line转poly,shape转poly并扩大1mil
2、line的poly和shape扩大了1mil的poly进行andnot
3、如果line的poly和运算结果的poly面积一样大,表示没有接触,不做处理
4、如果line的poly比运算结果的poly面积大,表示有接触,将原line删除,绘制新的line
作者: 雞翅加辣    时间: 2024-11-6 13:45
db-_- 发表于 2024-11-5 14:59
虽然有点没太明白楼主的目的和思路,但我尽量试着去理解了下。

是不是可以这么做?

大大理解正確。看來我語言表達還有待進步 Orz
我現在會實作看哪個寫法比較省程式碼 ,非常謝謝您提供另一種解決方法

作者: aarom    时间: 2024-11-7 10:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雞翅加辣    时间: 2024-11-15 14:26
紀錄一下,這個主要實作應用於當Line 壓到 shape時,自動退縮。
我透過axlPolyOperation取得兩個物件的andnot ,
然後根據非重疊部分來取得polygon頂點座標,進行一系列的計算,用上了axlMXYSub ,axlMUniVector


补充内容 (2025-1-13 11:34):
確實目前已17.4可以支援 axlDeleteByRectangle
用茅台大的做法非常的節省程式碼,可讀性也很高!!
但16.6就很悲劇QQ 。





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2