ProSolid下的遍历访问封装代码

  在ProE二次开发中,时常需要遍历ProSolid下的面、点、轴等几何元素。我们知道,ProToolkit下的遍历函数还是有点小麻烦的,而ProWebLink中就简单很多,比如要遍历某ProSolid下的所有Group,代码如下:

1 var  groupList = sld.ListGroups();
2 for (var i=0; i<groupList.Count; ++i)
3 {
4   ...
5 }

  那么,ProToolkit下是否可以封装类似的代码呢?当然可以。

  先贴一段我封装之后遍历访问ProSolid下所有Datum Point的代码:

 1     ProError err;
 2     ProMdl mdl_curr;
 3     err = ProMdlCurrentGet(&mdl_curr);
 4     
 5     try
 6     {
 7         // 利用当前Model构造CProSolid对象,并遍历访问其下的所有Datum Point
 8         CProSolid sld((ProSolid)mdl_curr);
 9         CProList<ProPoint> pntList = sld.ListPoints();
10         CString cstr;
11         cstr.Format(TEXT("%d"), pntList.size());
12         AfxMessageBox(cstr);
13 
14         // 对每个Datum Point执行操作
15         for (int i=0; i<pntList.size(); ++i)
16         {
17             ProPoint pnt = pntList[i];
18             int id;
19             err = ProPointIdGet(pnt, &id);
20             CString cstr;
21             cstr.Format(TEXT("Point Id: %d."), id);
22             AfxMessageBox(cstr);
23         }
24 
25     }
26     catch (exception& e)
27     {
28         AfxMessageBox(TEXT("exception."));
29     }

再贴上我封装的代码:

1、CProArray.h    在前一篇博文<<类似vector的ProArray封装类CProArray>>中已贴出。

2、CProList.h

View Code
  1 #ifndef _C_PRO_LIST_H_
  2 #define _C_PRO_LIST_H_
  3 
  4 #include <ProToolkit.h>
  5 #include "CProArray.h"
  6 #include <exception>
  7 #include <stdexcept>
  8 
  9 using std::exception;
 10 using std::out_of_range;
 11 using std::bad_alloc;
 12 
 13 template<class TYPE, size_t reallocationSize = 5>
 14 class CProList
 15 {
 16 public:
 17     CProList() 
 18         //throw(bad_alloc)
 19         : m_pArr(new CProArray<TYPE, reallocationSize>())
 20     {}
 21 
 22     CProList(const CProList& rhs)
 23         : m_pArr(rhs.m_pArr)
 24     {
 25         ++(m_pArr->use);
 26     }
 27 
 28     CProList& operator=(const CProList& rhs)
 29     {
 30         if (--(m_pArr->use) == 0)
 31             delete m_pArr;
 32         ++(rhs.m_pArr->use);
 33         m_pArr = rhs.m_pArr;
 34     }
 35 
 36     ~CProList()
 37     {
 38         if (--(m_pArr->use) == 0)
 39             delete m_pArr;
 40     }
 41 
 42 public:
 43     size_t size() const
 44     {
 45         return m_pArr->size();
 46     }
 47 
 48     bool is_empty() const
 49     {
 50         return m_pArr->is_empty();
 51     }
 52 
 53     void clear()
 54     {
 55         m_pArr->clear();
 56     }
 57 
 58     void push_back(const TYPE& val)
 59     {
 60         m_pArr->push_back(val);
 61     }
 62 
 63     void pop_back()
 64     {
 65         m_pArr->pop_back();
 66     }
 67 
 68     const TYPE& front() const 
 69         //throw(out_of_range)
 70     {
 71         try
 72         {
 73             return m_pArr->front();
 74         }
 75         catch (const out_of_range&)
 76         {
 77             throw out_of_range("empty CProList.");
 78         }
 79         catch (...)
 80         {
 81             throw;
 82         }
 83     }
 84 
 85     TYPE& front() 
 86         //throw(out_of_range)
 87     {
 88         return const_cast<TYPE&>(const_cast<const CProList*>(this)->front());
 89     }
 90 
 91     const TYPE& back() const 
 92         //throw(out_of_range)
 93     {
 94         try
 95         {
 96             return m_pArr->back();
 97         }
 98         catch (const out_of_range&)
 99         {
100             throw out_of_range("empty CProList.");
101         }
102         catch (...)
103         {
104             throw;
105         }
106     }
107 
108     TYPE& back() 
109         //throw(out_of_range)
110     {
111         return const_cast<TYPE&>(const_cast<const CProList*>(this)->back());
112     }
113 
114     const TYPE& operator[](size_t index) const 
115         //throw(out_of_range)
116     {
117         if (is_empty())
118             throw out_of_range("empty CProList.");
119         try
120         {
121             return m_pArr->operator[](index);
122         }
123         catch (const out_of_range&)
124         {
125             throw out_of_range("invalid index of CProList.");
126         }
127         catch (...)
128         {
129             throw;
130         }
131     }
132 
133     TYPE& operator[](size_t index)
134         //throw(out_of_range)
135     {
136         return const_cast<TYPE&>(const_cast<const CProList*>(this)->operator[](index));
137     }
138 
139     const TYPE& at(size_t index) const 
140         //throw(out_of_range)
141     {
142         if (is_empty())
143             throw out_of_range("empty CProList.");
144         try
145         {
146             return m_pArr->at(index);
147         }
148         catch (const out_of_range&)
149         {
150             throw out_of_range("invalid index of CProList.");
151         }
152         catch (...)
153         {
154             throw;
155         }
156     }
157 
158     TYPE& at(size_t index) 
159         //throw(out_of_range)
160     {
161         return const_cast<TYPE&>(const_cast<const CProList*>(this)->at(index));
162     }
163 
164     void insert_at(size_t index, const TYPE& val) 
165         //throw(out_of_range, bad_alloc)
166     {
167         if (size() < index)
168             throw out_of_range("invalid index of CProList.");
169 
170         m_pArr->insert_at(index, val);
171     }
172 
173     void insert_at(size_t index, size_t cnt, const TYPE *pVal) 
174         //throw(out_of_range, bad_alloc)
175     {
176         if (size() < index)
177             throw out_of_range("invalid index of CProList.");
178 
179         m_pArr->insert_at(index, cnt, pVal);
180     }
181 
182     void remove_at(size_t index, size_t cnt = 1) 
183         //throw(out_of_range)
184     {
185         if (size() <= index)
186             throw out_of_range("invalid index of CProList.");
187         if (size() - index < cnt)
188             throw out_of_range("count to remove is out of range");
189 
190         m_pArr->remove_at(index, cnt);
191     }
192 
193     operator ProArray() const
194     {
195         return m_pArr->operator ProArray();
196     }
197 
198 private:
199     CProArray<TYPE, reallocationSize> *m_pArr;
200 };
201 
202 #endif

3、CProSolid.h

View Code
  1 #ifndef _C_PRO_SOLID_H_
  2 #define _C_PRO_SOLID_H_
  3 
  4 #include <ProToolkit.h>
  5 #include <ProSolid.h>
  6 #include <ProCsys.h>
  7 #include <ProSurface.h>
  8 #include <ProAxis.h>
  9 #include <ProPoint.h>
 10 #include <ProQuilt.h>
 11 #include <ProFeature.h>
 12 #include <profeattype.h>
 13 #include "CProList.h"
 14 #include <exception>
 15 
 16 ProError _VisitSolidAllCsyses_(ProCsys  p_csys,
 17                                ProAppData app_data);
 18 
 19 ProError _VisitSolidAllSurfs_(ProSurface p_surface,
 20                               ProAppData app_data);
 21 
 22 ProError _VisitSolidAllAxises_(ProAxis  p_axis,
 23                                ProAppData app_data);
 24 
 25 ProError _VisitSolidAllQuilts_(ProQuilt p_quilt,
 26                                ProAppData app_data);
 27 
 28 ProError _VisitSolidAllFeats_(ProFeature* p_feature,
 29                               ProAppData app_data);
 30 
 31 ProError _VisitFeatAllPoints_(ProGeomitem *p_handle,
 32                               ProAppData  app_data);
 33 
 34 ProError _VisitQuiltAllSurfaces_(ProSurface surface,
 35                                  ProAppData app_data);
 36 
 37 ProError _VisitSolidAllDatumPlaneFeats_(ProFeature* p_feature,
 38                                         ProAppData app_data);
 39 
 40 class CProSolid
 41 {
 42 public:
 43     explicit CProSolid(ProSolid sld) : m_sld(sld) {}
 44 
 45     //
 46     // 列出所有的坐标系
 47     // 
 48     CProList<ProCsys> ListCsyses()
 49     {
 50         ProError err;
 51         CProList<ProCsys> csysList;
 52         err = ProSolidCsysVisit(m_sld, NULL, _VisitSolidAllCsyses_, &csysList);
 53         if (err != PRO_TK_NO_ERROR 
 54             && err != PRO_TK_E_NOT_FOUND)
 55             throw exception("ListCsyses() failed.");
 56 
 57         return csysList;
 58     }
 59 
 60     //
 61     // 列出所有的soild surface
 62     //
 63     CProList<ProSurface> ListSurfaces()
 64     {
 65         ProError err;
 66         CProList<ProSurface> surfList;
 67         err = ProSolidSurfaceVisit(m_sld, NULL, _VisitSolidAllSurfs_, &surfList);
 68         if (err != PRO_TK_NO_ERROR
 69             && err != PRO_TK_E_NOT_FOUND)
 70             throw exception("ListSurfaces failed.");
 71 
 72         return surfList;
 73     }
 74 
 75     //
 76     // 列出所有的datum surface
 77     //
 78     CProList<ProSurface> ListDatumSurfaces()
 79     {
 80         ProError err;
 81         CProList<ProSurface> datumSurfList;
 82 
 83         // get all quilts
 84         CProList<ProQuilt> quiltList;
 85         err = ProSolidQuiltVisit(m_sld, NULL, _VisitSolidAllQuilts_, &quiltList);
 86         if (err != PRO_TK_NO_ERROR
 87             && err != PRO_TK_E_NOT_FOUND)
 88             throw exception("ListDatumSurfaces failed.");
 89 
 90         // get all datum surfaces in every quilt
 91         for (int i=0; i<quiltList.size(); ++i)
 92         {
 93             err = ProQuiltSurfaceVisit(quiltList[i], NULL, 
 94                 _VisitQuiltAllSurfaces_, &datumSurfList);
 95             if (err != PRO_TK_NO_ERROR
 96                 && err != PRO_TK_E_NOT_FOUND)
 97                 throw exception("ListDatumSurfaces failed.");
 98         }
 99 
100         return datumSurfList;
101     }
102 
103     //
104     // 列出所有的datum plane
105     //
106     CProList<ProSurface> ListDatumPlanes()
107     {
108         ProError err;
109         CProList<ProSurface> datumPlaneList;
110     
111         // get all feats which feat type is PRO_FEAT_DATUM
112         CProList<ProFeature> datumPlaneFeatList;
113         err = ProSolidFeatVisit(m_sld, NULL, _VisitSolidAllDatumPlaneFeats_, &datumPlaneFeatList);
114         if (err != PRO_TK_NO_ERROR
115             && err != PRO_TK_E_NOT_FOUND)
116             throw exception("ListDatumPlanes failed.");
117 
118         // get datum plane in every datum plane feat
119         // but exclude which is inactive
120         for (int i=0; i<datumPlaneFeatList.size(); ++i)
121         {
122             ProSurface datumPlane;
123             err = ProSurfaceInit(datumPlaneFeatList[i].owner, datumPlaneFeatList[i].id+1, 
124                 &datumPlane);
125             ProGeomitem surf_geom_item;
126             err = ProSurfaceToGeomitem(m_sld, datumPlane, &surf_geom_item);
127             ProBoolean bIsInActive;
128             err = ProGeomitemIsInactive(&surf_geom_item, &bIsInActive);
129 
130             if (bIsInActive == PRO_B_FALSE)
131                 datumPlaneList.push_back(datumPlane);
132         }
133 
134         return datumPlaneList;
135     }
136 
137     //
138     // 列出所有的轴
139     //
140     CProList<ProAxis> ListAxises()
141     {
142         ProError err;
143         CProList<ProAxis> axisList;
144         err = ProSolidAxisVisit(m_sld, NULL, _VisitSolidAllAxises_, &axisList);
145         if (err != PRO_TK_NO_ERROR
146             && err != PRO_TK_E_NOT_FOUND)
147             throw exception("ListAxises failed.");
148 
149         return axisList;
150     }
151 
152     //
153     // 列出所有的Datum Points
154     // Note: 不包含Inactive的Datum Point
155     //
156     CProList<ProPoint> ListPoints()
157     {
158         ProError err;
159         CProList<ProPoint> pntList;
160 
161         // get all feats
162         CProList<ProFeature> featList;
163         err = ProSolidFeatVisit(m_sld, NULL, _VisitSolidAllFeats_, &featList);
164         if (err != PRO_TK_NO_ERROR
165             && err != PRO_TK_E_NOT_FOUND)
166             throw exception("ListPoints failed.");
167 
168         // get all points in every feat but exclude which is inactive
169         for (int i=0; i<featList.size(); ++i)
170         {
171             CProList<ProGeomitem> pntGeomitemList;
172             err = ProFeatureGeomitemVisit(&featList[i], PRO_POINT, NULL, 
173                 _VisitFeatAllPoints_, &pntGeomitemList);
174             if (err != PRO_TK_NO_ERROR
175                 && err != PRO_TK_E_NOT_FOUND)
176                 throw exception("ListPoints failed.");
177             for (int i=0; i<pntGeomitemList.size(); ++i)
178             {
179                 ProBoolean bIsInActive;
180                 ProGeomitemIsInactive(&pntGeomitemList[i], &bIsInActive);
181                 if (bIsInActive == PRO_B_TRUE)
182                     break;
183                 ProPoint pnt;
184                 ProGeomitemToPoint(&pntGeomitemList[i], &pnt);
185                 pntList.push_back(pnt);
186             }
187         }
188         
189         return pntList;
190     }
191 
192     //
193     // 列出所有的面組
194     //
195     CProList<ProQuilt> ListQuilts()
196     {
197         ProError err;
198         CProList<ProQuilt> quiltList;
199         err = ProSolidQuiltVisit(m_sld, NULL, _VisitSolidAllQuilts_, &quiltList);
200         if (err != PRO_TK_NO_ERROR
201             && err != PRO_TK_E_NOT_FOUND)
202             throw exception("ListQuilts failed.");
203 
204         return quiltList;
205     }
206 
207     //
208     // 列出所有的特征
209     //
210     CProList<ProFeature> ListFeats()
211     {
212         ProError err;
213         CProList<ProFeature> featList;
214         err = ProSolidFeatVisit(m_sld, NULL, _VisitSolidAllFeats_, &featList);
215         if (err != PRO_TK_NO_ERROR
216             && err != PRO_TK_E_NOT_FOUND)
217             throw exception("ListFeats failed.");
218 
219         return featList;
220     }
221 
222 public:
223     ProSolid m_sld;
224 };
225 
226 #endif

4、CProSolid.cpp

View Code
 1 #include "CProSolid.h"
 2 
 3 ProError _VisitSolidAllCsyses_(ProCsys  p_csys,
 4                                ProAppData app_data)
 5 {
 6     CProList<ProCsys> *pCsysList = (CProList<ProCsys>*)app_data;
 7     pCsysList->push_back(p_csys);
 8 
 9     return PRO_TK_NO_ERROR;
10 }
11 
12 ProError _VisitSolidAllSurfs_(ProSurface p_surface,
13                               ProAppData app_data)
14 {
15     CProList<ProSurface> *pSurfList = (CProList<ProSurface>*)app_data;
16     pSurfList->push_back(p_surface);
17 
18     return PRO_TK_NO_ERROR;
19 }
20 
21 ProError _VisitSolidAllAxises_(ProAxis  p_axis,
22                                ProAppData app_data)
23 {
24     CProList<ProAxis> *pAxisList = (CProList<ProAxis>*)app_data;
25     pAxisList->push_back(p_axis);
26 
27     return PRO_TK_NO_ERROR;
28 }
29 
30 ProError _VisitSolidAllQuilts_(ProQuilt p_quilt,
31                                ProAppData app_data)
32 {
33     CProList<ProQuilt> *pQuiltList = (CProList<ProQuilt>*)app_data;
34     pQuiltList->push_back(p_quilt);
35 
36     return PRO_TK_NO_ERROR;
37 }
38 
39 ProError _VisitSolidAllFeats_(ProFeature* p_feature,
40                               ProAppData app_data)
41 {
42     CProList<ProFeature> *pFeatList = (CProList<ProFeature>*)app_data;
43     pFeatList->push_back(*p_feature);
44 
45     return PRO_TK_NO_ERROR;
46 }
47 
48 ProError _VisitFeatAllPoints_(ProGeomitem *p_handle,
49                               ProAppData  app_data)
50 {
51     CProList<ProGeomitem> *pPntGeomitemList = (CProList<ProGeomitem>*)app_data;
52     pPntGeomitemList->push_back(*p_handle);
53 
54     return PRO_TK_NO_ERROR;
55 }
56 
57 ProError _VisitQuiltAllSurfaces_(ProSurface p_surface,
58                                  ProAppData app_data)
59 {
60     CProList<ProSurface> *pDatumSurfaceList = (CProList<ProSurface>*)app_data;
61     pDatumSurfaceList->push_back(p_surface);
62 
63     return PRO_TK_NO_ERROR;
64 }
65 
66 ProError _VisitSolidAllDatumPlaneFeats_(ProFeature* p_feature,
67                                         ProAppData app_data)
68 {
69     CProList<ProFeature> *pDatumPlaneFeatList = (CProList<ProFeature>*)app_data;
70     ProError err;
71     ProFeattype feat_type;
72     err = ProFeatureTypeGet(p_feature, &feat_type);
73     if (feat_type == PRO_FEAT_DATUM)
74         pDatumPlaneFeatList->push_back(*p_feature);
75 
76     return PRO_TK_NO_ERROR;
77 }

 使用及代码说明:

1、使用时请包含以下头文件即可:

     #include "CProArray.h" 

  #include "CProList.h" 

  #include "CProSolid.h" 

2、之所以可以向WebLink那样使用,关键是CProList类的封装,该类有一个CProArray类的指针,并且CProArray类中包含一个引用计数,表明当前有多少个CProList对象引用了CProArray对象,这样,CProList对象的直接赋值实际上并没有重新分配数组对象,仅仅是增加了引用的数组CProArray的引用计数。

3、CProList对象会自动释放申请的数组内存,当引用计数变为0时。所以,使用者无需自己释放数组内存。

转载于:https://www.cnblogs.com/Hisin/archive/2012/07/29/2613698.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Floodlight 在 ChannelPipeline 图

我们知道&#xff0c;在Netty架构&#xff0c;一个ServerBootstrap用于生成server端的Channel的时候都须要提供一个ChannelPipelineFactory类型的參数&#xff0c;用于服务于建立连接的Channel&#xff0c;流水线处理来自某个client的请求。所以这里的 OpenflowPipelineFactory…

PS景观彩色平面图技巧

1、关于水系&#xff0c;园林学习网 PS景观彩色平面图 水要有阴影&#xff0c;不过是内投影。可以用图层特效来做&#xff0c;也可以用高斯模糊。 要有光感&#xff0c;可以用退晕&#xff0c;也可以用滤镜打光。 2、草地 草地在红线内外一定要区分开色象和明度饱和度&#xff…

牛顿如果穿越到现在,能看懂相对论和量子力学吗?

全世界只有3.14 % 的人关注了爆炸吧知识今天要讲给大家讲一个从朋友BOSS那里听来的故事&#xff0c;而故事的主人公就是赫赫有名的牛顿大神。话说那一天&#xff0c;BOSS在牛顿的苹果树下思考人生。突然牛顿就从苹果树下的棺材里爬了出来&#xff0c;棺材板怎么压都压不住。于是…

02Prism WPF 入门实战 - 建项

1.概要Prism介绍Github: https://github.com/PrismLibrary/Prism开发文档&#xff1a;https://prismlibrary.com/docs/Prism是一个框架&#xff0c;用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松散耦合、可维护和可测试的XAML应用程序。设计目标 为了实现下列目的&a…

html首页 slider图片切换效果,jQuery插件Slider Revolution实现响应动画滑动图片切换效果...

jQuery插件Slider Revolution实现响应动画滑动图片切换效果2018-12-31编程之家https://www.jb51.cc这是一款非常强大的内容切换插件&#xff0c;它基于jQuery&#xff0c;它充分响应&#xff0c;支持移动设备&#xff0c;支持手机触摸&#xff0c;键盘翻页&#xff1b;它内置幻…

大数据告诉你:学历真的能改变命运!!

全世界只有3.14 % 的人关注了爆炸吧知识央视新闻曾做过关于高考的调查&#xff0c;结果有七成网友支持高考取消数学&#xff0c;看到新闻后&#xff0c;有一位网友却一针见血地评论道&#xff1a;数学考试存在的意义就是把这七成网友筛选掉。的确&#xff0c;虽然买菜不需要专业…

小米8ios图标包下载_小米互传PC端抢先下载,免流量、高速互传,支持多设备共享...

小米早在MIUI初期就已经在开始探索手机与电脑之间互传文件的问题&#xff0c;MIUI"无线数据线"功能一直备受喜欢。手机与电脑之间互传&#xff0c;90%的用户都选择使用WX或者QQ来实现&#xff0c;它们互传的通道是互联网&#xff0c;无网时不可使用。为解决这个问题&…

HTML怎么做类似QQ聊天气泡,h5实现QQ聊天气泡的实例介绍

这篇文章主要介绍了HTML5实现QQ聊天气泡效果&#xff0c;用 HTML/CSS 做了个类似QQ的聊天气泡&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下今天自己用 HTML/CSS 做了个类似QQ的聊天气泡&#xff0c;以下是效果图&#xff1a;以下说下关键地方的样式…

高等数学的用处之一

1 只能说计算的真精准2 龙虾&#xff1a;我都准备半天了&#xff0c;你俩到底上不上&#xff1f;3 猫(≧^.^≦)&#xff1a;我为这个宿舍付出太多了&#xff01;4 请举一个日常生活中利用高等数学来解决问题的案例。5 男生做什么会让女生不开心7 人家拍的泸沽湖的水性杨花和我拍…

Fiddler抓包一键生成调用代码

首先我们的需求场景是用Fiddler抓到某个接口调用后&#xff0c;用代码来模拟调用&#xff0c;一般我们写代码会有3个步骤&#xff1a;1设置http请求相关的参数:header,method,url,cookie等2设置post的body(如果是post的话需要)3拿到返回的body(一般我们需要拿到接口的返回体进行…

DexClassLoader的使用

版权声明&#xff1a;您好&#xff0c;转载请留下本人博客的地址&#xff0c;谢谢 https://blog.csdn.net/hongbochen1223/article/details/47146613 在Java环境中,有个概念叫做”类装载器(Class Loader)”,其作用是动态加载Class文件.标准的Java SDK中有一个ClassLoader类,借助…

这才是老公的正确用法,不吃就往死里打......

1 倒是好办法就是有点儿费爸爸▼2 一只被主人遗弃的小熊的奇幻旅程▼3 小子&#xff0c;你单身的命运gu7在你把美女老师撂倒那一刻就注定了...▼4 张萌姐姐自我肯定式唱歌▼5 &#xff1f;&#xff1f;&#xff1f;有被冒犯到▼6 听说昨天有个少年28岁就退休了▼7 哪个男…

C# WPF MVVM模式下在主窗体显示子窗体并获取结果

01—前言在winform中打开一个新的子窗体很简单&#xff0c;直接实例化窗体并show一下就可以&#xff1a;Form2 f2 new Form2();f2.Show();或者Form2 f2 new Form2();f2.ShowDialog();但是&#xff0c;在wpf的mvvm模式下&#xff0c;这种方法是行不通的&#xff0c;因为逻辑是…

Exchange 2010发现拓扑失败

今天跟大家继续分享一个我在项目中遇到的问题哈&#xff0c;希望对大家今后的项目排错有帮助。问题背景&#xff1a;企业主域控从 Window Server 2003升级为Windows Server 2012 R2具体实施方法可以参考我之前的文章(http://horse87.blog.51cto.com/2633686/1613268)在顺利升级…

html引用单文件组件,vue之单文件组件 纯网页方式引入

上一节的vue组件开发是把组件内容统一放到了一个js文件里面里面写上模板字符串(引用组件) 这种方式还需要拼接转义 写法非常丑陋vue贴心的帮我们封装了单文件组件 可以不用再模板里面拼接字符串下面看下写法由于我们目前没有使用webpack和vue-cli等构建工具(为了快速学习vue的语…

足不出户,游遍七大洲,不可错过的14部地理纪录片!

见识是超越时间与空间的力量&#xff0c;使人身未行&#xff0c;而心已至之。今天的资源分享就从七大洲为切入点&#xff0c;为各位献上最值得观看的14部地理纪录片&#xff0c;与各位一起探索各大洲的独一无二的自然与人文景观&#xff0c;从这些丰富的影像中&#xff0c;不仅…

在Cocos2d中实现能够惯性拖动的选择界面

苹果的应用讲究用户体验 有的时候仔细想想 的确&#xff0c;很多细节决定了用户体验 比如说惯性拖动 可以说之前没有任何一家厂商能把触摸惯性拖动做的像苹果的UI那么流畅 Cocos2D中实现能够惯性拖动的选择界面 完成的效果&#xff1a; 制作一个简单的图层&#xff0c;通过传入…

SignalR在React/Go技术栈的实践

哼哧哼哧半年&#xff0c;优化改进了一个运维开发web平台。本文记录SignalR在react/golang 技术栈的生产小实践。01背景有个前后端分离的运维开发web平台&#xff0c; 后端会间隔5分钟同步一次数据&#xff0c;现在需要将最新一次同步的时间推送到web前端。说到[web服务端推送]…

16张扎心漫画,戳中女生私密日常,每一幕都很真实

全世界只有3.14 % 的人关注了爆炸吧知识比利时的插画师Planet Prudence&#xff0c;画了很多女生的真实日常&#xff0c;每一幕都很戳心&#xff0c;一起来看看吧。别人的痘痘一长就是一个&#xff0c;我一长就是一片。买买买的时候爽得要命&#xff0c;要穿的时候总觉得自己没…

Magicodes.IE 2.5.6.2发布

2.5.6.22021.10.13支持自定义列字体颜色&#xff0c;具体见PR#342&#xff0c;感谢xiangxiren修复日期格式化的问题&#xff0c;具体见PR#344&#xff0c;感谢ccccccmd2.5.6.12021.10.06修复 #337&#xff0c;bool?类型导出的映射问题2.5.6.02021.10.05合并Magicodes.EPPlus到…