如何在2段上绘制打断
我试着打断两条平行线,画闭合线和交点。我试图使用getpoint在线路的某个地方指出一个点,但它不起作用。
有人有办法吗?
然后插入一个对象。
parlinesbreak。图纸
parlines。图纸 你好
试试这个。
(defun c:BRK()
(setq snp (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq ent (entsel "\nSelect line to break"))
(setq po (cadr ent))
(setq ent (car ent))
(setq vlent (vlax-ename->vla-object ent))
(setq po (vlax-curve-getclosestpointto vlent po))
(setq po1 (getpoint po "\nSelect next point to break"))
(setq po1 (vlax-curve-getclosestpointto vlent po1))
(setq ent1 (car (entsel "\nSelect parallen entity")))
(setq vlent1 (vlax-ename->vla-object ent1))
(setq po2 (vlax-curve-getclosestpointto vlent1 po))
(setq po3 (vlax-curve-getclosestpointto vlent1 po1))
(command "Break" ent po po1)
(command "Break" ent1 po2 po3)
(command "line" po po2 "")
(command "line" po1 po3 "")
(setvar "OSMODE" snp)
)
另一个:
(defun c:br2 (/ lines pt1 pt2 ol plst)
;;; pBe Sep 2012 ;;;
(vl-load-com)
(prompt "\nSelect Objects to Break:")
(cond
((and
(setq plstnil
lines (ssget ":L" '((0 . "LINE")))
)
(= (sslength lines) 2)
(setq pt1 (getpoint "\nPick first point:"))
(setq pt2 (getpoint pt1 "\nPick second point:"))
(repeat (sslength lines)
(setq ol (ssname lines 0))
(setq plst (cons (vlax-curve-getclosestpointto ol pt1) plst)
plst (cons (vlax-curve-getclosestpointto ol pt2) plst)
)
(command "_break" ol "_non" pt1 "_non" pt2)
(ssdel ol lines)
)
(mapcar '(lambda (j)
(entmakex (list (cons 0 "LINE")
(cons 10 (nth (Car j) plst))
(cons 11 (nth (Cadr j) plst))
)
)
)
'((0 2) (1 3))
)
)
)
)
(princ)
)
HTH公司 谢谢它起作用了,但一点也不起作用。
这就是我想要做的:
brklns。图纸
我的代码的一部分:
(defun c:WR1 ( / aa b c c5 c6 c7 c8 cc3 d l la lb dr wbl)
(setq bl (getvar "BLIPMODE"))
(setq cm (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(if (not doorw)
(setq doorw 0.9)
)
(initget 2)
(setq dr (getdist (strcat "Door with: <" (rtos doorw 2 2) ">")))
(if dr
(setq doorw dr)
)
;(setq a1 (cdr (assoc 10 (entget (car (entsel))))))
(setq aobject (cdr (entget (car (entsel "\nSelect first line: ")))))
(setq a1 (cdr (assoc 10 (cdr aobject))))
(setq a2 (cdr (assoc 11 (cdr aobject))))
(setq bobject (cdr (entget (car (entsel "\nSelect second line: ")))))
(setq b1 (cdr (assoc 10 (cdr bobject))))
(setq b2 (cdr (assoc 11 (cdr bobject))))
(setq _c (getpoint "\nBase point: "))
(initget 1 "Left Right:")
(setq d (getkword "\nLeft or Right?"))
(setq _la (angle a1 a2))
(setq _lb (angle b1 b2))
(setq lac (angle a1 _c))
(setq c1 (polar a1 _la (* (cos (- _la lac)) (distance a1 _c))))
(setq cd (distance a1 b1))
(setq lbc (angle b1 (polar _c (+ _lb (* 0.5 pi)) (* (cos (- _lb lbc)) cd))))
(setq c2 (polar b1 (+ _lb (* 0.5 pi)) (* (cos (- _lb lbc)) cd)))
..........................
该“_c”点不在我拾取它的位置(基点)。 提示输入门宽度:
(defun c:br2 (/ lines pt1 pt2 olplst)
;;; pBe Sep 2012 ;;;
(vl-load-com)
(prompt "\nSelect Objects to Break:")
(cond
((and
(setq plstnil
lines (ssget ":L" '((0 . "LINE")))
)
(= (sslength lines) 2)
(setq dr (cond
((getdist (strcat "\nEnter Window width"
(if dr (strcat " <" (rtos dr) ">: ") ": ")
)))(dr))
)
(setq pt1 (getpoint "\nPick first point:"))
(setq pt2 (getpoint pt1 "\nPick second point for direction:"))
(setq pt2 (polar pt1 (angle pt1 pt2) dr))
(repeat (sslength lines)
(setq ol (ssname lines 0))
(setq plst (cons (vlax-curve-getclosestpointto ol pt1) plst)
plst (cons (vlax-curve-getclosestpointto ol pt2) plst)
)
(command "_break" ol "_non" pt1 "_non" pt2)
(ssdel ol lines)
)
(mapcar '(lambda (j)
(entmakex (list (cons 0 "LINE")
(cons 10 (nth (Car j) plst))
(cons 11 (nth (Cadr j) plst))
)
)
)
'((0 2)
(1 3))
)
)
)
)
(princ)
)
顺便说一句:欢迎来到论坛
请务必阅读本代码发布指南 太好了,谢谢。它正在工作。
我发现在autolisp中有很多想法需要澄清:)
但是使用getpoint可以得到一个点,因为我认为这是错误的,对吗。
不客气,很乐意帮忙。
希望你能从中学习。
请在阅读代码发布指南后更新您的帖子
干杯 好啊为什么我真的需要那个Lisp程序的“vlax curve getClosestPoint”?! 这是你想做的吗?如果是这样的话,再加上更多的私人电子邮件给我,附加做简单的房子设计仍然可用,可以提供详细信息吗
是的,我试着去做,但我试着做的主要事情是学习autolisp。
斯特凡_ss@abv.bg
页:
[1]
2