多偏移/获取偏移距离
亲爱的各位,我有一个有趣的问题。请参阅随附的DWG文件进行进一步检查。
场景是:
1.我有一条多段线,用作将偏移到外部的基准。
2、偏移值可能因对象而异。所以我需要实现的是绘制一条由垂直之间的偏移值组成的多段线,如:
如果“-”是多段线长度,“x”是顶点:
---x-x--x--
该多段线表示:
将选定多段线偏移2个单位
然后将新的偏移3个单位
然后偏移最新的1个单位
最后是3个单元。
有可能吗?
当做
文科硕士
从多段线偏移。图纸 这里有一些可能对你有用的东西。 下面是该代码的快速修改。您需要按顺序拾取轮廓段,然后选择要偏移的项目。
(defun c:foo (/ _pts lm:clockwise-p a b c e o s)
;; Clockwise-p-Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented
(defun lm:clockwise-p (p1 p2 p3)
((lambda (n) (< (car (trans p2 0 n)) (car (trans p1 0 n)))) (mapcar '- p1 p3))
)
(defun _pts (e) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget e))))
(while (setq e (car (entsel "\nPick profile segments in order: ")))
(setq c (cons (vlax-curve-getdistatparam e (vlax-curve-getendparam e)) c))
)
(setq b 0)
(if (and c (setq s (ssget '((0 . "lwpolyline") (-4 . ">") (90 . 2)))))
(foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
(setq a (_pts e))
(setq a (cond ((lm:clockwise-p (car a) (cadr a) (caddr a)) -)
(+)
)
)
(foreach d (reverse c)
;; vlax-invoke will return a list of objects rather than an array
(setq o (car (vlax-invoke (vlax-ename->vla-object e) 'offset (a (setq b (+ b d))))))
;; Use entmod so layer does not need to exist
;; (entmod (append (entget (vlax-vla-object->ename o)) (list (cons 8 d))))
)
)
)
(princ)
) 我写了一个使用csv输入1,2,3,-4,-6,-10的,现在我把它放在哪里了。它只是将输入转换为列表,并重复offset命令。它可能在家里,我张贴在这里。
试试这些,啊:test24是你想要的,另一个更通用,但你不需要画小的线。
; multiple offsets just enter values
; by Alan H July 2018
; pick pt3 well away from object and near square off
; for angle to work
(defun AH:test23 ( / ent dist1 obj1 x obj2 pt2 pt1 oldsnap)
(setq oldsnap (getvar 'osmode))
(setvar 'osmode 512)
(setq ent (entsel "pick object to offset"))
(setq obj1 (car ent))
(setq pt2 (cadr ent))
(setqpt3 (getpointpt2 "pick right side"))
(setq ang(angle pt2 pt3))
(while
(setq dist1 (getreal "Enter offset distance -ve for left <Enter> to exit"))
(setqpt3 (polar pt2angdist1))
(command "offset" (abs dist1) obj1 pt3 "")
)
(setvar 'osmode oldsnap)
(princ)
)
(AH:test23)
(defun AH:test24 ( / ent dist1 obj1 x obj2 pt2 pt1 oldsnap)
(setq oldsnap (getvar 'osmode))
(setvar 'osmode 1)
(setq ent (entsel "pick object to offset"))
(setq obj1 (car ent))
(setq pt2 (cadr ent))
(setqpt3 (getpointpt2 "pick right side"))
(setq ang(angle pt2 pt3))
(while
(setq dist1 (getdist pt2 "Enter offset distance -ve for left"))
(setqpt3 (polar pt2angdist1))
(command "offset" (abs dist1) obj1 pt3 "")
)
(setvar 'osmode oldsnap)
(princ)
)
(AH:test24)
页:
[1]