乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 13|回复: 10

[编程交流] Getint+极坐标和不同分辨率

[复制链接]

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:39:26 | 显示全部楼层 |阅读模式
大家好,
我刚刚写道:
  1. ; Attempt for dimaligned + dimcontinue
  2. (defun C:test ( / oldosm pt1 pt2 pt3 ang dist )
  3. (setq oldosm (getvar 'osmode))
  4. (if
  5.         (and
  6.                 (setq dist (getint "\nSpecify offset value"))
  7.                 (setq pt1 (getpoint "\nPoint1 "))
  8.         )
  9.         (while
  10.                 (setq pt2 (getpoint pt1 "\nPoint2 "))
  11.                 (setq ang (angle pt1 pt2))
  12.                 (setq pt3 (polar (mid pt1 pt2) (+ ang (/ 2 PI)) dist)) ; should be perpendicular from the midpoint between pt1 and pt2, on "dist" distance
  13.                 (setvar 'osmode 0)
  14.                 (command "_.dimaligned" pt1 pt2 pt3)
  15.                 (setq pt1 pt2)
  16.                 (setvar 'osmode oldosm)
  17.         )
  18. )
  19. (princ)
  20. )
  21. (defun mid (p1 p2)
  22. (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0)) p1 p2)
  23. )

 
我对极函数没有太多经验,但老实说,我看不出有什么错。
然而,在为偏移值输入100后,我得到了这个结果:
183929v1ijegdenyled8ef.jpg
不是100个单位的偏移量,而是59,xxx。
我想不出是什么问题。pt3应垂直于pt1-pt2线的中点,距离为dist。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 17:49:15 | 显示全部楼层
很好的开始,除了以弧度表示90度角的值外,极性函数没有任何错误。
如:
  1. (/ pi 2.0)

 
如果您想:
[列表]
  • 当您要求用户输入一个值,并且该值必须是实数时,最好使用getdist或甚至getreal,而不是函数getint,因为最后一个函数将返回整数而不是实数。
  • 尽量避免使用系统变量osmode,因为当用户点击ESC按钮结束程序时,您没有错误函数处理程序来重新设置它们,因此在您的情况下,您可以使用选项“\u non”或“\u none”忽略OPSNAP的设置。
    [/列表]
  • 回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    325
    发表于 2022-7-5 17:51:56 | 显示全部楼层
    谢谢你,塔瓦!
    找到垂直向量一直是我的一个问题,直到你的回答。现在,我可以修复一些我脑海中的其他代码。
    我确实有意使用getint,我对getdist和getreal很熟悉。
    我会遵循你的第二个建议,但当我真的决定在日常工作中使用一些“练习”例程时,我总是添加函数错误处理程序。
     
    至于版权,我不会从写代码中获利(它们只是帮我完成工作)。
    因此,我把那些帮助我的人(通常是你和/或李·麦克)加在一起,我以作者的身份写自己的作品,以知道代码中可能有错误。
    回复

    使用道具 举报

    63

    主题

    6297

    帖子

    6283

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    358
    发表于 2022-7-5 18:01:53 | 显示全部楼层
    期待看到您对上述代码的最终修改。
    回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    325
    发表于 2022-7-5 18:04:20 | 显示全部楼层
    老实说,我在体验方面做得更进一步了,决定把DIMSPACE搞砸。
    我改变了这个:
    1. (setq dist (getint "\nSpecify offset value"))

    为此:
    1. (setq dist (distance pt1 pt2))

    所以我可以从错误处理程序中跟踪结果。
    以下是我为这个实验准备的内容:
    1. ; Attempt for dimaligned + dimcontinue
    2. (defun C:test ( / *error* oldosm pt1 pt2 pt3 ang dist ss )
    3. (defun *error* ( msg )
    4.         (if oldosm (setvar 'osmode oldosm))
    5.         (command-s "_.DIMSPACE" (entlast) ss "" 0)
    6.        (if (not (member msg '("Function cancelled" "quit / exit abort")))
    7.            (princ (strcat "\nError: " msg))
    8.         )
    9.        (princ)
    10. )
    11. (setq oldosm (getvar 'osmode))
    12. (if
    13.         (and
    14.                 ; (setq dist (getint "\nSpecify offset value"))
    15.                 (setq pt1 (getpoint "\nPoint1 "))
    16.         )
    17.         (progn
    18.                 (setq ss (ssadd))
    19.                 (while
    20.                         (and
    21.                                 (setq pt2 (getpoint pt1 "\nPoint2 "))       
    22.                         )
    23.                         (setq ang (angle pt1 pt2))
    24.                         (setq dist (distance pt1 pt2))
    25.                         (setq pt3 (polar (mid pt1 pt2) (+ ang (/ PI 2)) dist)) ; should be perpendicular from the midpoint between pt1 and pt2, on "dist" distance
    26.                         (setvar 'osmode 0)
    27.                         (command "_.dimaligned" "_non" pt1 "_non" pt2 "_non" pt3)
    28.                         (setq pt1 pt2)
    29.                         (setvar 'osmode oldosm)
    30.                         (setq ss (ssadd (entlast) ss))       
    31.                 )
    32.         )
    33. )
    34. (princ)
    35. )
    36. (defun mid (p1 p2)
    37. (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0)) p1 p2)
    38. )       

    使用示例:
    在不同距离处选择共线的点(因此创建的尺寸将平行,但显然不共线)。
    然后按ESC键,它们应该与上次创建的对象共线。
     
    我必须承认,当你随着时间的推移变得更熟练时,写这些东西真的很有趣!
    回复

    使用道具 举报

    63

    主题

    6297

    帖子

    6283

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    358
    发表于 2022-7-5 18:09:37 | 显示全部楼层
    我想你没有理解我所说的OSMODE设置,因为你再次使用了带有“\u non”选项的OSMODE设置,所以请使用这些OSMODE或“\u non”。
     
    您已经使用并运行了两次,而不需要它。
    当你们期望一个实数除以另一个数时,为了得到一个正确的返回值,你们应该给它们两个实数,就像我用π除以二一样。
    回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    325
    发表于 2022-7-5 18:19:01 | 显示全部楼层
    我什么都懂!
    我只是不想在不断更改代码时删除和函数(并且不想麻烦重写它们),progn函数也是如此。
    但是,是的,我没有注意到我应该用reals来喂养PI,我会记住的!
    回复

    使用道具 举报

    63

    主题

    6297

    帖子

    6283

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    358
    发表于 2022-7-5 18:22:14 | 显示全部楼层
    我很抱歉,如果我上次回复的意思是冒犯你。
    回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    325
    发表于 2022-7-5 18:31:32 | 显示全部楼层
    我一点也不生气,我知道你在试图帮助别人,你的帖子被称为建设性批评。
    回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-5 18:34:40 | 显示全部楼层
    对于许多90、180、270、45等,生成一系列全局值,并将代码保存在类似acaddoc的lisp库中。lsp。
     
    1. (setq p90 (/ pi 2.0))
    2. (setq p180 pi)
    3. (setq p45 (/ pi 4.0))
    4. (setq p270 (* pi 1.5))
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-13 03:11 , Processed in 0.436849 second(s), 75 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表