青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

AVEVA PML.Net for DWG

Posted on 2015-08-01 09:39 eryar 閱讀(4412) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 4.AVEVA Solution

AVEVA PML.Net for DWG

eryar@163.com

Abstract. AVEVA PmlNet allows you to instantiate and invoke methods on .NET objects from PML proxy objects. The PML proxy objects behave just like any other PML object. By PML proxy object you can use many other C# resources easily. The paper show an example to use PML proxy object to read and write AutoCAD DXF/DWG files by the OpenDWG library in AVEVA PDMS. 

Key Words. AVEVA, PDMS, Marine, Plant, OpenDWG, AutoCAD, DWG, DXF

1. Introduction

使用AVEVA PML.Net可以編寫代理PML對(duì)象,這種代理對(duì)象可以在PML中被調(diào)用,其調(diào)用方式和其他PML對(duì)象完全一樣。且PML.Net編寫的dll部署簡(jiǎn)單,不像AddIn開發(fā)出的插件那樣需要比較復(fù)雜的配置。只需要將生成的dll放到PDMS安裝目錄,即可以在PML中調(diào)用了。

使用PML.Net編寫的PML代理類可以大大方便C#開發(fā)者的開發(fā),且可使用C#相關(guān)的大量資源,甚至是C++等資源。如本文所說的OpenDWG庫,可以實(shí)現(xiàn)在PDMS中直接對(duì)DWG/DXF文件進(jìn)行讀寫。

做CAD開發(fā)的應(yīng)該都聽說過AutoCAD,而讀寫DWG文件的庫,除了Autodesk公司的以外,還有一個(gè)組織開發(fā)出來的OpenDWG,這個(gè)組織的名字是Open Design Alliance(ODA)。因?yàn)镈WG文件廣泛使用且沒有公布文件格式,所以才有這個(gè)ODA的存在。在AVEVA 12.0版本中無意發(fā)現(xiàn)了DWGDirect相關(guān)的庫,如圖所示:

wps_clip_image-24956

Figure 1.1 DWGDirect_Net by Open Design Alliance

本文對(duì)如何使用PML.Net編寫代理PML類起到拋磚引玉的作用,讀者可以在此基礎(chǔ)上盡情自由發(fā)揮,編寫出更加實(shí)用的程序。

2.OpenDWG usage

既然在官方的版本中提供了DWGDirect_Net庫,那么就可以正大光明地用在自己的程序開發(fā)中來對(duì)DWG文件做些處理,如為Draft的出圖使用DWG模板、修改導(dǎo)出的DXF圖紙中的中文字體、將DXF文件直接轉(zhuǎn)換成DWG格式等等。

DWGdirect_Net的用法很簡(jiǎn)單,下面給出一個(gè)最簡(jiǎn)單的例子,更詳細(xì)的內(nèi)容可參考ODA提供的示例程序。

using System;
using System.Text;
using System.Collections.Generic;

using DWGdirect.Runtime;
using DWGdirect.Geometry;
using DWGdirect.DatabaseServices;

namespace OpenDwgTest
{
    
/// <summary>
    
/// a simple demo about how to use OpenDWG.
    
/// <author>Shing Liu(eryar@163.com)</author>
    
/// </summary>
    class Program
    {
        
static void Main(string[] args)
        {
            
// initialize DWGdirect.
            using (Services aService = new Services())
            {
                
try
                {
                    
using (Database aDatabase = new Database())
                    {
                        
using (BlockTable aBlockTable = (BlockTable)aDatabase.BlockTableId.GetObject(OpenMode.ForRead))
                        {
                            ObjectId aModelSpaceId 
= aBlockTable[BlockTableRecord.ModelSpace];
                            
using (BlockTableRecord aRecord = (BlockTableRecord)aModelSpaceId.GetObject(OpenMode.ForWrite))
                            {
                                
// make a cirlce.
                                Circle aCircle = new Circle();
                                aCircle.SetDatabaseDefaults(aDatabase);
                                aCircle.Radius 
= 50.0;

                                aRecord.AppendEntity(aCircle);

                                
// make a text.
                                DBText aText = new DBText();
                                aText.SetDatabaseDefaults(aDatabase);
                                aText.Position 
= new Point3d(-35.010.00.0);
                                aText.TextString 
= "Hello World! by OpenDWG";
                                aText.Height 
= 5.0;
                                aText.WidthFactor 
= 0.7;
                                aRecord.AppendEntity(aText);
                            }

                        }

                        aDatabase.SaveAs(
"d:/test.dwg", DwgVersion.vAC18);
                    }
                }
                
catch (System.Exception e)
                {
                    Console.WriteLine(
"\nError: {0}", e.Message);
                }
            }
        }
    }
}

程序主要生成一個(gè)圓和一個(gè)文本,并將結(jié)果保存到文件d:/test.dwg中,效果如下圖所示:

wps_clip_image-8632

Figure 2.1 DWG generated by OpenDWG

從上面的代碼及生成結(jié)果可以看出,OpenDWG的用法還是很簡(jiǎn)單的,封裝得簡(jiǎn)單易用。

3.PML Proxy Object

AVEVA PML.Net提供的代理PML對(duì)象,使得在PML中調(diào)用C#的組件更加靈活,而且PML.Net編寫的C#組件的布置更簡(jiǎn)單。如果你的程序算法復(fù)雜,且對(duì)性能有一定要求的話,可以考慮使用PML.Net來開發(fā)。下面結(jié)合上述生成DWG文件的代碼,編寫一個(gè)簡(jiǎn)單的處理DWG文件的PML .Net組件,來體驗(yàn)下用C#開發(fā)的效率。

用C#編寫PML代理對(duì)象也是很簡(jiǎn)單的,下面直接給出代碼,對(duì)于PML.Net的使用可參考以前發(fā)的blog:


using System;
using System.Text;
using System.Windows.Forms;
using System.Collections.Generic;

using Aveva.PDMS.PMLNet;

using DWGdirect.Runtime;
using DWGdirect.Geometry;
using DWGdirect.DatabaseServices;


namespace eryar.pmlnet.dwg
{
    
/// <summary>
    
/// a simple PML.Net object to test OpenDWG.
    
/// <author>Shing Liu(eryar@163.com)</author>
    
/// </summary>
    [PMLNetCallable()]
    
public class DwgTest
    {
        [PMLNetCallable()]
        
public DwgTest()
        {
        }

        [PMLNetCallable()]
        
public void Assign(DwgTest rhs)
        {
        }

        [PMLNetCallable()]
        
public void RunTest()
        {
            
// initialize DWGdirect.
            using (Services aService = new Services())
            {
                
try
                {
                    
using (Database aDatabase = new Database())
                    {
                        
using (BlockTable aBlockTable = (BlockTable)aDatabase.BlockTableId.GetObject(OpenMode.ForRead))
                        {
                            ObjectId aModelSpaceId 
= aBlockTable[BlockTableRecord.ModelSpace];
                            
using (BlockTableRecord aRecord = (BlockTableRecord)aModelSpaceId.GetObject(OpenMode.ForWrite))
                            {
                                
// make a cirlce.
                                Circle aCircle = new Circle();
                                aCircle.SetDatabaseDefaults(aDatabase);
                                aCircle.Radius 
= 50.0;

                                aRecord.AppendEntity(aCircle);

                                
// make a text.
                                DBText aText = new DBText();
                                aText.SetDatabaseDefaults(aDatabase);
                                aText.Position 
= new Point3d(-35.010.00.0);
                                aText.TextString 
= "Hello World! by PML.Net";
                                aText.Height 
= 5.0;
                                aText.WidthFactor 
= 0.7;
                                aRecord.AppendEntity(aText);
                            }

                        }

                        aDatabase.SaveAs(
"d:/test.dwg", DwgVersion.vAC18);

                        MessageBox.Show(
"Test DWG finished!");
                    }
                }
                
catch (System.Exception e)
                {
                    Console.WriteLine(
"\nError: {0}", e.Message);
                }
            }
        }
    }
}

將生成的dll文件放到PDMS的安裝目錄中就可以在PML中調(diào)用了。調(diào)用代碼如下所示:

-------------------------------------------------------------------------------
-- Copyright (C) 2015 Shing Liu All Rights Reserved.
--
-- File:            testdwg.pmlmac
--   Type:          Macro Definition
--   Group:         Application
--     Keyword:     Test PML.Net and DWG.
--   Module:        ANY
--
-- Author:          Shing Liu(eryar@163.com)
-- Created:         2015-08-01 08:32
--
-- Description:     Test the OpenDWG in PML.Net.
--
-------------------------------------------------------------------------------

import 'eryar.pmlnet.dwg'
using namespace 
'eryar.pmlnet.dwg'

!aTest = object DwgTest()
!aTest.runTest()

我一般是在monitor中調(diào)試PML.Net程序,因?yàn)閱?dòng)monitor速度快,如下圖所示:

wps_clip_image-9213

Figure 3.1 PML.Net object usage

生成結(jié)果如下圖所示:

wps_clip_image-19439

4.Conclusion

綜上所述,OpenDWG的C#封裝用起來還是很方便的,而使用PML.Net編寫的PML代理對(duì)象,使得在AVEVA產(chǎn)品中調(diào)用C#組件更加便利。本文結(jié)合OpenDWG和PML.Net給出具體實(shí)例,為PDMS程序的開發(fā)開闊下思路。

關(guān)于DWG文件的讀寫,也可以不借助于OpenDWG。如果公司采購了AutoCAD,也可以直接使用AutoCAD .Net來對(duì)DWG進(jìn)行操作,程序更加穩(wěn)定。

5. References

1. Shing Liu. OpenCASCADE DataExchange DWG. 

http://www.shnenglu.com/eryar/archive/2014/10/15/208581.html

2. Shing Liu. OpenCASCADE DataExchange DXF. 

http://www.shnenglu.com/eryar/archive/2013/12/22/204948.html

3. Shing Liu. AVEVA PML.Net Guide. 

http://www.shnenglu.com/eryar/archive/2014/12/25/209307.html

4. Autodesk. AutoCAD .Net Developer’s Guide.

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            艳妇臀荡乳欲伦亚洲一区| 久久精品理论片| 欧美国产日韩一区二区在线观看| 亚洲一区二区3| 午夜精品久久久| 激情婷婷欧美| 久久夜色精品国产亚洲aⅴ| 欧美一级日韩一级| 国产午夜精品理论片a级大结局| 99热免费精品| 亚洲欧美在线网| 精品av久久久久电影| 久久综合一区二区| 欧美r片在线| 亚洲一区精彩视频| 欧美一二三区精品| 伊人精品久久久久7777| 欧美成人a视频| 久久一区二区三区av| 亚洲第一搞黄网站| 亚洲美女色禁图| 国产伦精品一区二区三| 久久久久久久久久久久久9999| 免费亚洲电影在线| 亚洲一区日韩在线| 久久国产精彩视频| 91久久久久久久久| 久久亚洲国产成人| 国产精品扒开腿爽爽爽视频| 亚洲免费中文字幕| 久久免费偷拍视频| 洋洋av久久久久久久一区| 一本在线高清不卡dvd | 亚洲成人中文| 女女同性精品视频| 性8sex亚洲区入口| 免费在线欧美视频| 亚洲国产日韩美| 欧美综合国产| 一本色道久久综合亚洲精品不| 午夜激情综合网| 一本色道久久88精品综合| 狠狠色狠狠色综合| 欧美国产日本| 国产精品天美传媒入口| 欧美激情麻豆| 国产一区二区三区日韩| 亚洲先锋成人| 99re6热在线精品视频播放速度| 亚洲影视在线| 在线一区二区视频| 亚洲一区二区三区在线看| 亚洲国产精品女人久久久| 性欧美精品高清| 中文av一区特黄| 欧美高清在线视频观看不卡| 亚洲欧美资源在线| 欧美精品久久一区二区| 欧美大片在线看| 狠狠色狠狠色综合人人| 午夜性色一区二区三区免费视频| 亚洲午夜精品久久久久久app| 激情欧美一区二区| 久久精品一二三区| 久久久噜噜噜久噜久久| 亚洲高清三级视频| 久久免费偷拍视频| 午夜精品久久久久久久| 99亚洲伊人久久精品影院红桃| 欧美日韩一区高清| 久久成人免费网| 99v久久综合狠狠综合久久| 欧美一区二区大片| 亚洲激情二区| 国产精品有限公司| 欧美在现视频| 日韩小视频在线观看专区| 久久精品视频网| 一区二区久久久久| 国产精品久久久久一区二区三区共 | 性一交一乱一区二区洋洋av| 欧美电影免费观看| 亚洲线精品一区二区三区八戒| 国产视频亚洲精品| 欧美美女bbbb| 久久另类ts人妖一区二区| 亚洲国产精品成人综合| 久久九九国产精品怡红院| 亚洲视频狠狠| 91久久线看在观草草青青| 国精产品99永久一区一区| 国产精品精品视频| 欧美色图首页| 欧美日韩一区二区在线观看视频 | 欧美好吊妞视频| 蜜桃av一区二区| 蜜臀91精品一区二区三区| 久久精品久久综合| 久久精品国产亚洲一区二区| 欧美一级片在线播放| 亚洲免费一级电影| 亚洲自拍另类| 亚洲欧美在线免费观看| 午夜精品区一区二区三| 亚洲欧美综合精品久久成人| 先锋影音网一区二区| 久久成人免费电影| 久久国产直播| 久久人体大胆视频| 欧美xxxx在线观看| 亚洲电影免费观看高清完整版在线观看 | 国产亚洲精品久久久久动| 国产精品亚洲美女av网站| 国产精品系列在线播放| 国产日韩亚洲欧美精品| 国内精品久久国产| 亚洲黄色高清| 在线视频欧美日韩精品| 亚洲综合首页| 久久精品视频网| 欧美大片免费观看在线观看网站推荐| 欧美高清视频在线| 亚洲精选在线| 亚洲欧美一区二区三区久久 | 国产欧美日韩免费| 精品动漫一区二区| 亚洲精品你懂的| 亚洲视频一区二区在线观看 | 亚洲欧美日韩一区二区在线| 久久精品在这里| 亚洲成色精品| 亚洲天堂偷拍| 久久免费视频网| 欧美色综合天天久久综合精品| 国产美女精品在线| 在线欧美一区| 亚洲在线日韩| 欧美 日韩 国产一区二区在线视频| 亚洲国产老妈| 亚洲欧美影音先锋| 欧美紧缚bdsm在线视频| 国产精品日韩在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 一区二区三区高清在线| 久久亚洲电影| 亚洲天堂男人| 欧美韩日一区二区| 国产欧美一区二区三区久久| 亚洲人精品午夜| 久久精品在这里| 一本色道婷婷久久欧美| 久久综合亚洲社区| 国产精品亚洲综合| 亚洲精品美女免费| 久久久国产精品一区| av成人国产| 欧美福利一区二区三区| 国产在线视频不卡二| 亚洲欧美成人网| 亚洲激情影院| 久热精品在线视频| 国产偷自视频区视频一区二区| 一区二区三区久久| 欧美激情日韩| 久久久精品久久久久| 国产精品永久在线| 亚洲影视在线| 亚洲美女色禁图| 欧美成人精品| 亚洲电影观看| 美女精品一区| 久久精品欧美| 国内在线观看一区二区三区| 欧美一区二区观看视频| 亚洲视频在线观看网站| 欧美日韩国产成人在线观看| 亚洲欧洲在线一区| 欧美a级片网站| 久久香蕉精品| 亚洲电影av| 欧美第一黄网免费网站| 久久久免费精品视频| 国产综合香蕉五月婷在线| 久久国产精品99久久久久久老狼| 亚洲图片欧洲图片av| 国产精品女人久久久久久| 久久久久在线| 一色屋精品视频在线观看网站| 久久久一二三| 久久女同精品一区二区| 一区二区三区在线高清| 免费成人毛片| 农村妇女精品| 一本大道久久精品懂色aⅴ| 最近中文字幕日韩精品| 欧美日韩视频在线第一区| 国产精品99久久99久久久二8 | 国产精品久久久久久影视| 午夜欧美不卡精品aaaaa| 亚洲欧美在线网|