Eranac 发表于 2022-7-6 06:59:07

口齿不清的错误

你好
 
我有一个Lisp程序的工作很好的人,但它不适合我。
 
该lisp旨在将平面的二维平面转换为平面内有导管或护套的三维平面。有两条多段线(一条用于平面的外部,另一条用于风管的外部)。
 
该过程是设置多段线的高程并拉伸平面的多段线,而不包含平面内“风管”的体积。
 
你可以在这个视频中看到:
 
这是lisp,我不明白为什么有消息表明ssget函数模式错误
 
(defun c:ex-sub (/ sd s pts ss cm e ent i s1)
;;;        ==-- Author : Tharwat Al Shoufi        --==        ;;;
;;;        Extrude and extract inside polylines        ;;;
(vl-load-com)
(or Doc (setq Doc (vla-get-ActiveDocument (vlax-get-acad-object))))
(setq *elv* (if *elv*
               *elv*
               1.0
             )
       *ex*(if *ex*
               *ex*
               1.0
             )
)
(if
   (and (progn (initget 6)
               (setq *elv* (cond ((getdist (strcat "\n Specify Elevations " (strcat " < " (rtos *elv* 2 2) " > :"))))
                                 (t *elv*)
                           )
               )
      )
      (progn (initget 6)
               (setq *ex* (cond ((getdist (strcat "\n Specify extrusion height " (strcat " < " (rtos *ex* 2 2) " > :"))))
                              (t *ex*)
                        )
               )
      )
      (setq sd (ssadd))
      (setq s (car (entsel "\nSelect Single outside LWpolyline")))
      (if (wcmatch (cdr (assoc 0 (setq e (entget s)))) "*POLYLINE")
          t
          (progn (princ "\n Your selection is not a polyline or nothing selected !!") nil)
      )
   )
    (progn (foreach pt e
             (if (eq (car pt) 10)
               (setq pts (cons (list (cadr pt) (caddr pt)) pts))
             )
         )
         (if (setq ss (ssget "WP" pts '((0 . "*POLYLINE"))))
             (progn (vla-StartUndoMark Doc)
                  (setq cm (getvar 'cmdecho))
                  (setvar 'cmdecho 0)
                  (entmod (subst (cons 38 *elv*) (assoc 38 e) e))
                  (command "_.extrude" s "" *ex*)
                  (setq s1 (entlast))
                  (repeat (setq i (sslength ss))
                      (entmod (subst (cons 38 *elv*) (assoc 38 (setq ent (entget (ssname ss (setq i (1- i)))))) ent))
                      (command "_.extrude" (ssname ss i) "" *ex*)
                      (ssadd (entlast) sd)
                  )
                  (command "_.subtract" s1 "" sd "")
                  (setvar 'cmdecho cm)
                  (vla-Endundomark Doc)
             )
         )
    )
    (princ)
)
(princ "\n Written by Tharwat Al Shoufi")
(princ)
)
 
你能帮我找到解决办法吗?
 
Lisp程序对你有用吗?

GP_ 发表于 2022-7-6 07:08:54

youtube链接无效
 
我们等待着塔瓦。

Tharwat 发表于 2022-7-6 07:21:46

 
您好,GP,
 
以下是
请尝试代码,并告诉我,如果它与你的工作或没有在视频中显示回来。

Eranac 发表于 2022-7-6 07:28:56

你好
 
我有一个Lisp程序的人很好的工作(所有这一切都是好的塔瓦谁写的),但它不适合我。
 
该lisp旨在将平面的二维平面转换为平面内有导管或护套的三维平面。有两条多段线(一条用于平面的外部,另一条用于风管的外部)。
 
该过程是设置多段线的高程并拉伸平面的多段线,而不包含平面内“风管”的体积。
 
你可以在塔尔瓦特邮报的视频中看到。
 
这是lisp,我不明白为什么有消息表明ssget函数模式错误
 
(defun c:ex-sub (/ sd s pts ss cm e ent i s1)
;;;        ==-- Author : Tharwat Al Shoufi        --==        ;;;
;;;        Extrude and extract inside polylines        ;;;
(vl-load-com)
(or Doc (setq Doc (vla-get-ActiveDocument (vlax-get-acad-object))))
(setq *elv* (if *elv*
               *elv*
               1.0
             )
       *ex*(if *ex*
               *ex*
               1.0
             )
)
(if
   (and (progn (initget 6)
               (setq *elv* (cond ((getdist (strcat "\n Specify Elevations " (strcat " < " (rtos *elv* 2 2) " > :"))))
                                 (t *elv*)
                           )
               )
      )
      (progn (initget 6)
               (setq *ex* (cond ((getdist (strcat "\n Specify extrusion height " (strcat " < " (rtos *ex* 2 2) " > :"))))
                              (t *ex*)
                        )
               )
      )
      (setq sd (ssadd))
      (setq s (car (entsel "\nSelect Single outside LWpolyline")))
      (if (wcmatch (cdr (assoc 0 (setq e (entget s)))) "*POLYLINE")
          t
          (progn (princ "\n Your selection is not a polyline or nothing selected !!") nil)
      )
   )
    (progn (foreach pt e
             (if (eq (car pt) 10)
               (setq pts (cons (list (cadr pt) (caddr pt)) pts))
             )
         )
         (if (setq ss (ssget "WP" pts '((0 . "*POLYLINE"))))
             (progn (vla-StartUndoMark Doc)
                  (setq cm (getvar 'cmdecho))
                  (setvar 'cmdecho 0)
                  (entmod (subst (cons 38 *elv*) (assoc 38 e) e))
                  (command "_.extrude" s "" *ex*)
                  (setq s1 (entlast))
                  (repeat (setq i (sslength ss))
                      (entmod (subst (cons 38 *elv*) (assoc 38 (setq ent (entget (ssname ss (setq i (1- i)))))) ent))
                      (command "_.extrude" (ssname ss i) "" *ex*)
                      (ssadd (entlast) sd)
                  )
                  (command "_.subtract" s1 "" sd "")
                  (setvar 'cmdecho cm)
                  (vla-Endundomark Doc)
             )
         )
    )
    (princ)
)
(princ "\n Written by Tharwat Al Shoufi")
(princ)
)
 
你能帮我找到解决办法吗?
 
Lisp程序对你有用吗?
 
谢谢塔瓦的帮助!

Eranac 发表于 2022-7-6 07:38:49

是的,卡拉克找到解决方案http://www.autolisp.com :
 
http://www.autolisp.com/forum/threads/797-Lisp-to-extrude-polyline-with-elevation-and-duct-inside-the-polyline?p=2928#post2928
 
谢谢卡拉,你有个好主意!
 
非常感谢你的帮助!我非常感激!

Tharwat 发表于 2022-7-6 07:45:20

 
随时欢迎你。

GP_ 发表于 2022-7-6 07:53:10

 
使用“WP”

Tharwat 发表于 2022-7-6 08:03:14

 
正确,之前Carl在这个链接中解决了这个问题。
 
谢谢你的时间,非常感谢。
页: [1]
查看完整版本: Lisp程序的错误