天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 13|回复: 0

自创实体类从AcDbCurve派生,实现一些类方法并动态绘制 _FTOOL(膜结构设计与绘图MSDD)

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式


功能:自创实体类从AcDbCurve派生,实现一些类方法并动态绘制 _FTOOL(膜结构设计与绘图MSDD)
FTOOL软件  由中国空间膜结构协会定制,
(膜结构设计与绘图MSDD)  Membrane structure design and drawing
需要联系作者:QQ 463017170


  1. MyCurve.cpp:

  2. #include "StdAfx.h"
  3. #include "MyCurve.h"
  4. #include "actrans.h"
  5. #include "aced.h"

  6. //-----------------------------------------------------------------------------
  7. Adesk::UInt32 CMyCurve::kCurrentVersionNumber =1 ;

  8. //-----------------------------------------------------------------------------
  9. ACRX_DXF_DEFINE_MEMBERS (
  10. CMyCurve, AcDbCurve,
  11. AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,
  12. AcDbProxyEntity::kNoOperation, MYCURVE,
  13. TESTCMYENTITY1APP
  14. |Product Desc: A description for your object
  15. |Company: Your company name
  16. |WEB Address: Your company WEB site address
  17. )

  18. //-----------------------------------------------------------------------------
  19. static double pi()
  20. {
  21. return atan(1.0)*4;
  22. }
  23. CMyCurve::CMyCurve () : AcDbCurve () {
  24. }

  25. CMyCurve::CMyCurve(const AcGePoint3d &ptC,const AcGePoint3d &ptE,int Layer/* =6 */,int num/* =25 */) : AcDbCurve () {
  26. ptCenter=ptC;
  27. ptEnd=ptE;
  28. layers=Layer;
  29. number=num;
  30. AcGePoint2d pt1,pt2;
  31. pt1.x=ptCenter.x;
  32. pt1.y=ptCenter.y;
  33. pt2.x=ptEnd.x;
  34. pt2.y=ptEnd.y;
  35. double radius=pt1.distanceTo(pt2);
  36. AcGePoint3dArray pts;
  37. AcGePoint3d pt;
  38. for (int i=0;i<number*layers;i++)
  39. {
  40. pt.x=ptCenter.x+radius*cos(2*i*pi()/number);
  41. pt.y=ptCenter.y+radius*sin(2*i*pi()/number);
  42. pt.z=ptCenter.z+i*((ptEnd.z-ptCenter.z)/layers)/number;
  43. pts.append(pt);
  44. }
  45. AcDb3dPolyline* p3dPline=new AcDb3dPolyline(k3dSimplePoly,pts);
  46. pCurve=(CMyCurve*)p3dPline;
  47. }

  48. CMyCurve::~CMyCurve () {
  49. delete pCurve;
  50. }

  51. //-----------------------------------------------------------------------------
  52. //----- AcDbObject protocols
  53. //- Dwg Filing protocol
  54. void CMyCurve::reset(const AcGePoint3d &ptLast)
  55. {
  56. pCurve=new CMyCurve(ptCenter,ptLast);
  57. }

  58. AcGePoint3d CMyCurve::getCenterPoint()
  59. {
  60. return ptCenter;
  61. }
  62. void CMyCurve::setCenterPoint(const AcGePoint3d &ptcen)
  63. {
  64. pCurve=new CMyCurve(ptcen,ptEnd);
  65. }

  66. void CMyCurve::setEndPoint(const AcGePoint3d &pten)
  67. {
  68. pCurve=new CMyCurve(ptCenter,pten);
  69. }
  70. Acad::ErrorStatus CMyCurve::dwgOutFields (AcDbDwgFiler *pFiler) const {
  71. assertReadEnabled () ;
  72. //----- Save parent class information first.
  73. Acad::ErrorStatus es =AcDbCurve::dwgOutFields (pFiler) ;
  74. if ( es != Acad::eOk )
  75. return (es) ;
  76. //----- Object version number needs to be saved first
  77. if ( (es =pFiler->writeUInt32 (CMyCurve::kCurrentVersionNumber)) != Acad::eOk )
  78. return (es) ;
  79. //----- Output params
  80. pFiler->writeItem(ptCenter);
  81. pFiler->writeItem(ptEnd);
  82. pFiler->writeItem(layers);
  83. pFiler->writeItem(number);

  84. return (pFiler->filerStatus ()) ;
  85. }

  86. Acad::ErrorStatus CMyCurve::dwgInFields (AcDbDwgFiler *pFiler) {
  87. assertWriteEnabled () ;
  88. //----- Read parent class information first.
  89. Acad::ErrorStatus es =AcDbCurve::dwgInFields (pFiler) ;
  90. if ( es != Acad::eOk )
  91. return (es) ;
  92. //----- Object version number needs to be read first
  93. Adesk::UInt32 version =0 ;
  94. if ( (es =pFiler->readUInt32 (&version)) != Acad::eOk )
  95. return (es) ;
  96. if ( version > CMyCurve::kCurrentVersionNumber )
  97. return (Acad::eMakeMeProxy) ;
  98. //- Uncomment the 2 following lines if your current object implementation cannot
  99. //- support previous version of that object.
  100. //if ( version < CMyCurve::kCurrentVersionNumber )
  101. // return (Acad::eMakeMeProxy) ;
  102. //----- Read params
  103. pFiler->readItem(&ptCenter);
  104. pFiler->readItem(&ptEnd);
  105. pFiler->readItem(&layers);
  106. pFiler->readItem(&number);

  107. return (pFiler->filerStatus ()) ;
  108. }

  109. //-----------------------------------------------------------------------------
  110. //----- AcDbEntity protocols
  111. Adesk::Boolean CMyCurve::subWorldDraw (AcGiWorldDraw *mode) {
  112. assertReadEnabled () ;
  113. acutPrintf(_T("\nsubworldDraw"));
  114. //------ Returning Adesk::kFalse here will force viewportDraw() call
  115. pCurve->subWorldDraw(mode);
  116. return (Adesk::kFalse) ;
  117. }

  118. void CMyCurve::subViewportDraw (AcGiViewportDraw *mode) {
  119. assertReadEnabled () ;
  120. AcDbCurve::subViewportDraw (mode) ;
  121. }

  122. Adesk::UInt32 CMyCurve::subViewportDrawLogicalFlags (AcGiViewportDraw *vd) {
  123. assertReadEnabled () ;
  124. return (AcDbCurve::subViewportDrawLogicalFlags (vd)) ;
  125. }

  126. Adesk::UInt32 CMyCurve::subSetAttributes (AcGiDrawableTraits *traits) {
  127. assertReadEnabled () ;
  128. return (AcDbCurve::subSetAttributes (traits)) ;
  129. }

  130. //- Osnap points protocol
  131. Acad::ErrorStatus CMyCurve::subGetOsnapPoints (
  132. AcDb::OsnapMode osnapMode,
  133. int gsSelectionMark,
  134. const AcGePoint3d &pickPoint,
  135. const AcGePoint3d &lastPoint,
  136. const AcGeMatrix3d &viewXform,
  137. AcGePoint3dArray &snapPoints,
  138. AcDbIntArray &geomIds) const
  139. {
  140. assertReadEnabled () ;
  141. return (AcDbCurve::subGetOsnapPoints (osnapMode, gsSelectionMark, pickPoint, lastPoint, viewXform, snapPoints, geomIds)) ;
  142. }

  143. Acad::ErrorStatus CMyCurve::subGetOsnapPoints (
  144. AcDb::OsnapMode osnapMode,
  145. int gsSelectionMark,
  146. const AcGePoint3d &pickPoint,
  147. const AcGePoint3d &lastPoint,
  148. const AcGeMatrix3d &viewXform,
  149. AcGePoint3dArray &snapPoints,
  150. AcDbIntArray &geomIds,
  151. const AcGeMatrix3d &insertionMat) const
  152. {
  153. assertReadEnabled () ;
  154. return (AcDbCurve::subGetOsnapPoints (osnapMode, gsSelectionMark, pickPoint, lastPoint, viewXform, snapPoints, geomIds, insertionMat)) ;
  155. }

  156. //- Grip points protocol
  157. Acad::ErrorStatus CMyCurve::subGetGripPoints (
  158. AcGePoint3dArray &gripPoints, AcDbIntArray &osnapModes, AcDbIntArray &geomIds
  159. ) const {
  160. assertReadEnabled () ;
  161. //----- This method is never called unless you return eNotImplemented
  162. //----- from the new getGripPoints() method below (which is the default implementation)

  163. return (AcDbCurve::subGetGripPoints (gripPoints, osnapModes, geomIds)) ;
  164. }

  165. Acad::ErrorStatus CMyCurve::subMoveGripPointsAt (const AcDbIntArray &indices, const AcGeVector3d &offset) {
  166. assertWriteEnabled () ;
  167. //----- This method is never called unless you return eNotImplemented
  168. //----- from the new moveGripPointsAt() method below (which is the default implementation)

  169. return (AcDbCurve::subMoveGripPointsAt (indices, offset)) ;
  170. }

  171. Acad::ErrorStatus CMyCurve::subGetGripPoints (
  172. AcDbGripDataPtrArray &grips, const double curViewUnitSize, const int gripSize,
  173. const AcGeVector3d &curViewDir, const int bitflags
  174. ) const {
  175. assertReadEnabled () ;

  176. //----- If you return eNotImplemented here, that will force AutoCAD to call
  177. //----- the older getGripPoints() implementation. The call below may return
  178. //----- eNotImplemented depending of your base class.
  179. return (AcDbCurve::subGetGripPoints (grips, curViewUnitSize, gripSize, curViewDir, bitflags)) ;
  180. }

  181. Acad::ErrorStatus CMyCurve::subMoveGripPointsAt (
  182. const AcDbVoidPtrArray &gripAppData, const AcGeVector3d &offset,
  183. const int bitflags
  184. ) {
  185. assertWriteEnabled () ;

  186. //----- If you return eNotImplemented here, that will force AutoCAD to call
  187. //----- the older getGripPoints() implementation. The call below may return
  188. //----- eNotImplemented depending of your base class.
  189. return (AcDbCurve::subMoveGripPointsAt (gripAppData, offset, bitflags)) ;
  190. }

  191. //-----------------------------------------------------------------------------
  192. //----- AcDbCurve protocols
  193. //- Curve property tests.
  194. Adesk::Boolean CMyCurve::isClosed () const {
  195. assertReadEnabled () ;
  196. return (AcDbCurve::isClosed ()) ;
  197. }

  198. Adesk::Boolean CMyCurve::isPeriodic () const {
  199. assertReadEnabled () ;
  200. return (AcDbCurve::isPeriodic ()) ;
  201. }

  202. //- Get planar and start/end geometric properties.
  203. Acad::ErrorStatus CMyCurve::getStartParam (double &param) const {
  204. assertReadEnabled () ;
  205. return (AcDbCurve::getStartParam (param)) ;
  206. }

  207. Acad::ErrorStatus CMyCurve::getEndParam (double &param) const {
  208. assertReadEnabled () ;
  209. return (AcDbCurve::getEndParam (param)) ;
  210. }

  211. Acad::ErrorStatus CMyCurve::getStartPoint (AcGePoint3d &point) const {
  212. assertReadEnabled () ;
  213. return (AcDbCurve::getStartPoint (point)) ;
  214. }

  215. Acad::ErrorStatus CMyCurve::getEndPoint (AcGePoint3d &point) const {
  216. assertReadEnabled () ;
  217. return (AcDbCurve::getEndPoint (point)) ;
  218. }

  219. //- Conversions to/from parametric/world/distance.
  220. Acad::ErrorStatus CMyCurve::getPointAtParam (double param, AcGePoint3d &point) const {
  221. assertReadEnabled () ;
  222. return (AcDbCurve::getPointAtParam (param, point)) ;
  223. }

  224. Acad::ErrorStatus CMyCurve::getParamAtPoint (const AcGePoint3d &point, double &param) const {
  225. assertReadEnabled () ;
  226. return (AcDbCurve::getParamAtPoint (point, param)) ;
  227. }

  228. Acad::ErrorStatus CMyCurve::getDistAtParam (double param, double &dist) const {
  229. assertReadEnabled () ;
  230. return (AcDbCurve::getDistAtParam (param, dist)) ;
  231. }

  232. Acad::ErrorStatus CMyCurve::getParamAtDist (double dist, double &param) const {
  233. assertReadEnabled () ;
  234. return (AcDbCurve::getParamAtDist (dist, param)) ;
  235. }

  236. Acad::ErrorStatus CMyCurve::getDistAtPoint (const AcGePoint3d &point , double &dist) const {
  237. assertReadEnabled () ;
  238. return (AcDbCurve::getDistAtPoint (point, dist)) ;
  239. }

  240. Acad::ErrorStatus CMyCurve::getPointAtDist (double dist, AcGePoint3d &point) const {
  241. assertReadEnabled () ;
  242. return (AcDbCurve::getPointAtDist (dist, point)) ;
  243. }

  244. //- Derivative information.
  245. Acad::ErrorStatus CMyCurve::getFirstDeriv (double param, AcGeVector3d &firstDeriv) const {
  246. assertReadEnabled () ;
  247. return (AcDbCurve::getFirstDeriv (param, firstDeriv)) ;
  248. }

  249. Acad::ErrorStatus CMyCurve::getFirstDeriv (const AcGePoint3d &point, AcGeVector3d &firstDeriv) const {
  250. assertReadEnabled () ;
  251. return (AcDbCurve::getFirstDeriv (point, firstDeriv)) ;
  252. }

  253. Acad::ErrorStatus CMyCurve::getSecondDeriv (double param, AcGeVector3d &secDeriv) const {
  254. assertReadEnabled () ;
  255. return (AcDbCurve::getSecondDeriv (param, secDeriv)) ;
  256. }

  257. Acad::ErrorStatus CMyCurve::getSecondDeriv (const AcGePoint3d &point, AcGeVector3d &secDeriv) const {
  258. assertReadEnabled () ;
  259. return (AcDbCurve::getSecondDeriv (point, secDeriv)) ;
  260. }

  261. //- Closest point on curve.
  262. Acad::ErrorStatus CMyCurve::getClosestPointTo (const AcGePoint3d &givenPnt, AcGePoint3d &pointOnCurve, Adesk::Boolean extend /*=Adesk::kFalse*/) const {
  263. assertReadEnabled () ;
  264. return (AcDbCurve::getClosestPointTo (givenPnt, pointOnCurve, extend)) ;
  265. }

  266. Acad::ErrorStatus CMyCurve::getClosestPointTo (const AcGePoint3d &givenPnt, const AcGeVector3d &direction, AcGePoint3d &pointOnCurve, Adesk::Boolean extend /*=Adesk::kFalse*/) const {
  267. assertReadEnabled () ;
  268. return (AcDbCurve::getClosestPointTo (givenPnt, direction, pointOnCurve, extend)) ;
  269. }

  270. //- Get a projected copy of the curve.
  271. Acad::ErrorStatus CMyCurve::getOrthoProjectedCurve (const AcGePlane &plane, AcDbCurve *&projCrv) const {
  272. assertReadEnabled () ;
  273. return (AcDbCurve::getOrthoProjectedCurve (plane, projCrv)) ;
  274. }

  275. Acad::ErrorStatus CMyCurve::getProjectedCurve (const AcGePlane &plane, const AcGeVector3d &projDir, AcDbCurve *&projCrv) const {
  276. assertReadEnabled () ;
  277. return (AcDbCurve::getProjectedCurve (plane, projDir, projCrv)) ;
  278. }

  279. //- Get offset, spline and split copies of the curve.
  280. Acad::ErrorStatus CMyCurve::getOffsetCurves (double offsetDist, AcDbVoidPtrArray &offsetCurves) const {
  281. assertReadEnabled () ;
  282. return (AcDbCurve::getOffsetCurves (offsetDist, offsetCurves)) ;
  283. }

  284. Acad::ErrorStatus CMyCurve::getOffsetCurvesGivenPlaneNormal (const AcGeVector3d &normal, double offsetDist, AcDbVoidPtrArray &offsetCurves) const {
  285. assertReadEnabled () ;
  286. return (AcDbCurve::getOffsetCurvesGivenPlaneNormal (normal, offsetDist, offsetCurves)) ;
  287. }

  288. Acad::ErrorStatus CMyCurve::getSpline (AcDbSpline *&spline) const {
  289. assertReadEnabled () ;
  290. return (AcDbCurve::getSpline (spline)) ;
  291. }

  292. Acad::ErrorStatus CMyCurve::getSplitCurves (const AcGeDoubleArray &params, AcDbVoidPtrArray &curveSegments) const {
  293. assertReadEnabled () ;
  294. return (AcDbCurve::getSplitCurves (params, curveSegments)) ;
  295. }

  296. Acad::ErrorStatus CMyCurve::getSplitCurves (const AcGePoint3dArray &points, AcDbVoidPtrArray &curveSegments) const {
  297. assertReadEnabled () ;
  298. return (AcDbCurve::getSplitCurves (points, curveSegments)) ;
  299. }

  300. //- Extend the curve.
  301. Acad::ErrorStatus CMyCurve::extend (double newParam) {
  302. assertReadEnabled () ;
  303. return (AcDbCurve::extend (newParam)) ;
  304. }

  305. Acad::ErrorStatus CMyCurve::extend (Adesk::Boolean extendStart, const AcGePoint3d &toPoint) {
  306. assertReadEnabled () ;
  307. return (AcDbCurve::extend (extendStart, toPoint)) ;
  308. }

  309. //- Area calculation.
  310. Acad::ErrorStatus CMyCurve::getArea (double &area) const {
  311. assertReadEnabled () ;
  312. return (AcDbCurve::getArea (area)) ;
  313. }

  314. MyJig.cpp:

  315. #include "StdAfx.h"
  316. #include "MyJig.h"
  317. #include <math.h>
  318. #include "..\..\cmyentity1\cmyentity1\entity.h"

  319. //-----------------------------------------------------------------------------
  320. CMyJig::CMyJig () : AcEdJig ()
  321. {
  322. m_pEnt=NULL;
  323. }

  324. CMyJig::~CMyJig () {
  325. }

  326. //-----------------------------------------------------------------------------
  327. static AcDbObjectId AddToModelSpace(AcDbEntity *pEnt)
  328. {
  329. AcDbBlockTable *pBlockTable;
  330. acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);
  331. AcDbBlockTableRecord *pBlockTableRecord;

  332. pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite);
  333. AcDbObjectId entId;
  334. pBlockTableRecord->appendAcDbEntity(entId, pEnt);
  335. pEnt->close();
  336. pBlockTable->close();
  337. pBlockTableRecord->close();
  338. return entId;
  339. }
  340. static AcDbObjectId AddToCurrentSpace(AcDbEntity *pEnt)
  341. {
  342. AcDbBlockTable *pBlockTable;
  343. AcDbDatabase *pDb=acdbHostApplicationServices()->workingDatabase();
  344. pDb->getBlockTable(pBlockTable, AcDb::kForRead);
  345. AcDbObjectId currentSpaceId=pDb->currentSpaceId();
  346. AcDbBlockTableRecord *pBlockTableRecord;
  347. if (acdbOpenObject(pBlockTableRecord,currentSpaceId,AcDb::kForWrite)!=Acad::eOk)
  348. {
  349. return AcDbObjectId::kNull;
  350. }
  351. AcDbObjectId entId;
  352. pBlockTableRecord->appendAcDbEntity(entId, pEnt);
  353. pBlockTable->close();
  354. pBlockTableRecord->close();
  355. return entId;
  356. }

  357. static double pi()
  358. {
  359. return atan(1.0)*4;
  360. }
  361. bool CMyJig::doIt(const AcGePoint3d &ptCenter)
  362. {
  363. m_ptCenter=ptCenter;
  364. m_pEnt=new CMyCurve(m_ptCenter,m_ptCenter,6,25);
  365. setDispPrompt(_T("指定下一点:"));
  366. AcEdJig::DragStatus stat=drag();

  367. if (stat==kNormal)
  368. {
  369. AddToModelSpace(m_pEnt);
  370. m_pEnt->close();
  371. return true;
  372. }
  373. else
  374. {
  375. delete m_pEnt;
  376. return false;
  377. }
  378. }

  379. AcEdJig::DragStatus CMyJig::sampler () {
  380. setUserInputControls((UserInputControls)(AcEdJig::kAccept3dCoordinates|AcEdJig::kNoNegativeResponseAccepted|AcEdJig::kNullResponseAccepted));
  381. static AcGePoint3d pt;
  382. DragStatus stat=acquirePoint(m_ptCur);
  383. if (pt!=m_ptCur)
  384. {
  385. pt=m_ptCur;
  386. }
  387. else if (stat==AcEdJig::kNormal)
  388. {
  389. return AcEdJig::kNoChange;
  390. }
  391. return stat;
  392. }

  393. //-----------------------------------------------------------------------------
  394. //- Jigged entity update
  395. Adesk::Boolean CMyJig::update () {
  396. // AcGeVector2d ver(m_ptCur.x-m_ptCenter.x,m_ptCur.y-m_ptCenter.y);
  397. // for (int i=1;i<4;i++)
  398. // {
  399. // AcGePoint3d pt;
  400. // ver.rotateBy(2*pi()/3);
  401. // pt.x=m_ptCenter.x+ver.x;
  402. // pt.y=m_ptCenter.y+ver.y;
  403. // pt.z=m_ptCenter.z;
  404. // m_pEnt->setVertexAt(i-1,pt);
  405. // }
  406. m_pEnt->reset(m_ptCur);
  407. return Adesk::kTrue;
  408. }

  409. //-----------------------------------------------------------------------------
  410. //- Jigged entity pointer return
  411. AcDbEntity *CMyJig::entity () const {
  412. return m_pEnt;
  413. }



  414. acrxEntryPoint.cpp:

  415. #include "StdAfx.h"
  416. #include "resource.h"
  417. #include "..\CMyEntity1\Entity.h"
  418. #include "acgi.h"
  419. #include "myjig.h"
  420. #include "..\..\cmyentity1\cmyentity1\mycurve.h"


  421. //-----------------------------------------------------------------------------
  422. #define szRDS _RXST("zff")

  423. //-----------------------------------------------------------------------------
  424. //----- ObjectARX EntryPoint
  425. class CObjectARXApp : public AcRxArxApp {

  426. public:
  427. CObjectARXApp () : AcRxArxApp () {}

  428. virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
  429. // TODO: Load dependencies here

  430. // You *must* call On_kInitAppMsg here
  431. AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;

  432. // TODO: Add your initialization code here

  433. return (retCode) ;
  434. }

  435. virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
  436. // TODO: Add your code here

  437. // You *must* call On_kUnloadAppMsg here
  438. AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;

  439. // TODO: Unload dependencies here

  440. return (retCode) ;
  441. }

  442. virtual void RegisterServerComponents () {
  443. }
  444. static double pi()
  445. {
  446. return atan(1.0)*4;
  447. }
  448. static AcDbObjectId AddToModelSpace(AcDbEntity *pEnt)
  449. {
  450. AcDbBlockTable *pBlockTable;
  451. acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);
  452. AcDbBlockTableRecord *pBlockTableRecord;

  453. pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite);
  454. AcDbObjectId entId;
  455. pBlockTableRecord->appendAcDbEntity(entId, pEnt);
  456. pBlockTable->close();
  457. pBlockTableRecord->close();
  458. return entId;
  459. }
  460. static AcDbObjectId AddToCurrentSpace(AcDbEntity *pEnt)
  461. {
  462. AcDbBlockTable *pBlockTable;
  463. AcDbDatabase *pDb=acdbHostApplicationServices()->workingDatabase();
  464. pDb->getBlockTable(pBlockTable, AcDb::kForRead);
  465. AcDbObjectId currentSpaceId=pDb->currentSpaceId();
  466. AcDbBlockTableRecord *pBlockTableRecord;
  467. if (acdbOpenObject(pBlockTableRecord,currentSpaceId,AcDb::kForWrite)!=Acad::eOk)
  468. {
  469. return AcDbObjectId::kNull;
  470. }
  471. AcDbObjectId entId;
  472. pBlockTableRecord->appendAcDbEntity(entId, pEnt);
  473. pBlockTable->close();
  474. pBlockTableRecord->close();
  475. return entId;
  476. }

  477. static void zffObjectARX_MyCommand1(void)
  478. {
  479. ads_point pt;
  480. acedGetPoint(NULL,_T("指定中心点:"),pt);
  481. CMyJig jig;
  482. jig.doIt(asPnt3d(pt));
  483. }
  484. } ;

  485. //-----------------------------------------------------------------------------
  486. IMPLEMENT_ARX_ENTRYPOINT(CObjectARXApp)

  487. ACED_ARXCOMMAND_ENTRY_AUTO(CObjectARXApp, zffObjectARX, _MyCommand1, MyCommand1, ACRX_CMD_TRANSPARENT, NULL)
复制代码

 

 

 

 

自创实体类从AcDbCurve派生,实现一些类方法并动态绘制 _FTOOL(膜结构设计与绘图MSDD)

该用户从未签到

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-7-28 09:28:43 | 显示全部楼层
  法拉利膜材作为一种高性能的建筑材料,在建筑、汽车及广告等多个领域有着广泛的应用。以下是对法拉利膜材型号、特点及优点的详细分析:
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223041uiqmeujen4jjj6zv.jpg[/img]
[b]一、法拉利膜材型号[/b]
法拉利膜材有多种型号,包括但不限于以下几种:1302 S2 Flexlight Advanced:这是一种高性能IV型柔性复合膜材,以其卓越的透光性、耐久性和易维护性而受到青睐。942、1202 S2、1002 S2、902 S2、1212 S2、912 S2:这些型号同样属于法拉利膜材系列,各自具有不同的特性和适用范围,但具体特点需根据具体型号进一步分析。需要注意的是,法拉利膜材的型号可能随着产品更新换代而有所变化,具体型号及其特性请参考最新产品资料。
[img=860,1255]http://www.mjgou.com/data/attachment/forum/202403/13/223254bbblwlbvbvsbwlsl.jpg[/img]
[b]二、法拉利膜材特点[/b]
法拉利膜材的特点主要体现在以下几个方面:
1、高强度与耐用性:法拉利膜材采用高强度材料制成,具有良好的抗拉强度和撕裂强度,能够承受较大的外力作用而不易破损。耐用性强,能够在恶劣气候条件下保持稳定的性能,延长使用寿命。
2、透光性与美观性:部分型号如1302 S2 Flexlight Advanced具有高透光性,能够在保持室内光线充足的同时,提供清晰的视野。膜材表面平整光滑,色彩丰富多样,能够满足不同建筑和装饰需求,提升整体美观性。
3、轻质与灵活性:法拉利膜材重量较轻,便于运输和安装,能够降低施工成本和时间。膜材具有一定的柔韧性,能够适应各种复杂形状和结构的设计要求。
4、环保与可回收性:法拉利膜材符合环保要求,部分材料可回收利用,减少了对环境的影响。
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223128owhn0099rrds5h5y.jpg[/img]
[b]三、法拉利膜材优点[/b]
法拉利膜材的优点主要体现在以下几个方面:
1、提升建筑性能:高强度与耐用性使得法拉利膜材能够提升建筑的稳定性和安全性,延长使用寿命。透光性与美观性使得建筑内部光线充足、视野开阔,同时提升整体美观度。
2、降低施工成本:轻质特性使得运输和安装成本降低,施工效率提高。膜材的柔韧性使得施工更加灵活多变,能够适应各种复杂地形和结构要求。
3、节能环保:部分材料可回收利用,符合环保要求,减少了对环境的影响。良好的透光性能够减少室内照明需求,降低能耗。
4、广泛应用领域:
法拉利膜材不仅适用于建筑领域(如体育设施、商业设施、文化设施、交通设施等),还广泛应用于汽车及广告领域(如高档车辆贴膜保护和装饰、广告招贴等),展现出其多功能的特性。

综上所述,法拉利膜材以其高强度、耐用性、透光性、美观性、轻质灵活性以及环保可回收性等优点,在建筑、汽车及广告等多个领域发挥着重要作用。具体型号的选择应根据实际需求和应用场景进行综合考虑。
[url=http://www.mjgou.com/forum-17-1.html][size=89164][color=Red]法拉利膜材中国代理商 - 膜结构网[/color][/size][/url]
自创实体类从AcDbCurve派生,实现一些类方法并动态绘制 _FTOOL(膜结构设计与绘图MSDD)

该用户从未签到

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-8-6 10:42:43 | 显示全部楼层
耐弛膜材,具有高性能、耐候性、耐久性等特性的膜材品牌或产品系列。以下是对这类膜材的详细介绍:
[b]一、品牌与类型[/b]
品牌:虽然直接以“耐弛”命名的品牌信息不明确,但我们可以将其视为一种高性能膜材的代表。
类型:耐弛膜材可能包括PVC膜材、PVDF膜材以及PTFE膜材等多种类型,这些材料在膜结构建筑、污水处理、空气净化等领域有广泛应用。
[b]二、产品特点[/b]
耐候性:耐弛膜材通常具有优异的耐候性,能够抵抗紫外线、高温、低温等极端天气条件的侵蚀,保持长久的色彩鲜艳和材料性能。
耐久性:材料强度高,抗拉、撕裂性能优异,能够承受各种外力的作用,延长使用寿命。
自洁性:部分耐弛膜材表面经过特殊处理,具有自洁功能,能够减少灰尘和污染物的附着,降低清洁成本。
化学稳定性:耐化学腐蚀性强,能够抵抗多种化学物质的侵蚀,保持材料的稳定性和功能性。
环保性:部分耐弛膜材为可回收材料,符合环保要求,有助于减少建筑垃圾和环境污染。
[b]三、应用领域[/b]
耐弛膜材广泛应用于多个领域,包括但不限于:
建筑领域:作为膜结构建筑的主要材料,用于体育场馆、展览馆、商业设施等建筑的屋顶和墙面覆盖。
污水处理:在污水处理厂中作为污水膜材使用,能够有效去除水中的悬浮物、有机物等污染物。
空气净化:在空气净化设备和系统中作为滤材使用,具有高效的过滤性能和耐化学性。
其他领域:如交通设施(如高速公路隔音屏)、工业设施(如化工厂、制药厂的防腐蚀覆盖材料)等。
[b]四、品牌合作与研发[/b]
耐弛膜材的生产商通常与国内外知名科研院校、膜结构公司等建立紧密的合作关系,进行技术交流、合作及成果交换。通过引进先进的生产设备和技术,不断提升产品的质量和性能。同时,生产商还注重产品的研发和创新,不断推出适应市场需求的新产品。
[b]五、总结[/b]
耐弛膜材作为一类高性能膜材的代表,以其优异的耐候性、耐久性、自洁性和化学稳定性等特点在多个领域得到广泛应用。随着技术的不断进步和市场的不断发展,耐弛膜材的产品种类和应用领域还将不断拓展和完善。然而,需要注意的是,由于“耐弛”并非一个明确的品牌名称,因此在实际应用中需要根据具体的产品信息和品牌标识进行选择。

 

 

 

 

自创实体类从AcDbCurve派生,实现一些类方法并动态绘制 _FTOOL(膜结构设计与绘图MSDD)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-10-22 20:39 , Processed in 0.189238 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表