cad ---メニュー、ツールバー、画面上のメニュー、拡張ツールバー

CADの補助プロンプト機能

最近、弟がインターネットで多くのプラグインを見つけたので、これらの断片化されたプラグインを使用するために同様のメニューを作成したいと思い、ツールセットをカスタマイズしたいと思ったので、メニュー、ツールバー、オンスクリーンメニューなどについて尋ねました。その他の方法については、ここに要約があります。関連情報は、XDフォーラムおよびMingjingチャネルで入手できます。
メニュー、ツールバー、難しい画面メニュー、拡張ツールバーなどを含む一般的なCAD補助プロンプト

メニュー

CADメニューは比較的一般的です。たとえば、
ここに画像の説明を挿入
一般に、他のプラグインを作成するときに、ブラケット用のこのモジュールなどのモジュールのプラグインを作成する場合は
ここに画像の説明を挿入
、メニューがより適切です。
MFCを使用して作成する、COMを使用して作成する、CUIファイルを使用するなど、メニューを作成する方法はたくさんあります。ここで、最も推奨される方法は、高速で便利でエラーがほとんどないCUIを使用することです。ここでは例を示します。最初にファイルをmnu形式で作成し、次のように記述します。

***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]

次に、cadを開き、コマンドmenuloadを使用してmnuファイルをロードします。cadがロードされると、同じ名前のmnrファイルとcuixファイルが生成されます。
ここに画像の説明を挿入
ここに画像の説明を挿入
通常は、メニューをさらに最適化してより美しくする必要はありません。これを実行したい場合は、cuiを使用できますエディタ、このcuixメニューファイルにアイコンを追加します。
cuixファイルとarxファイルをまとめて、最後にcuixファイルをコードにロードします。
最後にまとめると、メニューを生成するためにcuixファイルを使用する方法が最も便利で高速であり、コードを変更する必要がなく、アイコンを追加するプロセスでより便利で簡単です。comメソッドとmfcメソッドでメニューを追加する場合、2つの悪い点があります。1つはコードを変更するためにメニューを変更することです。2つ目はcadワークスペースを切り替えることです。メニューが消え、これはさらに面倒です。

ツールバー

ツールバー
正直なところ、ツールバーも推奨される方法です。作成するプラグインもモジュール専用で、10未満などのコマンドが少ない場合は、ツールバーが適切な方法です。ツールバーの練習また、com、MFC、cuixで実行できるさまざまな方法もあります。ここでは、cuixメソッドを使用することをお勧めします。便利、簡単、操作しない場合は、cadを開き、F1キーを押します。ヘルプファイルにツールバーメニューを作成する方法があります。
ここに画像の説明を挿入
ここで私が話しているのは、プラグインタイガーボードキングなどの拡張ツールバーです。msteelツールバー
ここに画像の説明を挿入
は、拡張ツールバーを使用して、主に大規模なマルチモジュールコマンド、中規模から大規模なインターフェース操作を行います。メソッド、私も同様のものを作成しました。
ここに画像の説明を挿入
そのレイアウトとその中のメニューは、必要なボタンの数、ボタンに含まれるメニューの数など、ファイルコントロールを用意するのが最適です。ファイルに明確に書き込んだ後、これを解析しますファイル、このツールバーを作成します。

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

[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

これは私が書いたファイルで、ボタンと各ボタンの下のメニューが含まれています。
メニューにサブメニューが含まれている場合

[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

このように追加することができ、便利で実用的です
コードを変更する必要はなく、ファイルを解析するだけです。拡張ツールバーのアイデア:

#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);
};

CAcUiToolBarの派生物であるCAcUiDialogBarの派生物であり、比較的単純です。

画面上のメニュー

実際には、画面上のメニューが最も厄介なシステムであると推定されています。TianzhengやExplorerなどの商用の大規模なプラグインツールがこれを使用します。一般的に、大規模な商用のものはこれを使用します。最高度の定義。アイコンボタン、ドロワーメニュー、アイコン付きのさまざまなボタンなど、多くのものが画面上のメニューに追加できます。とにかく、見栄えはよくなりますが、MFCのスキルが必要であり、大規模なメンテナンスが必要であり、コストは比較的高くなります。これは自分で作った画面上のメニュー
ここに画像の説明を挿入
で、明京チャンネルで似たようなものを見て、それを書き直しました。より複雑ですが、強化されたツールバーと同じです。すべてのメニューを説明するmnuまたはtxtを記述し、後でファイルを変更して、画面上のメニューを一度に変更します。

まとめ

方法 アドバンテージ 短所
ツールバー 少数のコマンドに適しています 大きなモジュール、複数のモジュールには適していません
メニュー 中小規模のモジュール、複数のモジュールに適しています 大きなモジュールには適していません。comとMFCの使用には欠点があります
強化されたツールバー 大中規模のシステムモジュールに最適 コード、高コストを維持する必要がある
画面上のメニュー 商用プラグインに適しています 高コスト

できるだけツールバーとメニューバーを使用することを強くお勧めします。コストは低く、プログラムを作成できない人も、ヘルプドキュメントに従って独自のプラグインモジュールセットを構築できます。また、プログラミングとは異なり、ほとんどすべてのCADが認識するcuiファイルのセットは、複数のバージョンをコンパイルする必要があるため、問題が発生します。最後に、弟はツールバー+メニューバーの方法を採用し、一連のcuiがすべて完了し、cadの描画領域は大きくなく、メニューとツールバーが占めるスペースは最小であり、調整も最も簡単です

公開された78のオリジナル記事 いいね16 訪問60,000+

おすすめ

転載: blog.csdn.net/zeqi1991/article/details/102810373