0
\$\begingroup\$

Does anybody know how to enter curved text in Altium PCB editor? For instance, you have an arc and you want to put some string to follow the curve of the arc. I couldn't find that option anywhere and also I didn't find anything on the internet.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ There is no native tool to do this. \$\endgroup\$
    – DerStrom8
    Apr 5, 2018 at 19:06

3 Answers 3

4
\$\begingroup\$

You can create it with some appropriate tool such as Adobe Illustrator or Inkscape (open-source) and then import it as you would a logo.

(There's probably also some way to do it with scripting, but I guess it would be more difficult to learn that than use a tool designed for graphic editing).

\$\endgroup\$
1
\$\begingroup\$

If it is only a short piece of text you can create several individual pieces of text to spell your word and then and them individually.

\$\endgroup\$
1
\$\begingroup\$

https://github.com/IgorIemeluyanofflyanov/altium

// text by ccircle
// 2023 Aug 13
// Igor Emelyanoff
// [email protected]


                                                    Procedure AddTextToBoard;
Var
    View      : IServerDocumentView;
    Document  : IServerDocument;
    TextObj   : IPCB_Text;
    Board     : IPCB_Board;
    i : word;
    angle: float;
    Text : string;
Begin
    If PCBServer = Nil Then Exit;

    Board := PcbServer.GetCurrentPCBBoard;
    If Board = Nil Then Exit;

    View := Client.GetCurrentView;
    Document := View.OwnerDocument;
    Document.Modified := True;

    Board.LayerIsDisplayed[ILayer.MechanicalLayer(6)] := true;

    PCBServer.PreProcess;


        Text :=                   'super spiral ';

for i := 0 to length(Text )-1 do
begin
        TextObj := PCBServer.PCBObjectFactory(eTextObject,  eNoDimension,  eCreate_Default);

        PCBServer.SendMessageToRobots(TextObj.I_ObjectAddress, c_Broadcast, PCBM_BeginModify, c_NoEventData);

        //TextObj.UseTTFonts := True;

        TextObj.Layer := ILayer.MechanicalLayer(6);
        TextObj.Text  := Copy(Text, i+1, 1);
        TextObj.Size  :=  MilsToCoord(50);

        angle := i * 2* 3.14 /length(Text );
        TextObj.XLocation := MilsToCoord(1500+ sin( angle ) * 300  )  ;
        TextObj.YLocation := MilsToCoord(1500+ cos(angle)  * 300 )  ;
        TextObj.Rotation :=    - angle * 360 / 2 /3.14  ;
        Board.AddPCBObject(TextObj);

        PCBServer.SendMessageToRobots(TextObj.I_ObjectAddress, c_Broadcast, PCBM_EndModify, c_NoEventData);
        PCBServer.SendMessageToRobots(Board.I_ObjectAddress, c_Broadcast, PCBM_BoardRegisteration, TextObj.I_ObjectAddress);
end;
           PCBServer.PostProcess;


    Board.ViewManager_FullUpdate;
    Client.SendMessage('PCB:Zoom', 'Action=All' , 255, Client.CurrentView);
End;
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.