C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

不要なスケッチ点をマージし削除する

こちらの問題、ひょっとしたらスプリクト一発で解決出来るかな?
と思いました。
DXFの線分を繋げるには - Autodesk Community

こんな感じです。

#FusionAPI_python SketchPointsMerge
#Author-kantoku
#Description-スケッチのマージ可能な端点をマージする 結構危険

import adsk.core, adsk.fusion, traceback
import itertools

def run(context):
    ui = None
    
    #マージするトレランス 単位Cm!!
    tolerance = 0.001
    
    try:
        #準備
        app = adsk.core.Application.get()
        ui = app.userInterface
        
        #選択
        sel = Sel('スケッチを選択してください','Sketches')
        if sel is None: return
        skt = adsk.fusion.Sketch.cast(sel.entity)
        
        #処理前数
        before = len(skt.sketchPoints)
        
        #マージ
        [ExecMerge(p1,p2) 
        for p1,p2 in itertools.combinations(skt.sketchPoints,2) 
        if IsMerge(p1,p2,tolerance)]
        
        #終わり
        ui.messageBox('{}個、点をマージしました'.format(before-len(skt.sketchPoints)))
        
    except:
        if ui:
            ui.messageBox('エラー:\n{}'.format(traceback.format_exc()))

def ExecMerge(p1,p2):
    try:
        p1.merge(p2)
    except:
        pass
    
def IsMerge(p1,p2,tol):
    try:
        geo1 = p1.geometry
        geo2 = p2.geometry
        return geo1.isEqualToByTolerance(geo2, tol)
    except:
        return False
    
#選択
def Sel(msg, selFilter):
    app = adsk.core.Application.get()
    ui  = app.userInterface
    try:
        return ui.selectEntity(msg, selFilter)
    except:
        return None

スプリクト実行後、任意のスケッチ(Treeから)を選択することで
指定したトレランス以内の点同士をマージします。

実行前
f:id:kandennti:20180920131846p:plain

実行後
f:id:kandennti:20180920131855p:plain
70個の点を削除しています。ギターの輪郭付近の点が激減しているのが
画像でもわかります。

点自体をトレランス以内で移動している為、関連する線が動く可能性があります。
又、トレランスを大きくすると変化が大きすぎる為、Fusion360
オペレーションが戻ってこない可能性が高いです!!

でも、質問者さんの投げかけた問題は解決してません・・・。


念のため書いておきます。
うちのサイトはFusion360スプリクトを記載していますが、CATIA関連の方が
圧倒的にアクセスが多いです。(でも、Fusion360スプリクトとPowerMillマクロは続けます)