hide_kichiの情報

気になる情報を適当にアップしていきます

【MicroCadam(マイクロキャダム)Helix ACCESSコアについて】

f:id:hide_kichi:20190326111104j:plain

 

【MICROCADAM Helix ACCESSコアについて】

もうMICROCADAMから遠ざかって10年近くなります。

恐らく今後MICROCADAMを触ることもサポートすることもないでしょう。

Helixのアクセスコアプログラムも営業しながら夜寝る時間を惜しんで作ってました。しかしもうすっかり忘れちゃいました。

概略スキルだけ書き留めて置こうと思います。

今でもMICROCADAMを利用続けているユーザーは多いと思います。

ACCESSコアは難しそうなので手を出してない人もいると思います。

筆者はHelixが稼働する環境もないので概略だけ書きます。

 ・稼働環境

 ・VisualStudio(マイクロソフト無料版)をDWONLOAD,インストールします。

 ・Helixをインストールします。

  HelixのバージョンはV5.2だったと思います。

  今のバージョンは2018-r2ですね。

  • 開発にはCソースPRGとDLLモジュールを作成するためのBATが必要です。

 

 

 

f:id:hide_kichi:20190403150100p:plain

 

Dxfconvというプログラムを作成する場合。

  Dxfconv.c  : ソースプログラム

  Dxfconv.bat : コンパイルLINKするバッチ

  Dxfconv.def  : LINK定義ファイル

  この3つのファイルが重要です。

  ファイルの内容は以下です。

  

・DXFCONV.BATの内容


 @ECHO OFF
SET ORG_INCLUDE=%INCLUDE%
SET ORG_LIB=%LIB%
SET ACCESS_PATH=C:\MCHelix\HDD\ACCESS
SET LIB=%ACCESS_PATH%;%LIB%;
SET INCLUDE=%ACCESS_PATH%;%INCLUDE%;

cl /c /W3 /J /MD /DWIN32 /D_NTSDK DXFCONV.C >XXX.TXT
notepad XXX.TXT
LIB? /MACHINE:IX86 /OUT:DXFCONV.LIB? /DEF:DXFCONV.DEF? > NUL
LINK @DXFCONV.LNK
MT -MANIFEST DXFCONV.DLL.MANIFEST -OUTPUTRESOURCE:DXFCONV.DLL;2

SET INCLUDE=%ORG_INCLUDE%
SET LIB=%ORG_LIB%
SET ORG_INCLUDE=
SET ORG_LIB=
SET ACCESS_PATH=   

 

・DXFCONV.defの内容

 

LIBRARY DXFCONV

EXPORTS

        ac2userp

 

・DXFCONV.Cの内容

 

 MICROCADMの画面上から図面をCLOSEすることなく、画面上のMicroCadam図面情報をDXF変換し他のCADに渡して起動するプログラムです。

(シームレスにDXF変換PRGを起動させて他のCADを起動するプログラムです。)

 非常に簡単に作成できますが、効果高いプログラムです。

 


/***********************************************************************
*     MC->DXF TEST 処理                program                         *
*           FILE NAME                  DXFCONV.C                       *
*           function                   MC->DXF処理                     *
***********************************************************************/
 
#include 
#include 
#include 
#include 
#include "accfnc.h"
/* POPUP */
/*
#define  INCL_BLK_MSG1_NO1
#include "RYOCAM1_msg.dfn"
#include "RYOCAM1.dfn"
*/
/*============= Union of iarray for buadd,buget =======================*/
 union ELM {         
    long    iarray[20];
    float   rarray[20];
    char    carray[20][4];
};
 
static long   icolr;
static double ctrx;
static double ctry;
 
#define     PI          3.141593
#define     INDXG       ELM.iarray[0]
#define     INDXS       ELM.iarray[1]
#define     INDXAS      ELM.iarray[3]
#define     INDXT       ELM.iarray[4]
#define     INDXM       ELM.iarray[8]
#define     COLMDL      2L
#define     SELECT      1L
#define     IND         2L
#define     POPUP       7L
#define     ATTRIB      1100L
#define     DEFNUM      "6"
#define     DEFRAD      "50"
#define     DEFCOL      "DEFAULT"
 
static  FILE    *fp_o;
static  char    *g_file_o = "c:\\DATA\\TEST\\OUTPUT.DAT";
static  FILE    *fp_c;
static  char    *g_file_c = "c:\\DATA\\TEST\\PROG.LOG";
static  FILE    *fp_i;
static  FILE    *fp_i2;
static  char    *g_file_i = "c:\\DATA\\TEST\\INPUT.DAT";
 
static  FILE    *fp_x;
static  char    *g_file_x =  "WORK.DAT";
 
static  FILE    *fp_9;
static  char    *g_file_9 = "c:\\DATA\\TEST\\DEBUG.DAT";
 
#define MODEL1 1L
 
static double PAI=3.141593 ;
char *retc;
long   ret  ;
long   mptr ;
static long IDBG ;
static char IDBG_S[]=" " ;
 
 
/**************************************************************************************/
/*****       処理開始                              ******/
/**************************************************************************************/
 
void ac2userp( void )
{
    long    iflgar[3];          /* bubegn           */
    long    ioutar[3];          /* bubegn           */
    long    modear[3];          /* bumode           */
    long    prsbtn;             /* msgbox           */
    long    mask[7];            /* event            */
    long    event;              /* event            */
    long    nchar;              /* poplbl_set       */
    long    popno;              /* popevent         */
    long    objno;              /* popevent         */
    long    pevent;             /* popevent         */
    long    num;                /* gatr             */
    long    atrno;              /* gatr             */
    long    atrptr;             /* gatr             */
    long    itype;              /* buget,elmsel     */
    long    topelm;             /* elmsel           */
    long    toptyp;             /* elmsel           */
    long    subelm;             /* elmsel           */
    long    subtyp;             /* elmsel           */
    long    ivunum;             /* buview           */
    long    ivuid;              /* buview           */
    long    iparvu;             /* buview           */
    float   vaxar;              /* buview           */
    float   vmrxar;             /* buview           */
    double  vx;                 /* position         */
    double  vy;                 /* position         */
    char    drv;
    char    drv2;
    char    drv0;
    unsigned char   group[4];   /* buopen           */
    unsigned char   user[6];    /* buopen           */
/*    unsigned char   id[20];     /* buopen           */
    unsigned char   text[31];   /* poplbl_set       */
   unsigned char   group0[4];   /* buopen           */
    unsigned char   user0[6];    /* buopen           */
 
    char  wild;
    char  wid[20];
    char  id[2000];
    char  pnfn[20];
    long  iopt;
    long  skip;
    long  number;
    long  idata[100][20];
    char  cdata[100][116];
 
 
    short   ierr;
    short   iret;
    long    modno;
    long    mptr;
    long    curmdl = 1L;
    long    msgblk = 0L;
    long    popopn = 0L;
    long    msgno;
    union ELM   ELM;
    long ii;
        long  lwork;              /* 99.05.11 */
        float fwork;
    char  cwork[]=" "; 
       
 
    drv =  'C';
    memcpy( group, "CAD ", 4 );
    memcpy( user,  "TRAIN ", 6 );
    memcpy( wid,   "A???????????????????", 20 );
    wild   = '?';
    skip   = 0L;
    number = 100L;
    iopt   = 1L;
 
#define scanf scanf_s
 
IDBG=0;
        /**************************/
        /* FILE READ              */
        /**************************/
        /*
        fscanf(fp_i2,"%s",XXXXX ) ;
        fclose(fp_i2)            ;
        */
/*
        fscanf(fp_9,"%s",IDBG_S ) ;
        IDBG = atoi(IDBG_S)       ;
    fclose(fp_9)            ;
 
    /****************************************/
    iflgar[0] = 52L;
    iflgar[1] = 1L;
    iflgar[2] = 1L;
    ierr = 1L;
    iret = MC_bubegn ( 1L, iflgar, ioutar, ierr );
    if( iret )  return;
 
    modear[0] = 2L;
    modear[1] = 0L;
    modear[2] = 11L;
    iret = MC_bumode ( 1L, modear, ierr );
    if( iret )  goto exit;
 
    iret = MC_budriv( 2L, MODEL1, &drv0, 12L );  /* 区画の問い合わせ */
    if( iret )  goto exit;
 
    iret = MC_curgrpusr_get( &drv0, group0, user0 );
 
    iret = MC_curmdl( 1L, &modno );          /* Query */
       
       
         ret = MC_buget ( 1L,MODEL1,mptr,&itype,GET.iarray,27L );
  
/* Add a reference parts */
    long   mptr;
    long   lenerr;
    long   ierrar[2];
    short ret;
    union {
        long   iarray[70];
        float  rarray[70];
        double darray[35];
    } ELM;
 
    #define   MODEL1  1L
    #define   PARTS   1720L
    #define   INDXG   ELM.iarray[0]
    #define   INDXS   ELM.iarray[1]
    #define   INDXAS  ELM.iarray[3]
       .
 
/*----- Global Information -----*/
    ELM.iarray[INDXG] = 1L;             /* Storage precision flag */
 
/*----- Specific Information -----*/
    ELM.rarray[INDXS-1] = 10.0;         /* X coordinate of pivot point */
    ELM.rarray[INDXS  ] = 10.0;         /* Y coordinate of pivot point */
    ELM.rarray[INDXS+1] = 0.0;          /* Angle of rotation */
    ELM.rarray[INDXS+2] = 1.0;          /* Scale */
    ELM.iarray[INDXS+3] = 0L;           /* Mark option */
 
/*----- Parts Information -----*/
    memcpy( ELM.carray[INDXAS-1], "CAD ", 4 );
    memcpy( ELM.carray[INDXAS  ], "TRAIN ", 6 );
    memcpy( ELM.carray[INDXAS+2], "ACCESS PARTS        ", 20 );
 
    ret = MC_buadd( 1L, MODEL1, PARTS, ELM.iarray, &mptr, 1700L );
    ret = MC_budspe( 2L,MODEL1,1L,&mptr,0L,&lenerr,ierrar,999L );
  
        iret = MC_drwlst( iopt, drv, group, user, wild, wid, skip,
                     &number, id, idata[0], cdata[0] );
 /*
  ret = MC_bufile( 4L, MODEL1, group, user, id, 21L );
 */
 
    drv2 = 'C' ;
    iret = MC_budriv( 1L, MODEL1, &drv2, 13L );
    if( iret )  goto exit;
 
 
/************** End of ACCESS ******************************************/
   /* ret = MC_bufile( 4L, MODEL1, "cad ", "train ", "12345678901234567890", 21L ); */
    ret = MC_bufile( 4L, MODEL1, "CAD ", "TRAIN ", "TEST            DXF ", 21L );
 
   drv2 = drv ;
    iret = MC_budriv( 1L, MODEL1, &drv2, 13L );
    if( iret )  goto exit;
 
       
        */
        /* Drawing ID */
 
   iret = MC_curgrpusr_set( drv0, group0, user0 );          /* PC */
 
       
        ret = MC_rendrw( MODEL1,wid );
 
    MC_buend ( 1L, ierr );
        ret = system("c:\\mchelix\\hdd\\access\\dxfconv\\DXFM2.BAT") ; 
    /*ret = system("\mcadam\asa\dxfgm.bat") ; 
      */
  exit:
    return;
}


 

 



ちょっとしたプログラムで仕事の効率をあげることができます。 プログラムがわからないから無理と言わないで設計部門に2人くらいプログラムがわかる人を育てると面白いことができると思います。 プログラムの細かい設計など必要ないし、その場で修正できるのがメリットだと思います。 ソフト会社に頼むと高いものになるし、修正追加も簡単ではありません。 是非是非!!

子供たちもプログラムの勉強をするみたいですしね・・・・・?。 お父さん頑張って!!

次回はAUTOCAD LTでのちょっとしたプログラミングを紹介します。