找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: rave

[日积月累]:Arx函数集,网友自制

 火... [复制链接]
发表于 2004-10-12 13:40:34 | 显示全部楼层
多点vba的就好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-17 09:54:18 | 显示全部楼层
谢谢!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-17 10:21:41 | 显示全部楼层
谁知道ARX怎么对两个面进行判断求。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-27 21:51:16 | 显示全部楼层
多多学习,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-18 14:32:11 | 显示全部楼层
AcGePlane
CRegionGraph::getUcsPlane(AcDbDatabase* db)
{
        ASSERT(db != NULL);

    AcGeMatrix3d m;

        if (acdbUcsMatrix(m, db)) {
                AcGePoint3d origin;
                AcGeVector3d xDir, yDir, zDir;

                m.getCoordSystem(origin, xDir, yDir, zDir);
                AcGePlane ucsPlane(origin, xDir, yDir);
                return ucsPlane;
        }
        else {
                ASSERT(0);
        AcGePlane ucsPlane(AcGePoint3d::kOrigin, AcGeVector3d::kIdentity);
        return ucsPlane;
        }
}

//*****************************
AcGeVector3d
CRegionGraph::getUcsXAxis(AcDbDatabase* db)
{
        ASSERT(db != NULL);

    AcGeMatrix3d m;

        if (acdbUcsMatrix(m, db)) {
                AcGePoint3d origin;
                AcGeVector3d xDir, yDir, zDir;

                m.getCoordSystem(origin, xDir, yDir, zDir);
                return xDir;
        }
        else {
                ASSERT(0);
                return AcGeVector3d::kXAxis;
        }
}

/****************************************************************************
**
**        CRegionGraph::getUcsYAxis
**                returns current UCS Y Axis, even if currently the paperSpace viewport
**
**        **jma
*/
//*************************************/

AcGeVector3d
CRegionGraph::getUcsYAxis(AcDbDatabase* db)
{
        ASSERT(db != NULL);

    AcGeMatrix3d m;

        if (acdbUcsMatrix(m, db)) {
                AcGePoint3d origin;
                AcGeVector3d xDir, yDir, zDir;

                m.getCoordSystem(origin, xDir, yDir, zDir);
                return yDir;
        }
        else {
                ASSERT(0);
                return AcGeVector3d::kYAxis;
        }
}

/****************************************************************************
**
**        CRegionGraph::getUcsZAxis
**
**        **jma
**
*************************************/

AcGeVector3d
CRegionGraph::getUcsZAxis(AcDbDatabase* db)
{
        ASSERT(db != NULL);

    AcGeMatrix3d m;

        if (acdbUcsMatrix(m, db)) {
                AcGePoint3d origin;
                AcGeVector3d xDir, yDir, zDir;

                m.getCoordSystem(origin, xDir, yDir, zDir);
                return zDir;
        }
        else {
                ASSERT(0);
                return AcGeVector3d::kZAxis;
        }
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-19 17:16:13 | 显示全部楼层
//指定两点Pnt3d1,Pnt3d2,查询Pnt3d3是否在由前两点组成的线的左边,坐标被投影成二维
BOOL CCommonHanlder::QueryPntIsOnLineLeft(AcGePoint3d Pnt3d1,AcGePoint3d Pnt3d2,AcGePoint3d Pnt3d3)
{
        AcGePlane plane;
        AcGePoint2d Pnt1,Pnt2,Pnt3;
        Pnt1=Pnt3d1.convert2d(plane);
        Pnt2=Pnt3d2.convert2d(plane);
        Pnt3=Pnt3d3.convert2d(plane);
        AcGeVector2d vec1,vec2;
        AcGeLineSeg2d lin1,lin2;
        lin1.set(Pnt2,Pnt1);
        vec1=lin1.direction();
        lin2.set(Pnt1,Pnt3);
        vec2=lin2.direction();
        if(sin(vec1.angle()-vec2.angle())>0)
                return FALSE;
        else
                return TRUE;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-4 16:22:45 | 显示全部楼层
学习中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-11 08:47:51 | 显示全部楼层

发2个小程序,赚钱

AcDbObjectId copy(AcDbObjectId ID)
{
        AcDbEntity *pObj;
        acdbOpenAcDbEntity(pObj,ID,AcDb::kForRead);
        AcDbEntity* pClone=AcDbEntity::cast(pObj->clone());
        AcDbObjectId entityId=AddEntityToDbs(pClone);
        pClone->close();
        pObj->close();
        return entityId;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-22 10:41:50 | 显示全部楼层

Re: 我认为PointIsInPolygon函数有问题

最初由 lzxlzx 发布
[B]根据射线法求交点个数,偶数-区域外,奇数-区域内
但如果射线刚好通过顶点,产生偶数,却在区域内。 [/B]


改进版



  1.   [FONT=courier new]
  2. //0:出错
  3. //1:在线上;
  4. //2:在里面;
  5. //3在外面;
  6. //算法:1 先看点否在pPolyline上.是返回1.
  7. //     2 否则,过点testPt作一条射线,同时这条射线不能过pPolyline上的任何一点,
  8. //则,求该射线与pPolyline的交点个数.
  9. //奇数个:该点在位于内部.
  10. //偶数个:该点在位于外部.
  11. int  ptIsInsideClosePline( AcGePoint3d testPt,AcDbPolyline * pPolyline)
  12. {
  13.        
  14.         AcGePoint3d pointOnCurve;
  15.         pPolyline->getClosestPointTo(testPt,pointOnCurve);
  16.         if(testPt.isEqualTo(pointOnCurve))
  17.         {
  18.                 pPolyline->close();
  19.                 return 1;
  20.         }
  21.        
  22.         AcDbRay Xline;
  23.         Xline.setBasePoint(testPt);
  24.         Xline.setUnitDir(AcGeVector3d::kXAxis);
  25.        
  26.         //找一个方向,使RAY不与PL上的顶点相交
  27.         AcGeVector3dArray unitDirArr;
  28.         for(int i=0;(unsigned int)i < pPolyline->numVerts();i++)
  29.         {
  30.                 AcGePoint3d pt;
  31.                 pPolyline->getPointAt(i,pt);
  32.                 unitDirArr.append((pt-testPt).normal());
  33.         }
  34.         AcGeVector3d UnitDir=AcGeVector3d::kXAxis;
  35.         while (1)
  36.         {
  37.                 int foundAt;
  38.                 if(!unitDirArr.find(UnitDir,foundAt))
  39.                         break;
  40.                 UnitDir.rotateBy(PI*0.03,AcGeVector3d::kZAxis);
  41.         }
  42.         //求交点
  43.         AcGePoint3dArray points;
  44.         pPolyline->intersectWith(&Xline,AcDb::kOnBothOperands,points);
  45.         int nLen=points.length();
  46.         if(nLen%2==0)//偶数个
  47.         {
  48.                 pPolyline->close();
  49.                 return 3;
  50.         }
  51.         else //奇数个
  52.         {
  53.                 pPolyline->close();
  54.                 return 2;
  55.         }
  56.         return 0;       
  57. }

  58.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-14 19:03:26 | 显示全部楼层
对不起,我不懂ARX,能否像lisp一样运用呢?可以换成lisp文件吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-25 11:59:51 | 显示全部楼层
/////////////////////创建窗体图层"Window_Layer"/////////////////
AcDbObjectId
createWindowsLayer()
{
//打开层表,打开方式为只写///
AcDbLayerTable *pLayerTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pLayerTable,AcDb::kForWrite);
//初始化层表记录对象,并设定层表记录的名称“Window_Layer”

AcDbLayerTableRecord *pLayerTableRecord=new AcDbLayerTableRecord;
pLayerTableRecord->setName("Window_Layer");

        AcCmColor color;
        color.setColorIndex(1); // set color to red
        
pLayerTableRecord->setColor(color);
//层的其他属性(线型等)都用缺省值////

//将新建的层表记录添加到层表中,并将层表记录的ID保存到pLayerId作为函数的返回值////

AcDbObjectId pLayerId;
pLayerTable->add(pLayerId,pLayerTableRecord);
//关闭层表和层表记录对象///
pLayerTable->close();
pLayerTableRecord->close();

return pLayerId;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 194个

财富等级: 日进斗金

发表于 2005-3-15 19:57:15 | 显示全部楼层
好东东我下载了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-26 14:26:09 | 显示全部楼层

Re: Re: 我认为PointIsInPolygon函数有问题

最初由 amw3 发布
[B]

改进版


[CODE]
  
//0:出错... [/B]

该程序仍然存在死角: 射线与Polyline 相切情况!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-30 21:29:30 | 显示全部楼层
///*************在指定点插入指定块*******************\\\
void CTestPlate::OnBlockInsert()
{
        // TODO: Add your control notification handler code here
        acDocManager->lockDocument(curDoc());
        AcDbObjectId blockId;   //要插入的块的Id值
        AcDbBlockTable *pBlockTable;
        acdbHostApplicationServices()->workingDatabase()
                ->getSymbolTable(pBlockTable,AcDb::kForRead);
        Acad::eOk!=pBlockTable->getAt("ASDK-NO-ATTR",
                blockId,AcDb::kForRead)//根据块名获得要插入的块的ID值
        AcDbBlockReference *pBlkRef=new AcDbBlockReference;//插入块实质是插入块的引用
        pBlkRef->setBlockTableRecord(blockId);//指定所引用的图块表记录的对象ID
        resbuf to,from;
        from.restype=RTSHORT;//插入图块要进行用户坐标与世界坐标的转换
        from.resval.rint=1;//UCS
        to.restype=RTSHORT;
        to.resval.rint=0;//WCS
        AcGeVector3d normal(0.0,0.0,1.0);
        acedTrans(&(normal.x),&from,&to,Adesk::kTrue,&(normal.x));//转换函数
        AcGePoint3d basePoint(12,23,0);//指定的插入点(可以根据需要输入)
        //acedGetPoint(NULL,"\nEnter insertion point:",asDblArray(basePoint));
        pBlkRef->setPosition(basePoint);
        pBlkRef->setRotation(0.0);
        pBlkRef->setNormal(normal);
        AcDbBlockTableRecord *pBlockTableRecord;
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
        pBlockTable->close();
        AcDbObjectId newEntId;
        pBlockTableRecord->appendAcDbEntity(newEntId,pBlkRef);
        pBlockTableRecord->close();
        pBlkRef->close();
        acDocManager->lockDocument(curDoc());
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-9 16:19:43 | 显示全部楼层
努力学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-18 21:13 , Processed in 0.266572 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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