乐筑天下

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

[编程交流] 多偏移/获取偏移距离

[复制链接]

4

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-5 15:04:58 | 显示全部楼层 |阅读模式
亲爱的各位,
 
我有一个有趣的问题。请参阅随附的DWG文件进行进一步检查。
 
场景是:
1.我有一条多段线,用作将偏移到外部的基准。
2、偏移值可能因对象而异。所以我需要实现的是绘制一条由垂直之间的偏移值组成的多段线,如:
 
如果“-”是多段线长度,“x”是顶点:
 
---x-x--x--
 
该多段线表示:
将选定多段线偏移2个单位
然后将新的偏移3个单位
然后偏移最新的1个单位
最后是3个单元。
 
有可能吗?
 
当做
 
文科硕士
从多段线偏移。图纸
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:43:50 | 显示全部楼层
这里有一些可能对你有用的东西。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:47:56 | 显示全部楼层
下面是该代码的快速修改。您需要按顺序拾取轮廓段,然后选择要偏移的项目。
  1. (defun c:foo (/ _pts lm:clockwise-p a b c e o s)
  2. ;; Clockwise-p  -  Lee Mac
  3. ;; Returns T if p1,p2,p3 are clockwise oriented
  4. (defun lm:clockwise-p        (p1 p2 p3)
  5.    ((lambda (n) (< (car (trans p2 0 n)) (car (trans p1 0 n)))) (mapcar '- p1 p3))
  6. )
  7. (defun _pts (e) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget e))))
  8. (while (setq e (car (entsel "\nPick profile segments in order: ")))
  9.    (setq c (cons (vlax-curve-getdistatparam e (vlax-curve-getendparam e)) c))
  10. )
  11. (setq b 0)
  12. (if (and c (setq s (ssget '((0 . "lwpolyline") (-4 . ">") (90 . 2)))))
  13.    (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  14.      (setq a (_pts e))
  15.      (setq a (cond ((lm:clockwise-p (car a) (cadr a) (caddr a)) -)
  16.             (+)
  17.       )
  18.      )
  19.      (foreach d (reverse c)
  20. ;; vlax-invoke will return a list of objects rather than an array
  21. (setq o (car (vlax-invoke (vlax-ename->vla-object e) 'offset (a (setq b (+ b d))))))
  22. ;; Use entmod so layer does not need to exist
  23. ;; (entmod (append (entget (vlax-vla-object->ename o)) (list (cons 8 d))))
  24.      )
  25.    )
  26. )
  27. (princ)
  28. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:08:34 | 显示全部楼层
我写了一个使用csv输入1,2,3,-4,-6,-10的,现在我把它放在哪里了。它只是将输入转换为列表,并重复offset命令。它可能在家里,我张贴在这里。
 
 
 
试试这些,啊:test24是你想要的,另一个更通用,但你不需要画小的线。
 
  1. ; multiple offsets just enter values
  2. ; by Alan H July 2018
  3. ; pick pt3 well away from object and near square off
  4. ; for angle to work
  5. (defun AH:test23 ( / ent dist1 obj1 x obj2 pt2 pt1 oldsnap)
  6. (setq oldsnap (getvar 'osmode))
  7. (setvar 'osmode 512)
  8. (setq ent (entsel "pick object to offset"))
  9. (setq obj1 (car ent))
  10. (setq pt2 (cadr ent))
  11. (setq  pt3 (getpoint  pt2 "pick right side"))
  12. (setq ang  (angle pt2 pt3))
  13. (while
  14. (setq dist1 (getreal "Enter offset distance -ve for left <Enter> to exit"))
  15. (setq  pt3 (polar pt2  ang  dist1))
  16. (command "offset" (abs dist1) obj1 pt3 "")
  17. )
  18. (setvar 'osmode oldsnap)
  19. (princ)
  20. )
  21. (AH:test23)

 
  1. (defun AH:test24 ( / ent dist1 obj1 x obj2 pt2 pt1 oldsnap)
  2. (setq oldsnap (getvar 'osmode))
  3. (setvar 'osmode 1)
  4. (setq ent (entsel "pick object to offset"))
  5. (setq obj1 (car ent))
  6. (setq pt2 (cadr ent))
  7. (setq  pt3 (getpoint  pt2 "pick right side"))
  8. (setq ang  (angle pt2 pt3))
  9. (while
  10. (setq dist1 (getdist pt2 "Enter offset distance -ve for left"))
  11. (setq  pt3 (polar pt2  ang  dist1))
  12. (command "offset" (abs dist1) obj1 pt3 "")
  13. )
  14. (setvar 'osmode oldsnap)
  15. (princ)
  16. )
  17. (AH:test24)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 23:27 , Processed in 1.782258 second(s), 60 queries .

© 2020-2025 乐筑天下

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