delphi 如何使用Altium脚本系统删除Altium PCB Library中的PCB对象?

balp4ylt  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(149)

我正在编写一个 Delphi Altium脚本来删除PCB库中TopOverlay中的所有轨道。
但是,当运行脚本时,什么也不会发生(轨道不会被删除)。
我不知道为什么你能帮帮我吗
下面是我的代码:

procedure RemoveTrackObject;
Var 
        MyComponent     : IPCB_LibComponent;
        MyTrack         : IPCB_Track;
        Iterator        : IPCB_GroupIterator;

        DeleteList      : TInterfaceList;
        TrackTemp       : IPCB_Track;
        i               : Integer;            
begin
        MyComponent     := PCBServer.GetCurrentPCBLibrary.CurrentComponent;
        //////////////////////////////////////////////////////////////////////
        Iterator        := MyComponent.GroupIterator_Create;
        Iterator.AddFilter_ObjectSet(Mkset(eTrackObject));
        Iterator.AddFilter_LayerSet(Mkset(eTopOverLay));

        DeleteList      := TInterfaceList.Create;
        try
            MyTrack     := Iterator.FirstPCBObject;
            While MyTrack <> nil do
            begin
                    DeleteList.Add(MyTrack);
                    MyTrack := Iterator.NextPCBObject;
            end;
        
        finally
                MyComponent.GroupIterator_Destroy(Iterator);
        end;
        try
                PCBServer.PreProcess;
                for i := 0 to DeleteList.Count - 1 do
                begin
                        TrackTemp   := DeleteList.Items[i];
                        MyComponent.RemovePCBObject(TrackTemp);
                end;
        finally
                PCBServer.PostProcess;
                DeleteList.Free;
        end;
        Client.SendMessage('PCB:Zoom', 'Action=Redraw' , 255, Client.CurrentView);
end;
iyfamqjs

iyfamqjs1#

AFAIU在Altium dephiscript API InterfaceList中有特定用途:持有非PCB对象并传递到外部DLL函数并让接收fn销毁列表。你在这里不需要。
PcbLib确实有一些奇怪的行为,比如从选定/聚焦的封装中删除等。
我认为这个问题是由Pcb编辑器不允许从当前关注的组件/封装中删除对象引起的。围绕这个问题的历史表明,解决方案涉及将焦点从所需组件移开。
当List仍包含对象引用时,无法完成删除过程。
使用While循环,在RemovePCBObject()之后,从List中删除object ref(删除List Item)。然后当While循环终止时,List中的项目为零。
可能有助于刷新或使用其中一些fn调用的外观和感觉:

CurrentLib.Board.GraphicallyInvalidate;
CurrentLib.Navigate_FirstComponent;
CurrentLib.Board.ViewManager_FullUpdate;
CurrentLib.Board.GraphicalView_ZoomRedraw;
CurrentLib.RefreshView;

相关问题