cad墙线打断lisp_掌握高效的CAD命令,有事半功倍的效果

0ef242e11fdcace6295c12da83b3cda9.png

本次学习预计耗时5分钟 每天积累一点

下面我们来看这几个最实用的命令。

说明:以下命令快捷键默认为首字母或者头两个字母。

第一类,绘图类。

常用的命令有:

Line 直线

xline 构造线(用来画辅助线)

mline 双线(在画墙线时常用到,也可自己定义使用其它线型)

pline 多义线(大部分由线段组成的图元,能够定义为多义线的就定义为多义线,这样在选择时比较方便)

rectang 矩形(实际上就是四段围合的多义线)

arc 圆弧

circle 圆

hatch 填充(要注意图案的比例)

boundary 边界(在计算面积、填充等情况会用到)

block 定义块(需将准备用于定义块的所有图元放到0层,其它所有属性均改为bylayer)

insert 插入快(与-insert相比较,一个会调出对话框,一个不会)

第二类,编辑类。

常用的命令有:

Matchprop 特性匹配(格式刷)

Hatchedit 填充图案编辑(鼠标左键双击填充的图案即可)

Pedit 多义线编辑(也可用于将几段首尾相接的线段连接成多义线)

Erase 擦除

Copy 拷贝

Mirror 镜像

Offset 平移

Array 阵列

Move 移动

Rotate 旋转

Scale 缩放

Stretch 拉伸

Trim 裁减

Extend 延伸

Break 打断

Fillet 倒圆角

Explode 打碎(可用于打碎块、多义线、双线等)

Align 对齐(一个非常好用的命令,具体方法点击→)

Properties 属性(同14版时的ddmodify,可调出属性表,在其中可查看和修改该图元的几乎所有属性,很有用)

一些使用中的说明:

  • 我们在绘制中,一般来说,能用编辑命令完成的,就不要用绘图命令完成。在CAD软件的使用过程中,虽然一直说是画图,但实际上大部分都是在编辑图。因为编辑图元可以大量减少绘制图元不准确的几率,并且可以在一定程度上提高效率。
  • 在使用绘图命令时,一定要设置捕捉(捕捉的设置,以后再讲),F3切换。
  • 在使用绘图和编辑命令时,大部分情况下,都要采用正交模式,F8切换。
  • 以上我罗列出来的绘图和编辑命令,真的是属于最常用最有用的命令,其它没有列出的绘图和编辑命令,也应该了解,在适当的时候使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
墙线融合消隐算法是一种三维图形学算法,用于解决多个体重叠时,如何正确显示的问题。下面是一个简单的C++实现: ``` #include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; struct Point3D { double x, y, z; Point3D(double _x, double _y, double _z): x(_x), y(_y), z(_z) {} }; struct Wall { Point3D p1, p2, p3, p4; Wall(Point3D _p1, Point3D _p2, Point3D _p3, Point3D _p4): p1(_p1), p2(_p2), p3(_p3), p4(_p4) {} }; struct Edge { Point3D p1, p2; Edge(Point3D _p1, Point3D _p2): p1(_p1), p2(_p2) {} }; bool cmp(const Edge& e1, const Edge& e2) { return e1.p1.z < e2.p1.z; } double getZ(const Point3D& p1, const Point3D& p2, double x, double y) { double a = (p2.z - p1.z) / (p2.x - p1.x); double b = p1.z - a * p1.x; return a * x + b + y; } void clip(vector<Edge>& edges, double znear, double zfar) { vector<Edge> newEdges; for (auto edge : edges) { bool inside1 = edge.p1.z >= znear && edge.p1.z <= zfar; bool inside2 = edge.p2.z >= znear && edge.p2.z <= zfar; if (inside1 && inside2) { newEdges.push_back(edge); } else if (!inside1 && inside2) { double x = edge.p1.x + (znear - edge.p1.z) * (edge.p2.x - edge.p1.x) / (edge.p2.z - edge.p1.z); double y = edge.p1.y + (znear - edge.p1.z) * (edge.p2.y - edge.p1.y) / (edge.p2.z - edge.p1.z); newEdges.push_back(Edge(edge.p1, Point3D(x, y, znear))); newEdges.push_back(Edge(Point3D(x, y, znear), edge.p2)); } else if (inside1 && !inside2) { double x = edge.p1.x + (zfar - edge.p1.z) * (edge.p2.x - edge.p1.x) / (edge.p2.z - edge.p1.z); double y = edge.p1.y + (zfar - edge.p1.z) * (edge.p2.y - edge.p1.y) / (edge.p2.z - edge.p1.z); newEdges.push_back(Edge(edge.p1, Point3D(x, y, zfar))); newEdges.push_back(Edge(Point3D(x, y, zfar), edge.p2)); } } edges = newEdges; } void draw(vector<Edge>& edges, double znear, double zfar) { clip(edges, znear, zfar); sort(edges.begin(), edges.end(), cmp); vector<double> scanline; for (double z = znear; z <= zfar; z += 0.1) { scanline.clear(); for (auto edge : edges) { if (edge.p1.z <= z && edge.p2.z >= z) { double x = edge.p1.x + (z - edge.p1.z) * (edge.p2.x - edge.p1.x) / (edge.p2.z - edge.p1.z); double y = edge.p1.y + (z - edge.p1.z) * (edge.p2.y - edge.p1.y) / (edge.p2.z - edge.p1.z); scanline.push_back(x); } } sort(scanline.begin(), scanline.end()); for (int i = 0; i < scanline.size(); i += 2) { int x1 = ceil(scanline[i]); int x2 = floor(scanline[i+1]); cout << "Draw line from (" << x1 << "," << z << ") to (" << x2 << "," << z << ")" << endl; } } } int main() { Point3D p1(0, 0, 0); Point3D p2(0, 10, 0); Point3D p3(10, 10, 0); Point3D p4(10, 0, 0); Wall w1(p1, p2, p3, p4); Point3D p5(2, 2, 5); Point3D p6(2, 8, 5); Point3D p7(8, 8, 5); Point3D p8(8, 2, 5); Wall w2(p5, p6, p7, p8); vector<Wall> walls = {w1, w2}; vector<Edge> edges; for (auto wall : walls) { edges.push_back(Edge(wall.p1, wall.p2)); edges.push_back(Edge(wall.p2, wall.p3)); edges.push_back(Edge(wall.p3, wall.p4)); edges.push_back(Edge(wall.p4, wall.p1)); } draw(edges, 1, 10); return 0; } ``` 这个例子中,我们有两个体,一个在z=0处,一个在z=5处。我们将它们转化为边的列表,然后用墙线融合消隐算法画出它们的投影。在这个例子中,我们将视点设置为坐标原点,投影平面为z=1的平面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值