中断然后替换为隐藏l
大家好,请帮助我加快我的工作,我的上级希望我通过叠加单个布局(外部参照文件)来处理多服务布局(MEP组合服务),但他希望通过在交叉线上创建隐藏线来指定交叉服务/线,绘制什么是更高和更低的服务,请查看图像,以便您清楚,
风管和管道处于交叉位置,我希望我的管道低于风管工程,我将修剪/打断,然后将修剪线替换为隐藏线,
必须在修剪线上替换2条线,1条是隐藏的,另一条是不同层的连续线,这样,如果他们只需要管线图,我将关闭隐藏线并再次更改为连续线,
有没有可能有一个Lsp自动打断线并替换为2线(连续和隐藏不同层),然后连续线将自动关闭,这样只有隐藏线将被表示,如果你有像我需要的Lsp,请帮助我,
感谢大家,
干得好
(defun c:bline ( / )
(setq obj (entsel "Select object: "))
(setq pt2 (getpoint "Specify second break point: "))
(setq pt1 (cadr obj))
(command "break" pt1 pt2)
(command "line" pt1 pt2 "")
(setq l1name (vlax-ename->vla-object (entlast)))
(vla-put-linetype l1name "HIDDEN")
(vla-put-layer l1name "C-ANNO-NOTE") ;<----INSERT NEW LAYER
(command "line" pt1 pt2 "")
(setq l2name (vlax-ename->vla-object (entlast)))
(vla-put-linetype l2name "CONTINUOUS")
(vla-put-layer l2name "C-ANNO-TEXT") ;<-----INSERT NEW LAYER
(princ)
) 当然,我等了一整天才编写代码,看看是否还有其他人会这么做,但是。。。李对你的代码有一些看法。
(defun c:brk(/ *error* vlst ovar cEnt pt1 pt2 cObj bPts nlin)
(vl-load-com)
(defun *error*(msg)
(if ovar
(mapcar 'setvar vlst ovar))
(if (not (member msg '("Function cancelled" "quit / exit abort")))
(princ (strcat "\n<< Error: " msg " >>"))
(princ "<< Function Cancelled >>"))
(princ))
(if (not (tblsearch "LTYPE" "HIDDEN"))
(vla-load "HIDDEN" "acad.lin"))
(setq doc (vla-get-ActiveDocument
(vlax-get-Acad-Object))
spc (if (zerop (vla-get-activespace doc))
(if (= (vla-get-mspace doc) :vlax-true)
(vla-get-modelspace doc)
(vla-get-paperspace doc))
(vla-get-modelspace doc)))
(setq vlst '("CMDECHO" "OSMODE")
ovar (mapcar 'getvar vlst))
(setvar "CMDECHO" 0)
(if (and (setq cEnt (entsel "\nSelect Line: "))
(member (cdr (assoc 0 (entget (car cEnt))))
'("LINE" "POLYLINE" "LWPOLYLINE")))
(if (and (setq pt1 (getpoint "\nSelect First Point: "))
(setq pt2 (getpoint "\nSelect Second Point: ")))
(progn
(setvar "OSMODE" 0)
(setq cObj (vlax-ename->vla-object (car cEnt)))
(setq bPts
(mapcar
(function
(lambda (x)
(vlax-curve-getClosestPointto cObj x)))
(list pt1 pt2)))
(command "_break" cEnt "_F" (car bPts) (cadr bPts))
(setq nlin
(vla-addline spc
(vlax-3D-point (car bPts))
(vlax-3D-point (cadr bPts))))
(if (tblsearch "LTYPE" "HIDDEN")
(vla-put-linetype nlin "HIDDEN")
(princ "\n<!> Hidden Linetype Could not be Found <!>")))
(princ "\n<!> Points not Selected <!>"))
(princ "\n<!> Incorrect Line Selection <!>"))
(mapcar 'setvar vlst ovar)
(princ))
现在它形成了一条隐藏线。
我真的很喜欢这个想法,检查它是否是一条折线。
(if (not (tblsearch "LTYPE" "HIDDEN"))
(vla-load (vla-get-linetypes (vla-get-activedocument (vlax-get-acad-object)))"HIDDEN" "ACAD.LIN"))
我不明白你为什么在。。。break会自动执行此操作。
他还要求在两个不同的层上画两条线,一个是隐藏的,一个是连续的。
我希望你不要认为我在攻击你。就我个人而言,我从你写的代码中学到了很多。我只是觉得你需要一些批评。 谢谢比尔,我会接受所有批评的
好的,这是一个小学生的错误,我只是匆匆忙忙(我已经加载了“隐藏”线型,所以它不会导致我在测试时注意到的错误……但这不是借口。。
谢谢
我没有AutoCAD的经验,不知道break会自动使用getClosestPointto,所以我只是确保它们是直线上的点
至于层次和其他行-待定,我没有完全阅读的要求太仔细,我只是看了图片 好的,随着线型错误的改变。。。
(为了安全起见,我还是想把getClosestPointto放在那里)
(setvar "OSMODE" 0)
(setq cObj (vlax-ename->vla-object (car cEnt)))
(setq bPts
(mapcar
(function
(lambda (x)
(vlax-curve-getClosestPointto cObj x)))
(list pt1 pt2))) 谢谢李和Commandobill
你的两个Lisp程序都很有帮助,很抱歉由于工作繁忙,回复很晚
再次感谢朋友们
干杯 看这里
DHline v.1.0!!;-)
哦,哇。。。这太狡猾了!太不可思议了! 太棒了,就像Lisp程序:震惊:
页:
[1]