CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2021 开发者帮助

将 3D 点转换为 2D 点

2024-5-18 18:30| 发布者: admin| 查看: 88| 评论: 0|原作者: admin|来自: AutoCAD

将 3D 点转换为 2D 点

花园小径程序中的另一个有用功能是将 3D 点转换为 2D 点。AutoCAD 通常使用三维坐标,但某些图元(如轻量级多段线)始终应为二维坐标。函数返回的点是 3D 的,因此您需要创建一个函数来转换它们。getpoint

将 3D 点转换为 2D 点

  1. 在控制台窗口提示符下输入以下内容:
    (defun 3dPoint->2dPoint (3dpt)(list (car 3dpt) (cadr 3dpt)))
  2. 通过在控制台提示符下输入以下内容来测试函数:
    (3dpoint->2dpoint (list 10 20 0))

    这可行,但花园小径应用还有另一个考虑因素。尽管在 LISP 函数中,数字是整数还是实数通常无关紧要,但 ActiveX 函数并非如此,您将在本课后面使用。ActiveX 函数需要实数。您可以轻松修改函数以确保它返回实数而不是整数。

  3. 在控制台提示符下输入以下代码:
    (defun 3dPoint->2dPoint (3dpt)(list (float(car 3dpt)) 
    (float(cadr 3dpt))))
  4. 再次运行该函数:
    (3dpoint->2dpoint (list 10 20 0))

    请注意,返回值现在是实数(由十进制值表示)。

  5. 再次测试该函数,这次使用该函数。在控制台提示符下输入以下内容:getpoint
    (setq myPoint(getpoint))
  6. 在 AutoCAD 绘图区域中选取一个点。

    该函数返回一个 3D 点。getpoint

  7. 在控制台提示符下输入以下内容:
    (3dPoint->2Dpoint myPoint)

    请注意返回的 2D 点。

    现在将该函数添加到 gpmain.lsp 文件中,就像您对 .新代码应如下所示:Degrees->Radians

    ;;;--------------------------------------------------------------;
    ;;; Function: 3dPoint->2dPoint                                   ;
    ;;;--------------------------------------------------------------;
    ;;; Description: This function takes one parameter representing a;
    ;;;              3D point (list of three integers or reals), and ;
    ;;;              converts it into a 2D point (list of two reals).;
    ;;;              There is no error checking on the 3D point      ;
    ;;;              parameter -- it is assumed to be a valid point. ;
    ;;;--------------------------------------------------------------;
    ;;; To do: Add some kind of parameter checking so that this      ;
    ;;;        function won't crash a program if it is passed a      ;
    ;;;        null value, or some other kind of data type than a    ;
    ;;;        3D point.                                             ;
    ;;;--------------------------------------------------------------;
    (defun 3dPoint->2dPoint (3dpt)
      (list (float(car 3dpt)) (float(cadr 3dpt)))
    )

    请注意,函数标题包含有关将来应在此函数上执行的一些工作的评论。如果您想获得一些额外的积分,请考虑如何使此功能万无一失,以便无效数据不会使其崩溃。

    提示:和功能...numberplistp

    (listp '(1 1 0)) => T
    (numberp 3.4) => T

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2024-12-15 12:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部