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

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

AVEVA PML.Net for DWG

Posted on 2015-08-01 09:39 eryar 閱讀(4427) 評(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可以編寫(xiě)代理PML對(duì)象,這種代理對(duì)象可以在PML中被調(diào)用,其調(diào)用方式和其他PML對(duì)象完全一樣。且PML.Net編寫(xiě)的dll部署簡(jiǎn)單,不像AddIn開(kāi)發(fā)出的插件那樣需要比較復(fù)雜的配置。只需要將生成的dll放到PDMS安裝目錄,即可以在PML中調(diào)用了。

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

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

wps_clip_image-24956

Figure 1.1 DWGDirect_Net by Open Design Alliance

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

2.OpenDWG usage

既然在官方的版本中提供了DWGDirect_Net庫(kù),那么就可以正大光明地用在自己的程序開(kāi)發(fā)中來(lái)對(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編寫(xiě)的C#組件的布置更簡(jiǎn)單。如果你的程序算法復(fù)雜,且對(duì)性能有一定要求的話,可以考慮使用PML.Net來(lái)開(kāi)發(fā)。下面結(jié)合上述生成DWG文件的代碼,編寫(xiě)一個(gè)簡(jiǎn)單的處理DWG文件的PML .Net組件,來(lái)體驗(yàn)下用C#開(kāi)發(fā)的效率。

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

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

5. References

1. Shing Liu. OpenCASCADE DataExchange DWG. 

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

2. Shing Liu. OpenCASCADE DataExchange DXF. 

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

3. Shing Liu. AVEVA PML.Net Guide. 

http://m.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>
            欧美jjzz| 久久福利资源站| 欧美日本一区二区三区 | 欧美一区视频在线| 欧美亚洲日本网站| 久久久久久久久一区二区| 久久精品国产成人| 美女亚洲精品| 91久久夜色精品国产九色| 你懂的成人av| 亚洲精品国产精品久久清纯直播| 日韩亚洲欧美高清| 午夜宅男欧美| 欧美暴力喷水在线| 国产精品久久久亚洲一区 | 亚洲综合不卡| 久久久久91| 亚洲国产另类 国产精品国产免费| 亚洲国产综合在线看不卡| 一区二区三区高清在线| 欧美自拍偷拍午夜视频| 欧美福利电影在线观看| 国产精品剧情在线亚洲| 亚洲国产成人精品久久久国产成人一区 | 激情文学综合丁香| 久热精品视频在线免费观看| 亚洲精品欧洲精品| 亚洲欧美日韩精品久久久久| 亚洲最快最全在线视频| 亚洲乱码一区二区| 久久激情五月丁香伊人| 欧美高清在线一区| 亚洲一区二区成人| 六月天综合网| 国产婷婷色一区二区三区在线| 亚洲日本中文字幕| 欧美一区亚洲| 亚洲精品人人| 欧美成人精品影院| 国产一区成人| 亚洲欧美日本国产有色| 亚洲国内欧美| 裸体丰满少妇做受久久99精品| 国产欧美日韩| 亚洲一区二区欧美| 亚洲精品日韩在线观看| 欧美a级片网站| 亚洲国产成人精品久久| 麻豆亚洲精品| 欧美在线观看一区| 国产性做久久久久久| 亚洲综合色网站| 日韩亚洲国产精品| 欧美日韩三级电影在线| 亚洲精一区二区三区| 欧美激情视频一区二区三区不卡| 欧美一区二区三区精品电影| 国产精品人成在线观看免费| 亚洲一区二区三区在线视频| 99伊人成综合| 欧美午夜理伦三级在线观看| 中文精品视频| 亚洲天堂av高清| 国产精品久久久久毛片软件 | 久久国产精品一区二区| 国产亚洲精品7777| 久久久国产亚洲精品| 性视频1819p久久| 国产一区视频网站| 免费成人毛片| 欧美高清一区| 亚洲图片在线观看| 亚洲欧美国产制服动漫| 国产亚洲福利社区一区| 美脚丝袜一区二区三区在线观看| 久久成人国产精品| 亚洲国产成人不卡| 亚洲精品免费网站| 国产精品久久久久久久久久三级| aaa亚洲精品一二三区| 日韩一区二区久久| 久久国产日本精品| 亚洲丶国产丶欧美一区二区三区| 欧美岛国激情| 欧美黄色一级视频| 亚洲欧美乱综合| 欧美一区不卡| 亚洲黄色在线视频| 在线视频精品一| 国产一区二区三区四区hd| 欧美不卡视频| 欧美日韩在线播放| 久久天天狠狠| 欧美日韩国产在线一区| 久久精品视频一| 欧美久久综合| 久久九九国产精品怡红院| 欧美成人免费视频| 欧美一级大片在线观看| 久久久久久亚洲综合影院红桃| 亚洲欧美日韩精品综合在线观看| 韩日欧美一区二区| 亚洲精品在线观| 国产一区二区精品| 欧美激情一级片一区二区| 国产精品视频导航| 亚洲国产精品成人| 国产亚洲精品一区二区| 亚洲欧洲一区二区三区在线观看| 国产精品永久入口久久久| 欧美高清在线精品一区| 国产欧美日韩综合一区在线观看| 亚洲国内在线| 樱桃国产成人精品视频| 亚洲一区二区成人在线观看| 日韩视频免费大全中文字幕| 久久九九免费视频| 欧美在线免费一级片| 欧美精品久久久久久久| 蜜桃久久av| 国内精品一区二区| 亚洲欧美中文日韩在线| 亚洲午夜小视频| 欧美精品成人| 亚洲激情视频在线观看| 伊人婷婷久久| 久久精品在线播放| 久久久综合网| 国产在线成人| 欧美在线国产精品| 欧美专区一区二区三区| 亚洲国产va精品久久久不卡综合| 国产精品一区二区三区久久| 99热在这里有精品免费| 99re在线精品| 欧美成人国产一区二区| 亚洲高清在线观看| 亚洲精品视频啊美女在线直播| 久久久激情视频| 另类尿喷潮videofree| 国产视频一区三区| 久久成人在线| 美女图片一区二区| 在线免费观看成人网| 亚洲人成网站色ww在线| 9色精品在线| 欧美凹凸一区二区三区视频| 欧美韩日精品| 亚洲毛片在线观看| 欧美日韩1区| 亚洲天堂成人在线视频| 午夜视频精品| 国产主播精品| 久久亚洲一区二区| 欧美激情亚洲另类| 亚洲素人一区二区| 国产亚洲欧美激情| 老**午夜毛片一区二区三区| 欧美高清在线一区二区| 一本到高清视频免费精品| 欧美午夜激情在线| 亚洲一级影院| 免费一级欧美片在线观看| 日韩视频在线观看| 国产精品午夜春色av| 久久久久久夜精品精品免费| 亚洲黄色成人久久久| 亚洲综合首页| 国产综合在线看| 欧美精品三级日韩久久| 亚洲欧美日韩爽爽影院| 欧美成人免费网站| 亚洲天堂激情| 精品成人在线| 欧美性猛交视频| 久久久久久久综合| 99精品国产一区二区青青牛奶| 久久久精品国产免大香伊| 亚洲国产精品久久| 国产精品中文字幕欧美| 久久夜色精品亚洲噜噜国产mv| 91久久精品国产91久久| 久久精品国产成人| 亚洲网在线观看| 伊人久久大香线| 欧美日韩影院| 免费精品99久久国产综合精品| 亚洲一区二区三区四区五区午夜| 久久婷婷久久| 亚洲欧美色婷婷| 亚洲美女电影在线| 在线观看成人一级片| 国产精品永久入口久久久| 欧美精品啪啪| 免费在线观看一区二区| 久久精品论坛| 欧美一区二区精品| 亚洲一区日本| 一区二区三区免费在线观看| 亚洲国产高清自拍|