需要此LISP的帮助
嗨,有人能帮我解决这个Lisp程序(CAD2010)。这不是我的-我下载了它,但希望它被修改一点。
我想选择一个名为“TL-LD-Scanlight Interconnecting Leads”的层
然后,我希望lisp用它们的尺寸标注该层上的所有线,并将这些尺寸标注在一个新的层上,该层标记为“TL-LD-Scanlight Interconnecting dimension”。
这将使我们能够关闭和打开dim,因为我们有更多的操作要做。
我希望文本高度恒定在50,偏移量为75
这个lsp有一个前缀选项,我想在维度外设置为“>”(常数为)。
我只希望操作员在CAD中键入“扫描线”,其他一切都完成了。
我还希望没有标记(即点样式设置为nothing)。
我自己也试过这么做,但一直在破译代码!!
提前谢谢你
Lisp程序在下面
; +-------+---------+---------+-----SCANLINE.lsp----+---------+--------+--------+ ;
(vl-load-com)
(defun C:SCANLINE (/ acsp adoc ang der ent gap midp mtx oid pline pref txp txt)
(or adoc
(setq adoc
(vla-get-activedocument
(vlax-get-acad-object)
)
)
)
(if (and
(= (getvar "tilemode") 0)
(= (getvar "cvport") 1)
)
(setq acsp (vla-get-paperspace adoc))
(setq acsp (vla-get-modelspace adoc))
)
(if (setq ent (entsel "\nSelect polyline >>"))
(progn
(setq oid (vla-get-objectid
(setq pline (vlax-ename->vla-object
(car ent))))
)
(setq midp (vlax-curve-getclosestpointto pline
(vlax-curve-getpointatdist pline
(/ (vla-get-length pline) 2)))
)
(vlax-invoke acsp 'AddCircle midp 2.0)
(setq der (vlax-curve-getfirstderiv pline
(vlax-curve-getparamatpoint pline midp)))
(if (zerop (cadr der))
(setq ang (/ pi 2))
(setq ang (- pi (atan (/ (car der) (cadr der)))))
)
(initget 6)
(setq hgt (getdist "\nEnter text height <5.0>: "))
(if (not hgt)(setq hgt 5.))
(initget 6)
(setq gap (getdist "\nEnter distance of the text offset <2.5>: "))
(if (not gap)(setq gap 2.5))
(setq txp (polar midp ang gap))
(setq pref (getstring T "\nEnter label prefix <920>: "))
(if (eq "" pref)(setq pref "920"))
(setq pref (strcat pref " ("))
(setq txt (strcat pref
"%<\\AcObjProp Object(%<\\_ObjId "
(itoa oid)
">%).Length \\f \"%lu2%pr2\">% m)");--> number of decimals = 2
)
(setq mtx (vlax-invoke acsp 'AddMText txp 0.0 txt)
)
(setq ang (- ang (/ pi 2)))
(setq ang (cond
((> pi ang (/ pi 2))(- pi ang))
((> (* pi 1.5) ang pi)(- ang pi))
((> (* pi 2) ang (* pi 1.5))(- (* pi 2) ang))
(T ang))
)
(vlax-put mtx 'AttachmentPoint 5 )
(vlax-put mtx 'InsertionPoint txp)
(vlax-put mtx 'Height hgt)
(vlax-put mtx 'Rotation ang)
(vla-update mtx)
)
)
(princ)
)
(princ "\n Start command with SCANLINE ...")
(princ)
; +---------+---------+---------+---------+---------+---------+---------+ ;
嗨,有人能帮我吗!!
我认为这可能是“今天的轻描淡写”。
我不是故意粗鲁,但你还没有得到任何帮助,因为你的请求还没有把CADTutor当成快餐店(事实并非如此)。这是一个分享知识的地方。。。你唯一能“随心所欲”的就是你自己写的代码。
将来,如果你先展示一些作品,你可能会得到更及时的回复。刚接触编程,甚至不了解如何做某事(我们都是从某个地方开始的)没有错,但没有人(无论你的经验如何)喜欢leach。
我想帮助你,所以请张贴一些你尝试的例子,这样我或其他人可以更好地建议你。
为了让你不觉得我以任何方式拒绝了你或你的帮助请求,这里有几个“胡萝卜”供你考虑:
(if (and (tblsearch "layer" (setq layerName "TL - LD - Scanlight Interconnecting Leads"))
(setq ss (ssget "_x" (list (cons 8 layerName)))))
;; ...code
)
(vlax-put mtx 'layer "TL - LD - Scanlight Interconnecting Dimension")
希望这有帮助! 谢谢你的回复-
至少现在我明白了为什么我的帖子不合适了——但对于一个没有接受过CAD培训并且在6个月前33岁才开始使用它的人来说——其中一些对我来说有点法语!
我相信我有一个数学头脑,能够很好地理解逻辑——只是我读的关于LISP的书越多,我就越会对参数、顺序和反向逻辑感到困惑。
我们公司在CAD方面不是最好的,我已经比其他用户更先进了——只是因为我想知道事情是如何运作的。
我并没有试图过滤我意识到有价值的信息和技能——我也不想把工作当成自己的工作——我要求在工作中接受培训——但没有。
我只是想改进一些东西和我们的工作方式——因为产生了很多错误,我知道这很令人沮丧,只要投入一点资金,公司就可以消除这些错误。
我的出发点和落脚点是将原始documnet(LISP)文件与新文件进行比较,然后查看所做的更改以及它们对代码的影响。
然后对于类似的函数,我希望能够生成一个工作的LISP。
我试图替换代码中的变量,但不知道如何更改顺序。
如果你能给我推荐一本书或一个有帮助的网页,我很乐意去研究。
我有太多的问题,把它们都写下来太疯狂了,我希望用前置和后置的方式来回答其中的大部分问题,而不会打扰到别人。
有没有写代码和常数列表的方法!
在这个阶段,我不了解预修复及其应用程序,即vlax-getvar等
此外,我如何预设属性,而不是“steq hgt”和(getdist。。。
我只是删除(getdist。。
然后大概使用命令设置高度设置hgt 50
我的问题是,我有太多的问题,我不知道从哪里开始!
我将附上LISP并用红色写下我的问题-我希望你能看到我有兴趣学习这些功能以及它们是如何工作的!
谢谢你的回复
; +-------+---------+---------+-----SCANLINE.lsp----+---------+--------+--------+ ;
(vl-load-com)
(defun C:SCANLINE (/ acsp adoc ang der ent gap midp mtx oid pline pref txp txt)
Does above set the variables for this lisp
(or adoc
(setq adoc
(vla-get-activedocument
(vlax-get-acad-object)
)
)
)
(if (and
(= (getvar "tilemode") 0) ?
(= (getvar "cvport") 1) ?
)
(setq acsp (vla-get-paperspace adoc))
(setq acsp (vla-get-modelspace adoc))
)
(if (and (tblsearch "layer" (setq layerName "TL - LD - Scanlight Interconnecting Leads"))
(setq ss (ssget "_x" (list (cons 8 layerName)))))
;; ...code
Can you select the layer then all polylines after - just incase someone has put the wrong thing on this layer
)
(if (setq ent (entsel "\nSelect polyline >>")) I need to select all polylines “nSelect ..
(progn
(setq oid (vla-get-objectid
(setq pline (vlax-ename->vla-object
(car ent))))
)
(setq midp (vlax-curve-getclosestpointto pline
(vlax-curve-getpointatdist pline
(/ (vla-get-length pline) 2)))
)
(vlax-invoke acsp 'AddCircle midp 2.0) - don’t need this can I just remove it
(setq der (vlax-curve-getfirstderiv pline
(vlax-curve-getparamatpoint pline midp)))
(if (zerop (cadr der))
(setq ang (/ pi 2))
(setq ang (- pi (atan (/ (car der) (cadr der)))))
)
(initget 6)
(setq hgt (getdist "\nEnter text height <5.0>: ")) - can this just be (set hgt 50))
(if (not hgt)(setq hgt 5.))
(initget 6) - what is (initget 6) ??
(setq gap (getdist "\nEnter distance of the text offset <2.5>: "))
- can this be (setq gap 75)
(if (not gap)(setq gap 2.5)) - can I delete these
(setq txp (polar midp ang gap))
(setq pref (getstring T "\nEnter label prefix <920>: "))
(if (eq "" pref)(setq pref "920")) can all this just be :-
(setq pref (strcat pref " (")) (setq pref (strcat pref “>(“))
(setq txt (strcat pref I want the prefix to be a >
"%<\\AcObjProp Object(%<\\_ObjId "
(itoa oid)
">%).Length \\f \"%lu2%pr2\">% m)");--> number of decimals = 1
)
I want it to only 1 decimal place ie 7.4m
(setq mtx (vlax-invoke acsp 'AddMText txp 0.0 txt)
)
(setq ang (- ang (/ pi 2)))
(setq ang (cond
((> pi ang (/ pi 2))(- pi ang))
((> (* pi 1.5) ang pi)(- ang pi))
((> (* pi 2) ang (* pi 1.5))(- (* pi 2) ang))
(T ang))
)
(vlax-put mtx 'AttachmentPoint 5 )
(vlax-put mtx 'InsertionPoint txp)
(vlax-put mtx 'Height hgt)
(vlax-put mtx 'Rotation ang)
(vla-update mtx)
(vlax-put mtx 'layer "TL - LD - Scanlight Interconnecting Dimension") - does this go here?
)
)
(princ)
)
(princ "\n Start command with SCANLINE ...")
(princ)
; +---------+---------+---------+---------+---------+---------+---------+ ; 我可以推荐Afralisp吗。net作为一个良好的起点。
页:
[1]