乐筑天下

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

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

[复制链接]

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:44:35 | 显示全部楼层
更接近了!唯一需要更改的是“指定连接线实体数…”的默认提示值需要除以4200得到一个较小的数字。例如,默认提示16800将变为4。
 
我已经在几个不同的长度上做了测试,这应该可以。我只是不知道如何实施它。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:47:50 | 显示全部楼层
也许是这样:
  1. (defun c:xlindistdiv ( / p1 p2 x dx 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 dx (fix (1+ (/ (distance p1 p2) 4200))))
  5. (setq v (mapcar '- p2 p1))
  6. (setq n (polar '(0.0 0.0) (+ (angle '(0.0 0.0) v) (* 0.5 pi)) 1.0))
  7. (initget 6)
  8. (setq x (getint (strcat "\nSpecify number of XLINE factor for division of distance between two picked points < " (itoa dx) " > : ")))
  9. (if (null x)
  10.    (setq num (* dx 4200))
  11.    (setq num (* x 4200))
  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. (alert (strcat "Created : " (itoa (length pl)) " XLINE entities... (WHEN you press ENTER or clik on OK...)"))
  33. (princ)
  34. )
回复

使用道具 举报

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:52:15 | 显示全部楼层
提示返回了正确的值,但当用enter确认时,由于某种原因,它绘制了太多的xline。当我自己进入同样的价值观时,工作得很好。
 
我很幸运地编辑了你之前发给我的一段代码!
 
  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))))
  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. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:53:52 | 显示全部楼层
我知道你现在想要什么了。。。很高兴它终于对你起作用了。。。
 
您好,M.R。
回复

使用道具 举报

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:57:51 | 显示全部楼层
非常感谢马尔科的帮助!真希望我能给你买杯啤酒什么的!
回复

使用道具 举报

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:00:41 | 显示全部楼层
你好,马尔科,
 
我试图扩展我从您的代码中学到的内容,并尝试开发一个额外的命令/功能。基本上,我希望在绘制xline后再次运行该命令,但方向不同。
 
此外,我需要使用从第一次运行命令开始的xline之间的距离,而不是使用4200作为所需的距离。
 
如果我理解正确,我相信您使用x表示xline之间的值。我想添加一个单独的(defun…)但不确定如何从现有代码中提取x值(xline之间的距离)来替换4200值。
 
否则,我想再次提示“选择或指定第一个点…”在第一条连接线出现后立即显示,然后再次运行整个过程,除了使用连接线之间的距离而不是4200。我解释清楚了吗?这可能有点令人困惑。
回复

使用道具 举报

76

主题

312

帖子

254

银币

后起之秀

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

铜币
390
发表于 2022-7-5 18:04:43 | 显示全部楼层
我也一直在遵循这个线程,因为我也可以使用这个LISP。
我只是想知道。。。是否可以获得一个额外的选项,使您选择现有直线/线段,而不是拾取两个点?
与输入命令时一样,默认情况下,我可以选择一条直线,但当我输入“P”时,我可以选择两个点,当我再次输入O时,我可以选择一个对象(直线/多线段)。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:09:01 | 显示全部楼层
对于MichaelAllfire(如果我理解正确):
 
对于后触摸:
尊敬的M.R。
回复

使用道具 举报

7

主题

28

帖子

21

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:11:23 | 显示全部楼层
你好,马尔科!
 
这也是我想要做的。首先,第二个方向的提示是否可能是“指定第一个点”?对于我来说,选择一个新的起点更合适,而不是从第一个方向的第二个点继续。
 
我之前解释的时候错过了一些东西,哎呀!
 
在确定第二个方向的连接线数量时,需要执行以下操作(我仅使用字母变量进行解释)。。。
 
VarA是第一个方向上现有交联线之间的距离。
VarB将为12000/VarA
VarC将为VarB x 1000
 
该VarC值将代替第二个方向的4200。它将遵循与第一次运行相同的过程,并且在划分为第二个方向的距离后,需要向上舍入到最近的整数。这个整数将为我们提供第二个方向所需的xline数。
 
我希望这有意义。到目前为止,你帮了我很大的忙!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 09:08 , Processed in 1.204551 second(s), 69 queries .

© 2020-2025 乐筑天下

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