ids3rd 发表于 2022-7-6 10:28:38

需要此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)
; +---------+---------+---------+---------+---------+---------+---------+ ;

ids3rd 发表于 2022-7-6 10:51:06

嗨,有人能帮我吗!!

BlackBox 发表于 2022-7-6 10:59:45

 
 
我认为这可能是“今天的轻描淡写”。
 
我不是故意粗鲁,但你还没有得到任何帮助,因为你的请求还没有把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")

 
 
希望这有帮助!

ids3rd 发表于 2022-7-6 11:16:28

谢谢你的回复-
至少现在我明白了为什么我的帖子不合适了——但对于一个没有接受过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)
; +---------+---------+---------+---------+---------+---------+---------+ ;

Tiger 发表于 2022-7-6 11:30:07

我可以推荐Afralisp吗。net作为一个良好的起点。
页: [1]
查看完整版本: 需要此LISP的帮助