kucha007 发表于 2024-4-23 20:56:45

【MU】多重引线常用的数据

本帖最后由 kucha007 于 2024-4-24 07:47 编辑

关于多重引线常用的一些数据
主要来自LEEMAC在这篇帖子回帖。我也做了一点补充http://www.theswamp.org/index.php?topic=55023.0

基础函数:




;返回满足Key值的表第二项
(defun K:Assoc->Cdr (Key TgtLst)
(mapcar 'cdr (vl-remove-if-not '(lambda (XX) (= Key (car XX))) TgtLst))
)
;解析XDATA表
(defun K:ParseXData (TgtLst / K:Rtn)
(defun K:Rtn (/ XX)
    (setq XX (car TgtLst)
          TgtLst (cdr TgtLst)
    )
    (cond
      ((or (null XX) (= "}" (cdr XX))) nil)
      ((and (= 'STR (type (cdr XX))) (wcmatch (cdr XX) "*{"))
            (cons (cons (cdr XX) (K:Rtn)) (K:Rtn))
      )
      ((cons XX (K:Rtn)))
    )
)
(K:Rtn)
)





一些常用的数据:

(setq en (car (nentsel))
      obj (vlax-ename->vla-object en)
)
(setq MULTDATA (cdr (assoc"CONTEXT_DATA{" (K:ParseXData (entget en)))))
(setq LeadDATA (cdr (assoc "LEADER{" MULTDATA)))

(K:GetProp obj 'DoglegLength);基线距离
(K:GetProp obj 'LandingGap);基线间隙
(K:GetProp obj 'ScaleFactor);多重引线比例
(K:GetProp obj 'TextString);文字内容

(cdr (assoc 40 MULTDATA));多重引线比例
(cdr (assoc 10 MULTDATA));基线距离处的坐标
(cdr (assoc 304 MULTDATA));文字内容
(cdr (assoc 10 LeadDATA));多重引线拐点

(setq BsePTLst (mapcar '(lambda (XX) (cdr (assoc 10 XX))) (K:Assoc->Cdr "LEADER_LINE{" LeadDATA)));所有基点的坐标


其它:
不知道怎么获取文字末端的坐标,难道真要按字符个数去算啊= =

你有种再说一遍 发表于 2024-4-23 21:33:08

没有那么简单,文字渲染的坐标早就不是什么秘密了吧,字体解析时候有个table表示不定宽度.但是你可能从来没有处理过文件解析这样的事情...

guosheyang 发表于 2024-4-24 07:59:10

感谢经验分享!

kucha007 发表于 2024-4-24 08:35:26

你有种再说一遍 发表于 2024-4-23 21:33
没有那么简单,文字渲染的坐标早就不是什么秘密了吧,字体解析时候有个table表示不定宽度.但是你可能从来没有 ...

确实没处理过,目前只会lisp

liuhe 发表于 2024-4-24 12:03:10

分解获取文字包围盒
页: [1]
查看完整版本: 【MU】多重引线常用的数据