cad --- menus, barras de ferramentas, menus na tela, barras de ferramentas avançadas

Função de prompt auxiliar do cad

Recentemente, um irmão mais novo encontrou muitos plugins na Internet e, em seguida, quis criar um menu semelhante para usar esses plugins fragmentados, queria personalizar um conjunto de ferramentas e depois me perguntou sobre menus, barras de ferramentas, menus na tela etc. Para outros métodos, aqui está um resumo.A informação relevante está disponível no XD Forum e no Mingjing Channel. . .
Prompts auxiliares comuns de cad, incluindo menus, barras de ferramentas, menus de tela difíceis, barras de ferramentas aprimoradas, etc.

O menu

Os menus CAD são relativamente comuns.Por exemplo, em
Insira a descrição da imagem aqui
geral, quando você cria um plug-in para outras pessoas, se estiver criando um plug-in para um módulo, como este módulo para um suporte,
Insira a descrição da imagem aqui
o menu é mais apropriado.
Existem várias maneiras de criar menus, como usar o MFC para criar, usar COM para criar, usar arquivos CUI etc. Aqui, meu método mais recomendado é usar o CUI, que é rápido, conveniente e quase sem erros. Aqui, dê um exemplo: primeiro crie um arquivo no formato mnu, escreva da seguinte maneira:

***MENUGROUP=SIMPLE_GROUP

***POP1
**FILE
ID_MENU_FILE              [场地平面图文件(&F)]^C^C_open
ID_FILE_LOCATION          [存储平面位置(&L)]^C^CPMWZ
ID_FILE_LAYOUT            [存储场地布置(&A)]^C^CCDBZ
ID_FILE_PLAN              [存储计划(&P)]^C^CCCJH
[--]
ID_FILE_EXIT              [退出(&E)]^C^C_quit
[--]


***HELPSTRINGS
ID_MENU_FILE              [打开场地平面图文件]
ID_FILE_LOCATION          [存储场地平面位置到磁盘文件中]
ID_FILE_LAYOUT            [存储场地布置到二进制文件中]
ID_FILE_PLAN              [存储施工计划到磁盘文件中]
ID_FILE_EXIT              [退出ACAD]

Em seguida, abra o cad e use o comando menuload para carregar o arquivo mnu. Após o carregamento do cad, serão gerados arquivos mnr e cuix com o mesmo nome.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Geralmente, não me preocupo em otimizar ainda mais o menu para torná-lo mais bonito. Se alguém quiser fazer isso, você pode usar cui Editor, adicione ícones a este arquivo de menu cuix, que é mais bonito.
Coloque o arquivo cuix e o arquivo arx juntos e, finalmente, carregue o arquivo cuix no código.
Finalmente, para resumir: o método de usar o arquivo cuix para gerar o menu é o mais conveniente e rápido, não requer a modificação do código, mais conveniente e simples no processo de adição de ícones. Para os métodos com e mfc para adicionar menus, existem dois pontos negativos: um é modificar o menu para modificar o código; o segundo é alternar o espaço de trabalho cad, o menu desaparecerá, isso é mais problemático.

Barra de ferramentas

Barra de ferramentas
Para ser honesto, a barra de ferramentas também é o meu método recomendado.Se o plug-in que você cria também é dedicado a um módulo, mas há menos comandos, como menos de 10, a barra de ferramentas é um bom método. Há também uma variedade de, com, MFC, cuix pode fazer, aqui também é preferido usar o método cuix, conveniente, simples, se você não operar, abrir cad, pressione F1, há como criar um menu da barra de ferramentas no arquivo de ajuda
Insira a descrição da imagem aqui
O que eu estou falando aqui é a barra de ferramentas aprimorada, como o plug-in tiger board king, a barra de ferramentas msteel
Insira a descrição da imagem aqui
usa a barra de ferramentas aprimorada, principalmente para comandos multi-módulo em grande escala, faça uma operação de interface, adequada para médias e grandes Método, também fiz uma coisa semelhante:
Insira a descrição da imagem aqui
seu layout e o menu dentro dele são melhores para ter um controle de arquivo, como quantos botões são necessários, quantos menus existem no botão etc., depois de escrever claramente em um arquivo, analise-o Arquivo, produza esta barra de ferramentas.

[按钮]
结构建模
画墙工具
墙柱绘制
楼板工具
基础设计
钢筋绘制
文字工具
图层工具
其他工具

[MENU=结构建模]
0-梁线建模-MODEL_LXJM
0-梁模转图-MODEL_LMZT
0-墙线建模-MODEL_QXJM
0-墙模转图-MODEL_QMZT

[MENU=画墙工具]
0-轴线画梁-BEAM_ZXHL
0-画直线梁-BEAM_HZXL
0-梁中生线-BEAM_LZSX
0-梁梁交线-BEAM_LLJX
0-梁柱交线-BEAM_LZJX
0-虚实变换-BEAM_XSBH
0-粗线变梁-BEAM_CXBL
0-连接梁线-BEAM_LJLX
0-梁折断线-BEAM_LZDX
1
0-线比系数-BEAM_XBXS
0-梁集标注-BEAM_LJZB
0-编号查询-BEAM_BHCX
0-梁重编号-BEAM_LCBH

[MENU=墙柱绘制]
0-插方形柱-COLU_CFZ
0-插圆形柱-COLU_CYZ
0-柱子填充-COLU_ZTC
0-柱子空心-COLU_ZKX
0-柱虚实-COLU_ZXS
0-柱放大-COLU_ZFD
1
0-粗线变墙-WALL_CXBQ
0-墙填充-WALL_QTC
0-墙空心-WALL_QKX
0-墙虚实-WALL_QXS
0-墙端封口-WALL_QFK
0-墙上开洞-WALL_QKD
0-墙线折断-WALL_QXZD
1
0-墙柱形心-WC_QZXX
0-墙柱工具-WC_QZGJ

[MENU=楼板工具]
0-板开洞口-FLOOR_DK
0-板填充一-FLOOR_BTCA
0-板填充二-FLOOR_BTCB
0-板填充三-FLOOR_BTCC
0-添加板厚-FLOOR_TJBH

[MENU=基础设计]
0-桩数统计-BASE_ZSTJ
0-画桩程序-BASE_HZCX

[MENU=钢筋绘制]
0-绘制点筋-REIN_HZDJ
0-空实变换-REIN_KSBH
1
0-绘制拉筋-REIN_HZLJ
0-S形拉筋-REIN_SLJ
0-绘制箍筋-REIN_GJ
0-连续钢筋-REIN_LXGH
0-线变钢筋-REIN_XBGJ
0-绘组钢筋-REIN_HZGJ
1
0-附加吊筋-REIN_FJDJ
0-附加箍筋-REIN_FJGJ
0-任意负筋-REIN_RYFJ
0-任意正筋-REIN_RYZJ
0-板钩变换-REIN_BGBH
0-范围选数-REIN_FWXS

[MENU=文字工具]
0-文字查找-TEXT_WZCZ
0-统一字高-TEXT_TYZG
0-文字边框-TEXT_WZBK
0-文本偏移-TEXT_WBPY
0-文字连接-TEXT_WZLJ
1
0-文字对齐-TEXT_WZDQ
0-修改对齐-TEXT_XGDQ
0-文字平行-TEXT_WZPX
0-转MTEXT-TEXT_ZMTEXT
0-调行间距-TEXT_THJJ
0-查字重叠-TEXT_CZCD
1
0-加前后缀-TEXT_JQHZ
0-文字互换-TEXT_WZHH
0-文字刷-TEXT_WSZ
0-求平均数-TEXT_QPJS
0-快速改字-TEXT_KSGZ

[MENU=图层工具]
0-图层设置-_layer
0-转当前层-_laycur
0-置为当前-_laymcur
0-选层显示-LAYER_XCXS
0-选层关闭-_layoff
0-图层全开-_layon
0-锁定图层-_laylck
0-解锁图层-_layulk
0-图层删除-LAYER_TUSC
0-参照开关-LAYER_CZKG
0-图层前置-LAYER_TCQZ
0-图层后置-LAYER_TCHZ
0-填充后置-LAYER_TCHZ
0-按色显示-LAYER_ASXS
1
0-隐藏对象-LAYER_YCDX
0-显示对象-LAYER_XSDX

[MENU=其他工具]
0-结构审图-OTHER_YXST
0-引线文字-OTHER_YXWZ
0-绘制箭头-OTHER_HZJT
0-改线宽度-OTHER_GXKD
0-选择易-OTHER_XZY
0-随心拉移-GG
0-线弧转PL-OTHER_XHZPL
0-多线加点-OTHER_DXJD
0-多线去点-OTHER_DXQD
0-存为今天-OTHER_CWJT

Este é um arquivo que escrevi, que inclui botões e o menu em cada botão.
Se o menu contiver submenus

[MENU=其他工具]
0-结构审图-OTHER_YXST
0-引线文字-OTHER_YXWZ
0-绘制箭头-OTHER_HZJT
0-改线宽度-OTHER_GXKD
0-选择易-OTHER_XZY
2-其他设置
0-线弧转PL-OTHER_XHZPL
0-多线加点-OTHER_DXJD
0-多线去点-OTHER_DXQD
0-存为今天-OTHER_CWJT

[SUBMENU=其他设置]
0-线弧转PL-OTHER_XHZPL
0-多线加点-OTHER_DXJD

Ele pode ser adicionado assim, conveniente e prático, sem a necessidade de modificar o código, basta analisar o arquivo.A
idéia da barra de ferramentas aprimorada:

#pragma once

#include "resource.h"
#include "SendCmd.h"
#include "ToolButton.h"


#define BAR_FIRST_MENU_ID 3000
#define BAR_FIRST_BUTTON_ID 4000

struct MenuItemTag
{
public:
    MenuItemTag(UINT flags, UINT ids, CString name, CString cmd) : menuName(name),menuCmd(cmd)
    {
        nFlags = flags;
        nIds = ids;
    }
    MenuItemTag(const MenuItemTag& other)
    {
        nFlags = other.nFlags;
        nIds = other.nIds;
        menuName = other.menuName;
        menuCmd = other.menuCmd;
    }

    MenuItemTag& operator = (const MenuItemTag &other)
    {
        if (this != &other)
        {
            nFlags = other.nFlags;
            nIds = other.nIds;
            menuName = other.menuName;
            menuCmd = other.menuCmd;
        }
        return *this;
    }
public:
    UINT nFlags;//MF_STRING, MF_SEPARATOR,MF_SUBPOP
    UINT nIds;
    CString menuName;
    CString menuCmd;
};

typedef std::vector<MenuItemTag> MenuGroup;
typedef std::map<CString, MenuGroup> MenuMap;
typedef std::map<UINT, CString> MenuCmdMap;

class CBarDlg : public CAcUiDialogBar
{
    DECLARE_DYNAMIC(CBarDlg)

public:
    CBarDlg(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~CBarDlg();
    // 对话框数据
    enum { IDD = IDD_DIALOG_MENUBAR }; 

    //一系列button
    std::vector<CToolButton*> m_buttons;

    MenuMap m_map;
    MenuCmdMap m_cmdMap;
    void InitMenuMap();
    //弹出菜单
    CMenu m_popMenu;
    void PopupMenu(CString titleName, UINT nCtrlId);
    void CreateSubPopupMenu(CMenu &popMenu, CString titleName);
    CPoint GetTrackPnt(UINT nCtlrId);
    void OnToolButtonClick(UINT buttonId);
    void OnPopupMenuItemClick(UINT menuId);
    std::vector<CString> GetMenu(CString menuPath);
    void CreateButton(std::vector<CString>& button);
    void CreateMenu(std::vector<CString>& button);
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
    DECLARE_MESSAGE_MAP()
protected:
    afx_msg void OnPaint();
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg LRESULT OnInitDialog(WPARAM, LPARAM);
};

//-----------------------------------------------------------------------------
//----- ToolButton.h : Declaration of the CToolButton
//-----------------------------------------------------------------------------
#pragma once

//-----------------------------------------------------------------------------
#include "acui.h"

//-----------------------------------------------------------------------------
class CToolButton : public CAcUiToolButton
{
	DECLARE_DYNAMIC (CToolButton)
    CString m_strCaption;//名称
    CFont *m_pFont;
public:
	CToolButton();
	virtual ~CToolButton();
    BOOL Create(LPCTSTR str, DWORD dyStyle, const RECT& rect, CWnd *parent, UINT nID);
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
protected:
	DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
};

Um derivado de CAcUiDialogBar, um derivado de CAcUiToolButton, é feito, relativamente simples

Menu na tela

De acordo com a verdade, o menu na tela é estimado como o sistema mais problemático.As ferramentas comerciais de plug-in em larga escala usarão isso, como Tianzheng e Explorer.De um modo geral, coisas comerciais em larga escala o usarão. O mais alto grau de definição. Muitas coisas podem ser adicionadas ao menu da tela, como botões de ícones, menus de gavetas, vários botões com o ICON etc. De qualquer forma, parece melhor, mas isso requer habilidades do MFC e exige manutenção em larga escala, o que é relativamente caro. Este é o menu na tela
Insira a descrição da imagem aqui
que eu criei : vi algo semelhante no canal Ming Jing, depois peguei e reescrevi. É mais complicado, mas é o mesmo da barra de ferramentas aprimorada: escreva um mnu ou txt para descrever todos os menus e modifique o arquivo posteriormente para modificar o menu na tela de uma vez por todas.

Sumário

Método Vantagem Desvantagens
Barra de ferramentas Adequado para um pequeno número de comandos Não é adequado para módulos grandes, vários módulos
O menu Adequado para módulos pequenos e médios, vários módulos Não é adequado para módulos grandes, o uso de com e MFC tem desvantagens
Barra de ferramentas aprimorada Adequado para módulos de sistema grandes e médios Precisa manter código, alto custo
Menu na tela Adequado para plug-ins comerciais Alto custo

É altamente recomendável usar a barra de ferramentas e a barra de menus o máximo possível. O custo é baixo, e as pessoas que não programam também podem criar seu próprio conjunto de módulos de plug-in, de acordo com a documentação de ajuda. E um conjunto de arquivos cui, quase todos os cad reconhecerão, ao contrário da programação, é necessário compilar várias versões, problemas! Finalmente, o irmão mais novo adotou o método da barra de ferramentas + barra de menus, um conjunto de cui é feito e a área de desenho do cad não é grande, o espaço ocupado pelo menu e pela barra de ferramentas é o menor e também é o mais fácil de ajustar

78 artigos originais publicados · Gosto 16 · Visitar mais de 60.000

Acho que você gosta

Origin blog.csdn.net/zeqi1991/article/details/102810373
Recomendado
Clasificación