csw 发表于 2002-5-27 16:26:00

[求助]arx中如何画到角和剖面线

wxj351 发表于 2002-5-27 22:44:00

如何画剖面线(见《机械CAD技术基础》)

图案填充是指以指定的图案去填充一个封闭的边界。因此为完成图案填充主要要完成选择填充边界、填充图案及填充方式。图案填充在机械CAD中主要是为了完成机械制图中的剖面符号。
在AutoCAD数据库中,图案填充使用AcDbHatch类的对象,通过调用其构造函数实现图案填充的创建。
l        其构造函数的格式为:
Acad::ErrorStatus AcDbHatch ();
由于其构造函数仅仅是为AcDbHatch 类的对象分配了内存空间,其填充边界、填充图案及填充方式必须使用该类的成员函数来设置。
图案填充程序设计的步骤:
1)        构造边界的对象组。
2)        调用AcDbHatch类的构造函数生成缺省的AcDbHatch类的对象。
3)        调用AcDbHatch类的成员函数作必要的设置。
4)        调用appendLoop()函数将对象组加入AcDbHatch类以构成边界。
5)        调用evaluateHatch()函数显示填充图案,否则图案不显示。
6)        要重新打开块表纪录后,再将AcDbHatch类的对象添加进图块表记录中。
    填充边界的设置有两个重要要求,第一完全封闭;第二首尾相连。首尾相连就是前一个曲线的终点和下一个曲线的起点完全重合,如果不能满足要求,则不能正确的进行图案填充。关于这项要求需要详细了解请参阅AutoCADR10版本之前的书藉。
例 9﷓5:图案填充
程序如下:
        AcDbBlockTable *pBlockTable;

    acdbHostApplicationServices()->workingDatabase()//查找并以只读模式
      ->getSymbolTable(pBlockTable, AcDb::kForRead);//打开图块表

    AcDbBlockTableRecord *pBlockTableRecord;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
      AcDb::kForWrite);//查找并以写模式打开图块表记录(模型空间)
    pBlockTable->close();//关闭图块表

    AcDbObjectId lineId1;
    AcDbObjectId lineId2;
    AcDbObjectId lineId3;

        AcGePoint3d Pt1( 3.0,4.0, 0.0);
    AcGePoint3d Pt2(110.0,70.0, 0.0);
    AcGePoint3d Pt3( 170.0, 20.0, 0.0);
        AcDbLine *pLine1 = new AcDbLine(Pt1, Pt2);//创建实体
        AcDbLine *pLine2 = new AcDbLine(Pt2, Pt3);//创建实体
        AcDbLine *pLine3 = new AcDbLine(Pt3, Pt1);//创建实体
        pBlockTableRecord->appendAcDbEntity(lineId1, pLine1);//添加实体返回ID
        pBlockTableRecord->appendAcDbEntity(lineId2, pLine2);//添加实体返回ID
        pBlockTableRecord->appendAcDbEntity(lineId3, pLine3);//添加实体返回ID
        AcDbObjectIdArray dbObjIds;
        AcDbObjectId Id;
        dbObjIds.append(lineId1);
        dbObjIds.append(lineId2);
        dbObjIds.append(lineId3);

    pBlockTableRecord->close();//关闭图块表记录

    pLine1->close();//关闭实体
    pLine2->close();//关闭实体
    pLine3->close();//关闭实体

        AcDbHatch* pHatch = new AcDbHatch();
        pHatch->setNormal(AcGeVector3d(0.0,0.0,1.0));
        pHatch->setElevation(0.0);
        pHatch->setAssociative(Adesk::kTrue);
        pHatch->setPatternScale(5);
        pHatch->setPattern(AcDbHatch::kPreDefined,"ANSI31");
        pHatch->setHatchStyle(AcDbHatch::kNormal);
        pHatch->appendLoop(AcDbHatch::kExternal,dbObjIds);
    pHatch->evaluateHatch();
        pHatch->setColorIndex(1);

    acdbHostApplicationServices()->workingDatabase()//查找并以只读模式
      ->getSymbolTable(pBlockTable, AcDb::kForRead);//打开图块表

    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
      AcDb::kForWrite);//查找并以写模式打开图块表记录(模型空间)

    pBlockTable->close();//关闭图块表

        pBlockTableRecord->appendAcDbEntity(Id, pHatch);//添加实体返回ID
    pBlockTableRecord->close();//关闭图块表记录
       
pHatch->close();//关闭实体
}

wxj351 发表于 2002-5-27 22:49:00

如何画到角

倒角需自己设计

csw 发表于 2002-5-30 10:36:00

[原创]

非常感谢

ship120 发表于 2009-2-18 16:04:00

非常感谢!
页: [1]
查看完整版本: [求助]arx中如何画到角和剖面线