乐筑天下

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

[编程交流] 划分区域/测量i

[复制链接]

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:09:06 | 显示全部楼层 |阅读模式
大家好,
 
我正在寻求帮助,以完成超出我技能水平的事情。为了便于理解,我附上了一张草图。我想做的是。。。
 
我试图测量两个点之间的距离,分别是P1和P2,并将该距离划分为等距区域,由xline分隔。但是,从第一条和最后一条连接线到点P1和P2的距离需要是每条连接线之间距离的一半。
 
要选择所需的空格和行数,我需要将P1、P2距离除以一个值(例如4200),然后将该值四舍五入到最接近的整数。该数字将是两点之间所需的连接线数量。
 
交联线需要垂直于测量的P1、P2距离的方向。
 
提前感谢!
180910hat7dwl6yvidarvl.jpg
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:15:40 | 显示全部楼层
 
难道你不需要在没有任何计算的情况下提供XLine的数量(例如4200)吗?然后可以从xline的数量计算出测量值X:X=p1p2/4200,然后从端点得到X/2。。。
回复

使用道具 举报

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:17:00 | 显示全部楼层
 
你好,Marko,谢谢你的回复!抱歉,我想我用了一些删除和编辑的方式来破坏我的帖子,不习惯在论坛上发帖。
 
不幸的是,我不认为可以这样做。
 
4200值是两点之间允许的最大间距(由xline表示)。我将距离除以这个最大间距,这就给出了我将拥有的确切点数(例如,10000mm的距离除以4200得到2.38点)。然而,我不能得到一个点的一部分,所以我需要四舍五入到3。
 
为了正常计算间距,我将10000除以3,这是xline之间的间距,该值的一半位于点P1和P2的末端。命令的其余部分是在这些位置绘制连接线。
 
如果有一种方法可以作为命令的一部分进行第一次计算,那么这将大大加快处理速度。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:21:35 | 显示全部楼层
现在我不明白。。。
 
测试这个快速制作的版本,如果是,请告诉我:
 
  1. (defun c:xlindistdiv ( / p1 p2 v n num x k p pl )
  2. (setq p1 (getpoint "\nPick or specify first point : "))
  3. (setq p2 (getpoint p1 "\nPick or specify second point : "))
  4. (setq v (mapcar '- p2 p1))
  5. (setq n (polar '(0.0 0.0) (+ (angle '(0.0 0.0) v) (* 0.5 pi)) 1.0))
  6. (initget 7)
  7. (setq num (getint "\nSpecify number of XLINE entities for division of distance between two picked points : "))
  8. (setq x (/ (distance p1 p2) num))
  9. (setq k 0.5)
  10. (repeat num
  11.    (setq p (polar p1 (angle p1 p2) (* k x)))
  12.    (setq k (1+ k))
  13.    (setq pl (cons p pl))
  14. )
  15. (setq pl (reverse pl))
  16. (foreach p pl
  17.    (entmake
  18.      (list
  19.        '(0 . "XLINE")
  20.        '(100 . "AcDbEntity")
  21.        '(100 . "AcDbXline")
  22.        (cons 10 p)
  23.        (cons 11 n)
  24.      )
  25.    )
  26. )
  27. (princ)
  28. )

 
M、 R。
回复

使用道具 举报

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:23:15 | 显示全部楼层
哇,太快了!
 
该命令工作良好,因为它正确地用x和半x间距分隔xline。然而,我想要绕过的命令部分是“指定xline实体的数量……”
 
我希望命令得到两点之间的距离,除以4200,四舍五入到最接近的整数,并将该整数用于“指定xline实体的名称”命令的一部分。这有意义吗?
 
命令的其余部分工作得很好,不过非常感谢您的宝贵时间!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:26:48 | 显示全部楼层
也许我又错过了什么:
您想指定X距离,而不是指定X线的数量?
回复

使用道具 举报

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:31:46 | 显示全部楼层
很抱歉让人困惑!试着想出一种不让人困惑的解释方法。
 
当它要求我选择两点时,我需要记住两点之间的距离,除以4200,然后四舍五入到最接近的整数。我需要记住这个号码,然后使用。
 
所以使用命令我会-
 
xlindistiv型;
单击指定点1
单击指定点2
该命令将取这两个点之间的距离,除以4200,向上取整,并记住取整后的数字。
然后,该命令将该值用于“指定连接线的数量”,并以与之前相同的方式绘制连接线。
 
我希望这有点道理。如果没有,请告诉我。再次感谢!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:35:27 | 显示全部楼层
很抱歉让人困惑!试着想出一种不让人困惑的解释方法。
 
当它要求我选择两点时,我需要记住两点之间的距离,除以4200,然后四舍五入到最接近的整数。我需要记住这个号码,然后使用。
 
所以使用命令我会-
 
xlindistiv型;
单击指定点1
单击指定点2
该命令将取这两个点之间的距离,除以4200,向上取整,并记住取整后的数字。
然后,该命令将使用该值重新计算“指定连接线数量”,并将该数字提示为默认连接线数量,并以与之前相同的方式绘制连接线。
 
我希望这有点道理。如果没有,请告诉我。再次感谢!
回复

使用道具 举报

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:36:00 | 显示全部楼层
对于重新计算部分正确。
 
这也适用于提示部分,尽管我不认为提示是必要的。然而,这两种方式都可以,所以都很好!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:41:30 | 显示全部楼层
我可能又错了,但我是这样理解的:
 
  1. (defun c:xlindistdiv ( / p1 p2 x dnum v n num k p pl )
  2. (setq p1 (getpoint "\nPick or specify first point : "))
  3. (setq p2 (getpoint p1 "\nPick or specify second point : "))
  4. (setq x (/ (distance p1 p2) 4200))
  5. (setq dnum (* (fix (1+ x)) 4200))
  6. (setq v (mapcar '- p2 p1))
  7. (setq n (polar '(0.0 0.0) (+ (angle '(0.0 0.0) v) (* 0.5 pi)) 1.0))
  8. (initget 6)
  9. (setq num (getint (strcat "\nSpecify number of XLINE entities for division of distance between two picked points <" (itoa dnum) "> : ")))
  10. (if (null num)
  11.    (setq num dnum)
  12. )
  13. (setq x (/ (distance p1 p2) num))
  14. (setq k 0.5)
  15. (repeat num
  16.    (setq p (polar p1 (angle p1 p2) (* k x)))
  17.    (setq k (1+ k))
  18.    (setq pl (cons p pl))
  19. )
  20. (setq pl (reverse pl))
  21. (foreach p pl
  22.    (entmake
  23.      (list
  24.        '(0 . "XLINE")
  25.        '(100 . "AcDbEntity")
  26.        '(100 . "AcDbXline")
  27.        (cons 10 p)
  28.        (cons 11 n)
  29.      )
  30.    )
  31. )
  32. (princ)
  33. )
HTH,M.R。
 
P、 请注意,默认数字将为4200、8400(2*4200)、12600(3*4200),当第一次除法是用数字4200时,取决于四舍五入的数字。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 08:58 , Processed in 1.586725 second(s), 75 queries .

© 2020-2025 乐筑天下

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