明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1120|回复: 23

[提问] 求个大佬帮忙看下红色处的代码,研究找不到原因

[复制链接]
发表于 2024-9-19 23:57:06 | 显示全部楼层 |阅读模式
本帖最后由 惜惜2 于 2024-10-7 11:00 编辑
  1. <blockquote>[code=lisp](setq filename (vl-filename-base (getvar "dwgname")))
  2. (if (setq space-pos (vl-string-search " " filename))
  3.   (progn
  4.     (setq drawing-number (substr filename 1 space-pos))
  5.     (setq part-name (substr filename (+ space-pos 2)))
  6.     (setq ss (ssget "x" '((0 . "INSERT"))))
  7.     (repeat (setq n (sslength ss))
  8.       (setq blockref (SSNAME SS (setq n (1- n))))
  9.       (setq blockref (vlax-ename->vla-object blockref))
  10.       (if (= (vla-get-HasAttributes blockref) :vlax-true)
  11.   (foreach attrib
  12.      (VLAX-SAFEARRAY->LIST
  13.        (VLAX-VARIANT-VALUE (vla-getattributes blockref))
  14.      )
  15.     (cond  ((= (vla-get-tagstring attrib) "客户图号")
  16.      (vla-put-textstring attrib drawing-number)
  17.     )
  18.     ((= (vla-get-tagstring attrib) "零件名称")
  19.      (vla-put-textstring attrib part-name)
  20.     )
  21.     ((and(= (vla-get-tagstring attrib) "设计日期")
  22.                      (equal (vla-get-textstring attrib) ""))
  23.      (vla-put-textstring attrib (menucmd "m=$(edtime,$(getvar,DATE),yyyy-mo-dd)"))))
  24.     )
  25.                 ((= (vla-get-tagstring attrib) "产品编码")
  26.                  (let ((product-code-value (vla-get-textstring attrib))))
  27.                 ((= (vla-get-tagstring attrib) "客户")
  28.                   (let ((extracted-code(substr product-code 2 3))))
  29.                   (vla-put-textstring attrib extracted-code)
  30.                 )
  31.     )
  32.   )
  33.       )
  34.     )
  35.   )
  36. )
  37. (princ)
[/code]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-10-7 17:16:00 | 显示全部楼层

  1. (defun c:test ()
  2.   (setq e1 nil)
  3.   (setq filename (vl-filename-base (getvar "dwgname")))
  4.   (if (setq space-pos (vl-string-search " " filename))
  5.     (progn
  6.       (setq drawing-number (substr filename 1 space-pos))
  7.       (setq part-name (substr filename (+ space-pos 2)))
  8.       (setq ss (ssget "x" '((0 . "INSERT"))))
  9.       (repeat (setq n (sslength ss))
  10.         (setq blockref (SSNAME SS (setq n (1- n))))
  11.         (setq blockref (vlax-ename->vla-object blockref))
  12.         (if (= (vla-get-HasAttributes blockref) :vlax-true)
  13.           (progn
  14.             (foreach attrib
  15.                      (VLAX-SAFEARRAY->LIST
  16.                        (VLAX-VARIANT-VALUE (vla-getattributes blockref))
  17.                      )
  18.               (if (= (vla-get-tagstring attrib) "产品编码")
  19.                 (setq e1 (vla-get-textstring attrib))

  20.               )
  21.             )
  22.             (setq E2 (substr E1 2 3))
  23.             (foreach attrib
  24.                      (VLAX-SAFEARRAY->LIST
  25.                        (VLAX-VARIANT-VALUE (vla-getattributes blockref))
  26.                      )
  27.               (setq attribname (vla-get-tagstring attrib))
  28.               (cond ((wcmatch attribname "客户图号")
  29.                      (vla-put-textstring attrib drawing-number)
  30.                     )
  31.                     ((wcmatch attribname "零件名称")
  32.                      (vla-put-textstring attrib part-name)
  33.                     )
  34.                     ((and
  35.                        (wcmatch attribname "设计日期")
  36.                        (= (vla-get-textstring attrib) "")
  37.                      )
  38.                      (vla-put-textstring
  39.                        attrib
  40.                        (menucmd "m=$(edtime,$(getvar,DATE),yyyy-mo-dd)")
  41.                      )
  42.                     )
  43.                     ((wcmatch attribname "客户")
  44.                      (vla-put-textstring attrib E2)
  45.                     )
  46.               )
  47.             )
  48.           )
  49.         )
  50.       )
  51.     )
  52.   )
  53.   (princ)
  54. )
 楼主| 发表于 2024-10-10 10:19:09 | 显示全部楼层
本帖最后由 惜惜2 于 2024-10-10 14:22 编辑

ljpnb 发表于 2024-10-7 17:34
是的,先取值
平时很少用到属性块,也学习了一下
  1. (setq E1 nil)
  2. (setq E3 nil)
  3. (setq filename (vl-filename-base (getvar "dwgname")))
  4. (if (setq space-pos (vl-string-search " " filename))
  5.   (progn
  6.     (setq drawing-number (substr filename 1 space-pos))
  7.     (setq part-name (substr filename (+ space-pos 2)))
  8.     (setq ss (ssget "x" '((0 . "INSERT"))))
  9.     (repeat (setq n (sslength ss))
  10.       (setq blockref (SSNAME SS (setq n (1- n))))
  11.       (setq blockref (vlax-ename->vla-object blockref))
  12.       (if (= (vla-get-HasAttributes blockref) :vlax-true)
  13.   (progn
  14.     (foreach attrib
  15.        (VLAX-SAFEARRAY->LIST
  16.          (VLAX-VARIANT-VALUE (vla-getattributes blockref))
  17.        )
  18.       (if  (or (= (vla-get-tagstring attrib) "产品编码")
  19.                     (= (vla-get-tagstring attrib) "编号"))
  20.         (setq e1 (vla-get-textstring attrib))
  21.       )
  22.     )
  23.     (setq E2 (substr E1 2 3))
  24.     (foreach attrib
  25.        (VLAX-SAFEARRAY->LIST
  26.          (VLAX-VARIANT-VALUE (vla-getattributes blockref))
  27.        )
  28.       (if(and(= (vla-get-tagstring attrib) "设计日期")(not (equal (vla-get-textstring attrib) "")))
  29.         (setq E3 (vl-prin1-to-string (vla-get-textstring attrib)))
  30.       )
  31.      )
  32.           (if E3
  33.             (setq e3-length (length E3))
  34.             )
  35.           (if E3
  36.             (if (>= e3-length 8)
  37.               (setq E4 (strcat (substr E3 0 4) "-" (substr E3 4 2) "-" (substr E3 6 2)))
  38.               (setq E4 nil))
  39.           )
  40.           (foreach attrib
  41.        (VLAX-SAFEARRAY->LIST
  42.          (VLAX-VARIANT-VALUE (vla-getattributes blockref))
  43.        )
  44.       (cond ((= (vla-get-tagstring attrib) "客户图号")
  45.        (vla-put-textstring attrib drawing-number)
  46.       )
  47.       ((= (vla-get-tagstring attrib) "零件名称")
  48.        (vla-put-textstring attrib part-name)
  49.       )
  50.       ((and(= (vla-get-tagstring attrib) "设计日期")
  51.                        (equal (vla-get-textstring attrib) ""))
  52.                    (if E4
  53.                      (vla-put-textstring attrib E4)
  54.                      (vla-put-textstring attrib (menucmd "m=$(edtime,$(getvar,DATE),yyyy-mo-dd)")))
  55.       )
  56.       ((= (vla-get-tagstring attrib) "客户")
  57.         (vla-put-textstring attrib E2)
  58.       )  
  59.       )
  60.     )
  61.   )
  62.       )
  63.     )
  64.   )
  65. )
  66. (princ)


   有时间帮忙看下这个吗,假设属性值不为空时,赋值给E3并转换格式再赋值给E4这里有问题
 楼主| 发表于 2024-10-7 11:35:58 | 显示全部楼层
kozmosovia 发表于 2024-10-7 11:01
(let ((extracted-code (substr product-code 2 3)))
这个不是alisp的函数

(setq filename (vl-filename-base (getvar "dwgname")))
(if (setq space-pos (vl-string-search " " filename))
  (progn
    (setq drawing-number (substr filename 1 space-pos))
    (setq part-name (substr filename (+ space-pos 2)))
    (setq ss (ssget "x" '((0 . "INSERT"))))
    (repeat (setq n (sslength ss))
      (setq blockref (SSNAME SS (setq n (1- n))))
      (setq blockref (vlax-ename->vla-object blockref))
      (if (= (vla-get-HasAttributes blockref) :vlax-true)
        (foreach attrib
                 (VLAX-SAFEARRAY->LIST
                   (VLAX-VARIANT-VALUE (vla-getattributes blockref))
                 )
          (cond        ((= (vla-get-tagstring attrib) "客户图号")
                 (vla-put-textstring attrib drawing-number)
                )
                ((= (vla-get-tagstring attrib) "零件名称")
                 (vla-put-textstring attrib part-name)
                )
                ((and(= (vla-get-tagstring attrib) "设计日期")
                     (equal (vla-get-textstring attrib) ""))
                 (vla-put-textstring attrib (menucmd "m=$(edtime,$(getvar,DATE),yyyy-mo-dd)")))))
                )
                ((= (vla-get-tagstring attrib) "产品编码")
                 (setq E1 (vla-get-textstring attrib))
                )
                ((= (vla-get-tagstring attrib) "客户")
                 (setq E2 (substr E1 2 3))
                 (vla-put-textstring attrib E2)
                )
          )
        )
      )
    )
  )
)
(princ)
我提取变量赋值也是不成功  大佬再帮忙看看
发表于 2024-9-20 08:06:22 | 显示全部楼层
(substr "abcdef" 2 3)
返回:"bcd"

(substr "abcdef" 2 2)
返回:"bc"

是这个意思么
 楼主| 发表于 2024-9-20 08:09:12 | 显示全部楼层
被承包的东子 发表于 2024-9-20 08:06
(substr "abcdef" 2 3)
返回:"bcd"

是的,是因为我的变量值没有加引号?
 楼主| 发表于 2024-10-7 10:53:51 | 显示全部楼层
本帖最后由 惜惜2 于 2024-10-7 11:01 编辑

有大佬帮忙看下吗?这段不成功,谢谢
  1. ((= (vla-get-tagstring attrib) "产品编码")
  2.                  (let ((product-code-value (vla-get-textstring attrib))))
  3.                 ((= (vla-get-tagstring attrib) "客户")
  4.                   (let ((extracted-code(substr product-code 2 3))))
  5.                   (vla-put-textstring attrib extracted-code)
复制代码


发表于 2024-10-7 11:01:24 | 显示全部楼层
本帖最后由 kozmosovia 于 2024-10-7 11:06 编辑

(let ((extracted-code (substr product-code 2 3)))
这个不是alisp的函数

另外除非产品编码属性定义在客户之前,否则需要循环两次属性才能修改客户内容:第一次获得需要改的内容,第二次修改。

 楼主| 发表于 2024-10-7 11:06:56 | 显示全部楼层
本帖最后由 惜惜2 于 2024-10-7 11:09 编辑
kozmosovia 发表于 2024-10-7 11:01
(let ((extracted-code (substr product-code 2 3)))
这个不是alisp的函数

产品编码属性定义在客户之前,另外使用字段是如何获取特定内容的,要求是第二到三位数,我看是获取了全部的值。用字段更新过去,再使用substr去筛选客户标签一次?
发表于 2024-10-7 14:59:34 | 显示全部楼层
(vla-put-textstring attrib (menucmd "m=$(edtime,$(getvar,DATE),yyyy-mo-dd)")))))这句右括号多了3个
 楼主| 发表于 2024-10-7 15:14:34 | 显示全部楼层
本帖最后由 惜惜2 于 2024-10-7 15:20 编辑
ljpnb 发表于 2024-10-7 14:59
(vla-put-textstring attrib (menucmd "m=$(edtime,$(getvar,DATE),yyyy-mo-dd)")))))这句右括号多了3个

删掉以后还是提取不成功,是什么原因,我这个也是在你写的基础上面改的,前面的都正常。我测试发现E1赋值不成功,返回的是E2为空的值
发表于 2024-10-7 16:01:15 | 显示全部楼层
(if (setq space-pos (vl-string-search " " filename))
文件名带有空格才会执行后面的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-21 03:29 , Processed in 0.186052 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表